!*CMP2.09 07/16/01 BNETS 6038 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETS BNETS 6038 * * NEW FILE: \R.$EARL.SW6DBNET.BNETS BNETS 6038 * ******************************************************************************** #SCN = SW05001 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6038 #NEWVERSION = 6039 #ADD 00026l0C ! 16JUL2001 dtw/577 ! ! Symptom: When processing transactions with a tran currency code ! ! other than 840 (USD), the currency is not being ! ! converted correctly. ! ! Problem: The leftmost digit of the buy/sell rate fields from ! ! the ICFE denote the number of positions the decimal is ! ! moved from the right. This digit was being included in ! ! actual currency buy/sell rates. ! ! Fix: Populate the currency buy/sell scales with the first ! ! byte of the buy/sell rates from the ICFE. Populate the! ! currency buy/sell rates from the next seven bytes. ! ! Modified proc: init_pct_icfe ! ! Dependency: Apply fix to BNETS and run MAKE. ! ! Reference: Case #336330 ! #ADD 04308j59 INIT_PCT_ICFE call ascii^integer( icfe_bnet.buy^rate.byte[0], 1, pct.crncy.buy^scale ); call ascii^fixed( icfe_bnet.buy^rate.byte[1], 7, pct.crncy.buy^rate ); #DELETE 04308j5A/04308j5H INIT_PCT_ICFE #ADD 04308j5P INIT_PCT_ICFE call ascii^integer( icfe_bnet.sell^rate.byte[0], 1, pct.crncy.sell^scale ); call ascii^fixed( icfe_bnet.sell^rate.byte[1], 7, pct.crncy.sell^rate ); #DELETE 04308j5Q/04308j5W INIT_PCT_ICFE #ENDSCN = SW05001 !*CMP2.09 07/16/01 BNETLIBS6039 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6039 * * NEW FILE: \R.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6039 * ******************************************************************************** #SCN = SW05002 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6039 #NEWVERSION = 6040 #ADD 00026m8N ! 16JUL2001 dtw/577 ! ! Symptom: The correct amounts are not being returned on balance ! ! inquiries. ! ! Problem: The interface does not check for a sem^auth^response^d ! ! (0110) response returned on a balance inquiry. ! ! Fix: Changed proc to check for sem type sem^response^d or ! ! sem^auth^response^d. ! ! Modified proc: sem^frmt^amt^to^pstm^amt ! ! Dependency: Apply fix to BNETLIBS and run MAKE. ! ! Reference: Case #336435 ! #ADD 02033 SUB^CONVERT^AMT if sem.typ = sem^response^d or sem.typ = sem^auth^response^d then #DELETE 02034 SUB^CONVERT^AMT #ENDSCN = SW05002 !*CMP2.09 07/31/01 BNETDDLS6008 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6008 * * NEW FILE: \R.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6008 * ******************************************************************************** #SCN = SW05004 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00262H1A * 31JUL2001 DOO/1693 DOO/1693 * Symptom: Banknet Release 01.2 Mandates. * Problem: None. * Fix: 1. Added a new subelement within DE 48 to support the * Visa Deferred Billing Indicator. * 2. Added two new fields, Processing Code (DE 3) and * Visa Deferred Billing Indicator (SE 78 of DE 48), to the * BNET switch token. * 3. Updated the comments for subelement 83 within DE 48 * to reflect new IAVS response codes. * Modified sections: SEM * BNET-SWI-TKN-DATA * Dependency: Apply changes to BNETDDLS and BNETLIBS and remake. * Replace BNETMAN and BNETUPDT. * Reference: (retro of SW5P560 from WO #010602-01) #ADD 01094H02 SEM * 'B' = Street addresses match. Postal code not verified because * of incompatible formats. * 'C' = Street address and postal code not verified because of * incompatible formats. * 'D' = Street address and postal codes match for international * transaction. * 'I' = Address information not verified for international * transaction. * 'M' = Street addresses and postal codes match for international * transaction. * 'P' = Postal codes match. Street address not verified because * of incompatible formats. #ADD 01157H10 SEM * Visa Deferred Billing Indicator * Subfield tag = 78 06 visa-def-bill-ind-sub-fld-78. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #REPLACE 01157H13 SEM 04 user-fld pic x(22). #ADD 02760H05 SAF-BNET 02 visa-def-bill-ind pic x. 02 proc-cde pic x(6). #DELETE 02760E05 SAF-BNET #ENDSCN = SW05004 !*CMP2.09 07/31/01 BNETLIBS6040 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6040 * * NEW FILE: \R.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6040 * ******************************************************************************** #SCN = SW05005 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6040 #NEWVERSION = 6041 #ADD 00026n0A ! 31JUL2001 RAF/100 DOO/1693 ! Symptom: MasterCard is rejecting approved 0210 messages from the ! interface due to an invalid field 48, additional data, ! in the message. ! Problem: If the only data in field 48 is the 1 byte transaction ! category code, MasterCard does not want field 48 sent ! in the response. ! Fix: Modified the interface to not send field 48 in a ! response message to MasterCard if the only data in the ! field is the transaction category code. ! Modified procs: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and re-make. ! Reference: (retro of SW5P555 from Case #336361) ! 31JUL2001 DOO/1693 DOO/1693 ! Symptom: Banknet Release 01.2 Mandates. ! Problem: None. ! Fix: 1. Modified the Merchant Category Code "6050" so that ! it maps to the Transaction Category Code of "U" instead ! of "R". ! 2. Added a new Merchant Category Code "6534" that maps ! to a Transaction Category Code of "U". ! 3. Added a new processing code, "28" (Payment ! Transaction), that will be supported in inbound ! transactions. This processing code maps to an internal ! transaction code of "14" (Merchandise Return). ! 4. Added support for the value of "95" (chip card with ! unreliable CVV data) within DE 22 (POS Entry Mode). ! 5. Modified the code to include the new subelement, ! SE 78 (visa^def^bill^ind) within DE 48 in the Banknet ! switch token if it exists. Also modified the code to ! include DE 3 (Processing Code) in the Banknet switch ! token if exists. ! 6. Modified the collapse and expand procedures to ! support the new SE 78 within DE 48. ! Modified Procedures: PSTM^FRMT^SEM^ADDL^DATA ! SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ! SEM^FRMT^XRQST^TO^PSTM^0200 ! UTIL^COLLAPSE^SEM ! UTIL^EXPAND^SEM ! UTIL^SWI^TKN^INIT ! UTIL^SWI^TKN^UPDT ! Dependency: Apply changes to BNETDDLS and BNETLIBS and remake. ! Replace BNETMAN and BNETUPDT. ! Reference: (retro of SW5P561 from WO #010602-01) #ADD 00802m6C PSTM^FRMT^0210^TO^XRESP if sem.addl^data.lgth = "001" then ! ! ! If only the transaction category code is present in ! ! DE 48, do not send DE 48. ! ! ! begin addl^data^bit^d := 0; end; #REPLACE 01422m01 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 62, #REPLACE 01455Q01/01455Q02 PSTM^FRMT^SEM^ADDL^DATA "6012" , "6049" , "R" , "6050" , "6051" , "U" , #REPLACE 01455m05 PSTM^FRMT^SEM^ADDL^DATA "6534" , "6534" , "U" , #REPLACE 01564J01 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE literal b24^pos^number^tran^types^l = 12, #ADD 01586 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE "28", ! payment tran. ! "14", ! merchandise return #REPLACE 02618H01 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN literal b24^pos^number^tran^types^l = 12, #ADD 03542l04 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = "95" then begin movd( pstm.pt^srv^entry^mde, "05" ); end; #ADD 03542l09 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = "05" or sem.pos^entry^mde = "95" ) and crd^seq^num^bit^d then #DELETE 03542l0A SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 05555d0D UTIL^COLLAPSE^SEM if hdr.addl^data.info. visa^def^bill^ind^sub^fld^78. tag = "78" then begin call ascii^integer( hdr.addl^data.info. visa^def^bill^ind^sub^fld^78.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. visa^def^bill^ind^sub^fld^78.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 06170d08 UTIL^EXPAND^SEM if ptr[ length ] = "78" then begin movl( sem^ptr.addl^data.info. visa^def^bill^ind^sub^fld^78. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #REPLACE 10230m04 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "04"; #ADD 10230Z1G UTIL^SWI^TKN^INIT if addl^data^bit^d then begin #REPLACE 10230m07/10230m0E UTIL^SWI^TKN^INIT if sem.addl^data.info. visa^xstng^dbt^ind^sub^fld^85.tag = "85" then begin movl( bnet^tkn^buf.visa^xstng^dbt^ind, sem.addl^data.info. visa^xstng^dbt^ind^sub^fld^85.tag^data, $len( bnet^tkn^buf.visa^xstng^dbt^ind ) ); end; ! of if tag = "85" ! #REPLACE 10230m0G/10230m0N UTIL^SWI^TKN^INIT if sem.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86.tag = "86" then begin movl( bnet^tkn^buf.visa^svc^dvlpmt^ind, sem.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86.tag^data, $len( bnet^tkn^buf.visa^svc^dvlpmt^ind ) ); end; ! of if tag = "86" ! #REPLACE 10230d07/10230d0A UTIL^SWI^TKN^INIT if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then movl( bnet^tkn^buf.card^vrfy^result, sem.addl^data.info. cvc^sub^fld^87.tag^data, $len( bnet^tkn^buf.card^vrfy^result )); if sem.addl^data.info. visa^def^bill^ind^sub^fld^78.tag = "78" and sem.addl^data.info. visa^def^bill^ind^sub^fld^78.tag^data = "D" then begin movd( bnet^tkn^buf.visa^def^bill^ind, "1" ); end else begin movd( bnet^tkn^buf.visa^def^bill^ind, "0" ); end; ! of if tag = "78" ! end; ! if addl^data^bit^d ! if proc^cde^bit^d then begin move( bnet^tkn^buf.proc^cde, sem.proc^cde ); end; #ADD 10230d0H UTIL^SWI^TKN^UPDT if bnet^tkn^buf.visa^def^bill^ind <> blanks for $len( bnet^tkn^buf.visa^def^bill^ind ) then begin move( bnet^tkn.visa^def^bill^ind, bnet^tkn^buf.visa^def^bill^ind ); end; if bnet^tkn^buf.proc^cde <> blanks for $len( bnet^tkn^buf.proc^cde ) then begin move( bnet^tkn.proc^cde, bnet^tkn^buf.proc^cde ); end; #ENDSCN = SW05005 !*CMP2.09 07/31/01 BNETS 6039 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETS BNETS 6039 * * NEW FILE: \R.$EARL.SW6DBNET.BNETS BNETS 6039 * ******************************************************************************** #SCN = SW05010 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6039 #NEWVERSION = 6040 #ADD 00026m0E ! 31JUL2001 DOO/1693 ! Symptom: Removal of PCS/PLF support from Banknet Release 6.0 ! Interfaces. ! Problem: None. ! Fix: Removed code that enabled PCS/PLF support. ! Procedures Modified: BNETS^60^39 ! CMD^WARMBOOT ! CMD^WARMBOOT^STORE^GLOBALS ! CMD^WARMBOOT^RETRIEVE^GLOBALS ! INIT^ASSIGNPROC ! Procedures Deleted: PCS^^REQUEST^FROM^PROCESS ! Dependency: Apply fix to BNETG and BNETS and re-make. Replace ! BNETLOGM and BNETMAN. ! Reference: Case #337091 #DELETE 00272 BNETS^60^39 #DELETE 00334 /00339 BNETS^60^39 #ADD 00433 BNETS^60^39 begin #REPLACE 00434 /00434 OFFSET 0 BNETS^60^39 call util^send^msg( msg, 0, tag, fname ); end; #DELETE 00435 /00437 BNETS^60^39 #DELETE 02516R0Q/02516R0S CMD^WARMBOOT #DELETE 02599R1L CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599T4L CMD^WARMBOOT^RETRIEVE^GLOBALS #DELETE 02709R03 INIT^ASSIGNPROC #REPLACE 02709R04/02709R0A INIT^ASSIGNPROC !05! "A", 0, "RPT ", !06! "A", 0, "RPT-ERROR-FILE ", !07! "A", 1, "SAF ", !08! "A", 0, "SDF ", !09! "A", 0, "SW-RPT-OBEY-FILE ", !10! "A", 0, "SW-RPT01-PROG-NAME ", !11! "A", 0, "SW-RPT09-PROG-NAME ", #REPLACE 02709T01 INIT^ASSIGNPROC !12! "A", 0, "STF ", #REPLACE 02709j01/02709j03 INIT^ASSIGNPROC !13! "A", 0, "APCFEMT ", !14! "A", 0, "IPCFEMT ", !15! "A", 0, "ICFE ", #DELETE 02789R00 OFFSET 1/02792 INIT^ASSIGNPROC #REPLACE 02794R00 OFFSET 1 INIT^ASSIGNPROC !05! begin ! RPT #REPLACE 02798R00 OFFSET 1 INIT^ASSIGNPROC !06! begin ! RPT-ERROR-FILE ! #REPLACE 02802R00 OFFSET 1 INIT^ASSIGNPROC !07! begin ! SAF ! #REPLACE 02808R00 OFFSET 1 INIT^ASSIGNPROC !08! begin ! SDF ! #REPLACE 02812R00 OFFSET 1 INIT^ASSIGNPROC !09! begin ! SW-RPT-OBEY-FILE ! #REPLACE 02816R00 OFFSET 1 INIT^ASSIGNPROC !10! begin ! SW-RPT01-PROG-NAME ! #REPLACE 02820R00 OFFSET 1 INIT^ASSIGNPROC !11! begin ! SW-RPT09-PROG-NAME ! #REPLACE 02823T02 INIT^ASSIGNPROC !12! begin ! STF! #REPLACE 02823j01 INIT^ASSIGNPROC !13! begin #REPLACE 02823j08 INIT^ASSIGNPROC !14! begin #REPLACE 02823j0F INIT^ASSIGNPROC !15! begin #DELETE 04547 /04628 PCS^^REQUEST^FROM^PROCESS #ENDSCN = SW05010 !*CMP2.09 08/01/01 BNETG 6017 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \R.$ROOK.SW60BNET.BNETG BNETG 6017 * * NEW FILE: \R.$EARL.SW6DBNET.BNETG BNETG 6017 * ******************************************************************************** #SCN = SW05012 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6017 #NEWVERSION = 6018 #ADD 00025Q0E ! 31JUL2001 DOO/1693 ! Symptom: Removal of PCS/PLF support from Banknet Release 6.0 ! Interfaces. ! Problem: None. ! Fix: Removed code that enabled PCS/PLF support. ! Dependency: Apply fix to BNETG and BNETS and re-make. Replace ! BNETLOGM and BNETMAN. ! Reference: Case #337091 #ADD 00026O00 ?nolist, source =basrc_baddltal( ? acct_typ_constants, ? acq_rte_tkn, ? alt^merch^id^tkn, ? apcf_, ? apcf_prikey, ? cmd, ? crdhldr^serial^num^tkn, ? emv^discr^tkn, ? emv^rqst^tkn, ? emv^resp^tkn, ? emv^stat^tkn, ? emv^script^tkn, ? evt_msg_severity_constants, ? extmem_constants, ? fcb, ? fname_lgth_constants, ? icf, ? icfbase, ? icfebase_, ? ichg^compliance^tkn, ? ilf, ? init_constants, ? ipcf_, ? ipcf_prikey, ? keyf, ? lconf^key, ? lconf, ? mrch^serial^num^tkn, ? msg_cat_constants, ? msg_typ_constants, ? pan_, ? pos_dflt_chk_id_constants, ? pos_msg_typ_constants, ? posicf, ? posicfe_, ? ps50^tkn, ? ps51^tkn, ? ps2000^tkn, ? pt^srv^data^tkn, ? proc_cde, ? prfl, ? pstm, ? pstm_, ? purchase^tkn, ? sdcb, ? seg_constants, ? stf, ? swi^tkn, ? swiicf, ? swiicfe_, ? sym_name, ? track1^tkn, ? txn_alwd_constants, ? txn^prfl^tkn, ? txn_prfl_tkn, ? user^data ? ) ?list #DELETE 00026O01/00026O1P #DELETE 00026O30/00026O31 #DELETE 00422 #DELETE 01366E0I #ADD 01366L1N ?nolist, source =spannet_skelexts( ? format, ? initialize^message, ? lmcf^init, ? log^init, ? log^message, ? log^message^, ? netabend, ? netinit, ? netstop, ? netwrite, ? rcv^awaitio, ? rcv^reply ) ?list #DELETE 01366L1O/01366L22 #DELETE 01366L2D #ENDSCN = SW05012 !*CMP2.09 11/08/01 BNETMM 6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETMM BNETMM 6000 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETMM BNETMM 6000 * ******************************************************************************** #SCN = SW05075 , FILEID = BNETMM #VOLUME = $ROOK.SW60BNET #FILE = BNETMM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6000 #NEWVERSION = 6001 #ADD 0045 # 08NOV2001 bdc/65 # Symptom: MAKE -purge_targets doesn't purge the DDL Dictionaries. # Problem: MAKE Define swbnet_dict doesn't point to a DICTVER file. # Fix: Changed swbnet_dict to point to the DICTVER file so that # MAKE can detect it belongs to a DDL Dictionary Set. # Dependency: Apply fix and run MAKE. # Reference: Case #340501 #ADD 0072 swbnet_dict = \argus.$rook.sw60bnet.dictver #DELETE 0073 #ENDSCN = SW05075 !*CMP2.09 11/26/01 BNETLIBS6041 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6041 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6041 * ******************************************************************************** #SCN = SW05082 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6041 #NEWVERSION = 6042 #ADD 00026o19 ! 26NOV2001 gg/724 ! Symptom: Processing code "28" not supported in inbound ! transactions. ! Problem: When the 01.2 mandates were uplifted to the 6.0 code, ! the new processing code was added in the outbound ! processing. It should be supported in inbound ! processing. ! Fix: Move the support for processing code "28" from the ! outbound mapping procedure to the inbound mapping ! procedure. ! Procs modified: pstm^frmt^tran^to^sem^proc^cde and ! sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply changes to BNETLIBS and run MAKE. ! Reference: Case #340856 #DELETE 01586o01 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 02639 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN "28", ! payment tran ! "14", ! merchandise return ! #ENDSCN = SW05082 !*CMP2.09 12/12/01 BNETS 6040 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6040 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6040 * ******************************************************************************** #SCN = SW05085 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6040 #NEWVERSION = 6041 #ADD 00026n0E ! 12DEC2001 gg/724 ! Symptom: The interface is dumping with a trap #8018 when the ILF ! reports timer expires. ! Problem: When PCS support was removed, the line of code that ! sent the interprocess message to run the reports ! program was also removed. ! Fix: Replace the code that sends interprocess messages. ! Proc modified: bnets^60^40 ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #341553 ! ! 12DEC2001 gg/724 ! Symptom: Interface may dump because of an unititialized pointer. ! Problem: A pointer for auth_dest is declared but not initialized ! before it is used. Since the memory for the pointer ! will not be assigned until it is used, the data that is ! intended for the pointer shows up in various memory ! locations. ! Fix: Change the pointer declaration to have bounds, so it is ! to assigned a memory location before data is moved ! into it. ! Proc modified: bnet^sem^xresp^failed ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #341646 #REPLACE 00434n02/00435n02 BNETS^60^40 end else begin call util^send^msg( msg, 0, tag, fname, feinvalop ); end; #REPLACE 00868j01 BNET^SEM^XRESP^FAILED int .auth_dest[ 0:7 ]; #ENDSCN = SW05085 !*CMP2.09 12/18/01 BNETLIBS6042 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6042 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6042 * ******************************************************************************** #SCN = SW05087 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6042 #NEWVERSION = 6043 #REPLACE 00026m0U ! 30APR2001 cal/246 DOO/1693 ! #REPLACE 00026m3A ! 30APR2001 KEW/728 DOO/1693 ! #ADD 00026p0E ! 17DEC2001 kjw/571 DOO/1693 ! Symptom: Issuer recurring payment transactions do not propagate ! necessary token data in requests to Base24. ! Acquirer recurring payment transactions do not set ! field 61.4 in some instances. ! Problem: The interface does not use the MOTO^FLG from the PS51 ! token to indicate recurring payment transactions. ! Fix: Modified acquirer logic to use the MOTO^FLG from the ! PS51 token to set field 61.4 in the request to the ! interchange. ! Modified issuer logic to use the data in field 61.4 ! to set the MOTO^FLG in the PS51 token in the request ! to Base24. ! Modified procs: pstm^frmt^0200^to^xrqst ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and re-Make. ! Reference: (retro of SW5P523 from Case #334680) #ADD 00540X03 PSTM^FRMT^0200^TO^XRQST int .ps51^get^tkn( ps51^tkn^def ), ps51^get^lgth; #ADD 00700 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' ps51^tkn^id^d; if base24^rel^g = 5 and hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) then begin ! checking for recurring payment transactions if ps51^get^tkn.moto^flg = "2" then begin movd ( sem.ntl^pos^data.cond^cde.byte[ 3 ], "4" ); end; end; #ADD 03594X1Q SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[3] = "4" and sem.addl^data.info.tran^cat^cde = "T" then begin movd( ps51^tkn^data.moto^flg, "2" ); end; #ENDSCN = SW05087 !*CMP2.10 01/10/02 BNETG 6018 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6018 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6018 * ******************************************************************************** #SCN = SW05122 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6018 #NEWVERSION = 6019 #ADD 00025R08 ! 08JAN2002 DTW/577 ! ! Symptom: Triple/Single DES Enhancement. ! ! Problem: None. ! ! Fix: Added global triple_to_single_g. ! ! Sourced in: KEY6_ definitions from baddltal ! ! hiswpin_xlate_3dea_dea from hiswutle ! ! Dependency: Apply changes to BNETDDLS, BNETG, BNETLIBS, BNETM, ! ! BNETS, HISWUTLS, SECUTILS and run MAKE. ! ! Replace BNETLOGM, BNETMAN and BNETUPDT. ! ! Reference: WO #000211-01 (Triple DES) ! ! ! 08JAN2002 jds/1802 ! Symptom: Release 6.0 Format 2 File Support ! Problem: None ! Fix: Added support for format 2 files. ! Sourced in file_format_constants from BADDLTAL. Sourced ! in lib_file_open and lib_file_rec_addr from ! oklib_oklibte. Added the frmt2_savemax_l literal. ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS and RP09BNTS. ! Replace files BNETLOGM, BNETMAN and BNETUPDT. Apply ! corresponding fixes to BAUTILS, HISWUTLS and OKLIBTS. ! Run MAKE. ! Reference: WO #000202-01 #ADD 00026R00 ?nolist, source =basrc_baddltal( ? acct_typ_constants, ? acq_rte_tkn, ? alt^merch^id^tkn, ? apcf_, ? apcf_prikey, ? cmd, ? crdhldr^serial^num^tkn, ? emv^discr^tkn, ? emv^rqst^tkn, ? emv^resp^tkn, ? emv^stat^tkn, ? emv^script^tkn, ? evt_msg_severity_constants, ? extmem_constants, ? fcb, ? file_format_constants, ? fname_lgth_constants, ? icf, ? icfbase, ? icfebase_, ? ichg^compliance^tkn, ? ilf, ? init_constants, ? ipcf_, ? ipcf_prikey, ? key6_, ? keyf, ? lconf^key, ? lconf, ? mrch^serial^num^tkn, ? msg_cat_constants, ? msg_typ_constants, ? pan_, ? pos_dflt_chk_id_constants, ? pos_msg_typ_constants, ? posicf, ? posicfe_, ? ps50^tkn, ? ps51^tkn, ? ps2000^tkn, ? pt^srv^data^tkn, ? proc_cde, ? prfl, ? pstm, ? pstm_, ? purchase^tkn, ? sdcb, ? sdcb_, ? seg_constants, ? stf, ? swi^tkn, ? swiicf, ? swiicfe_, ? sym_name, ? track1^tkn, ? txn_alwd_constants, ? txn^prfl^tkn, ? txn_prfl_tkn, ? user^data ? ) ?list #DELETE 00026R01/00026R1N #ADD 00026O24 ! file_format_constants, #ADD 00026O2D ! key6_, #ADD 00026O2Y ! sdcb_ ! #ADD 00312 literal frmt2_savemax_l = 130; #ADD 00494 int triple_to_single_g := 0; #ADD 01366G09 triple_to_single_g, #ADD 01366N1O ?nolist, source =basrc_hiswutle( ? hiswcmd^trace, ? hiswfile^close, ? hiswfile^control, ? hiswfile^delete, ? hiswfile^keyposition, ? hiswfile^open, ? hiswfile^position, ? hiswfile^purge, ? hiswfile^read, ? hiswfile^reposition, ? hiswfile^saveposition, ? hiswfile^update, ? hiswfile^write, ? hiswilf^add^tkn, ? hiswilf^compress, ? hiswilf^expand, ? hiswilf^get^tkn, ? hiswilf^updt^tkn, ? hiswlink^init, ? hiswmem^allocatesegment, ? hiswmem^deallocatesegment, ? hiswmem^init, ? hiswpin^decode^pinpad, ? hiswpin^decode^pinpan, ? hiswpin_xlate_3dea_dea, ? hiswpstm_txn_alwd_acq, ? hiswpstm_txn_alwd_iss, ? hiswqueue^add, ? hiswqueue^delete ? ) #DELETE 01366N1P/01366N2I #ADD 01366N3V ! hiswpin_xlate_3dea_dea! #ADD 01366N5P ?nolist, source =oklib_oklibte( ? lib_extmem_alloc, ? lib_extmem_dalloc ? lib_file_open ? lib_file_rec_addr ? ) ?list #DELETE 01366N5Q/01366N5U #ADD 01366N5W ! lib_file_open ! lib_file_rec_addr #ENDSCN = SW05122 !*CMP2.10 01/10/02 BNETLIBS6043 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6043 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6043 * ******************************************************************************** #SCN = SW05123 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6043 #NEWVERSION = 6044 #ADD 00026q0N ! 20AUG2001 dtw/577 ! ! Symptom: Triple/Single DES Enhancement. ! ! Problem: None. ! ! Fix: Added Triple/Single DES support. ! ! Procs modified: util^expand^num ! ! util^frmt^ext^pin^to^int^pin ! ! util^frmt^int^pin^to^ext^pin ! ! Procs added: util_key6_get ! ! util_key6_updt ! ! Dependency: Apply changes to BNETDDLS, BNETG, BNETLIBS, BNETM, ! ! BNETS, HISWUTLS, SECUTILS and run MAKE. ! ! Replace BNETLOGM, BNETMAN and BNETUPDT. ! ! Reference: WO #000211-01 (Triple DES) ! ! ! 08JAN2002 jds/1802 ! Symptom: Release 6.0 Format 2 File Support ! Problem: None ! Fix: Added support for format 2 files. ! Procs modified: util^ilf^add ! util^ilf^get ! util^ilf^open ! util^ilf^updt ! util^ilf^updt^header ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS and RP09BNTS. ! Replace files BNETLOGM, BNETMAN and BNETUPDT. Apply ! corresponding fixes to BAUTILS, HISWUTLS and OKLIBTS. ! Run MAKE. ! Reference: WO #000202-01 #ADD 05970 UTIL^EXPAND^NMM int .nmm( nmm^def ) := wordaddr( @sem ); #ADD 06058g08 UTIL^EXPAND^NMM if index = 47 then begin if nmm.addl^data.key^info.lgth = "38" then begin move ( nmm.addl^data.key^info.key^chk^dgt, nmm.addl^data.key^info.key^data^1.chk ); end else if nmm.addl^data.key^info.lgth = "54" then begin move ( nmm.addl^data.key^info.key^chk^dgt, nmm.addl^data.key^info.key^data^2.chk ); end else begin move ( nmm.addl^data.key^info.key^chk^dgt, nmm.addl^data.key^info.key^data^3.chk ); end; end; !of index - 47 ! #REPLACE 06317D14 UTIL^FRMT^EXT^PIN^TO^INT^PIN begin string byte [0:31]; end; #REPLACE 06317m1C UTIL^FRMT^EXT^PIN^TO^INT^PIN string byte[ 0:31 ]; #ADD 06317D4U UTIL^FRMT^EXT^PIN^TO^INT^PIN if triple_to_single_g then begin if not hiswpin_xlate_3dea_dea( sdcb, 1, pct.secure.out^blk, pct.secure.in^blk, pct.secure.out^pad, pct.secure.in^pad, ext^pan.byte, pct.secure.in^key[ indx ], pct.secure.encrypt^key, pct.secure.in^key[ 1 - indx ], epin, ipin ) then ! ! ! hiswpin_xlate_3dea_dea returns an error ! ! condition if the translation fails. Executing! ! the not condition code here indicates the ! ! translation was successful. A zero (false) ! ! is returned in a successful translation. ! begin movl( ipin^key, pct.secure.encrypt^key, 16 ); set( ipin^lgth, 16 ); return true; end; end !of triple_to_single_g ! else begin movl ( ipin, epin, 16 ); movl ( ipin^key, in^key.byte, 16 ); movl ( user^key, old^key.byte, 16 ); set ( ipin^lgth, 16 ); return true; end; end; ! of secdev ! #DELETE 06317D4V UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317N12 UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317N13 UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317m1L UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317m1M UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317m1N UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317N15 UTIL^FRMT^EXT^PIN^TO^INT^PIN #DELETE 06317N16/06317D4Z UTIL^FRMT^EXT^PIN^TO^INT^PIN #REPLACE 06317m3B UTIL^FRMT^INT^PIN^TO^EXT^PIN string byte [0:31]; #ADD 06317m3O UTIL^FRMT^INT^PIN^TO^EXT^PIN string pinpad_frmt := "3"; string work_pin[ 0:15 ] := [ 16 * [ "0" ] ]; #ADD 06317m6Q UTIL^FRMT^INT^PIN^TO^EXT^PIN if triple_to_single_g then begin if hiswpin^encode^pinpad( cpin.byte, cpin^lgth, pct.secure.clear^key, 16, work_pin, 16, pct.secure.out^pad ) and not hiswpin_xlate_3dea_dea( sdcb, 9, pinpad_frmt, pct.secure.out^blk, ipin^pad, pct.secure.out^pad, ext^pan.byte, pct.secure.encrypt^key, out^key, user^key, work_pin, epin ) then ! ! ! hiswpin_xlate_3dea_dea returns an error ! ! condition if the translation fails. ! ! Executing the not condition code here ! ! indicates the translation was successful. ! ! A zero (false) is returned in a successful ! ! translation. ! begin return true; end; end !of triple_to_single_g ! else #ADD 06317m78 UTIL^FRMT^INT^PIN^TO^EXT^PIN if hiswpin^encode^pinpan( cpin.byte, cpin^lgth, out^key, 16, epin, 16, ext^pan.byte, 12, pct.secure.out^pad) then #DELETE 06317m79/06317m7C UTIL^FRMT^INT^PIN^TO^EXT^PIN #ADD 06317m7J UTIL^FRMT^INT^PIN^TO^EXT^PIN if hiswpin^encode^pinpad( cpin.byte, cpin^lgth, out^key, 16, epin, 16, pct.secure.out^pad) then #DELETE 06317m7K/06317m7N UTIL^FRMT^INT^PIN^TO^EXT^PIN #ADD 06317m8U UTIL^FRMT^INT^PIN^TO^EXT^PIN if triple_to_single_g then begin if int^origin = 1 then begin int^origin := 9; end; if not hiswpin_xlate_3dea_dea( sdcb, int^origin, ipin^frmt, pct.secure.out^blk, ipin^pad, pct.secure.out^pad, int^pan.byte, ipin^key, out^key, user^key, ipin, epin ) then ! ! ! hiswpin_xlate_3dea_dea returns an error ! ! condition if the translation fails. ! ! Executing the not condition code here ! ! indicates the translation was successful. ! ! A zero (false) is returned in a successful ! ! translation. ! begin return true; end; end !of triple_to_single_g ! else #ADD 06317m9O UTIL^FRMT^INT^PIN^TO^EXT^PIN if hiswpin^encode^pinpan( cpin.byte, cpin^lgth, out^key, 16, epin, 16, ext^pan.byte, 12, pct.secure.out^pad) then #DELETE 06317m9P/06317m9S UTIL^FRMT^INT^PIN^TO^EXT^PIN #ADD 06317m9Z UTIL^FRMT^INT^PIN^TO^EXT^PIN if hiswpin^encode^pinpad( cpin.byte, cpin^lgth, out^key, 16, epin, 16, pct.secure.out^pad) then #DELETE 06317mA0/06317mA3 UTIL^FRMT^INT^PIN^TO^EXT^PIN #ADD 06813N00 UTIL^ILF^ADD if pct.ilf[ indx ].fcb.file^frmt = 1 then begin pct.ilf.ferror := hiswfile^position( fnum, -2d ) end; if pct.ilf[ indx ].fcb.file^frmt = 2 then begin pct.ilf.ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, -2f ); end; if pct.ilf.ferror then #DELETE 06813N01 UTIL^ILF^ADD #ADD 07717 SUB^ILF^GET if hiswfile^keyposition( fnum, key, "PR", key^lgth, 1, feeof, ! allowable error !, pct.ilf[ indx ].fcb.file^frmt ) <> feok then #DELETE 07718 /07719 SUB^ILF^GET #ADD 07784 UTIL^ILF^OPEN wlform( error, "Failure on ILF, File \F, Error #" ) wlform( lib^open^err, "Open Internal Error #, #, File \F, #, #, #, #." ',' " Process abending" ) struct .stat_detl( lib_stat_detl_def ); int created := 0; int file_frmt; int index; int stat; #DELETE 07785 /07787 UTIL^ILF^OPEN #ADD 07796N00 UTIL^ILF^OPEN if not create^it then begin stat := lib_file_open( stat_detl, ilf^name^g, fnum, ! flags !, 1, ! tmf_on_flg !, ! setmode_funct !, ! setmode_param1 !, ! setmode_param2 !, ! tplt_fname !, ! altfile_mask !, ! create_temp_file !, ! created_flg !, ! fname_extrn !, ! seq_blk_buff_id !, ! seq_blk_buff_lgth !, file_frmt ); end; if create^it then begin stat := lib_file_open( stat_detl, ilf^name^g, fnum, ! flags !, 1, ! tmf_on_flg !, ! setmode_funct !, ! setmode_param1 !, ! setmode_param2 !, ilf^tmpl^g, mask, ! create_temp_file !, created, ! fname_extrn !, ! seq_blk_buff_id !, ! seq_blk_buff_lgth !, file_frmt ); end; case stat of begin lib_ok_l -> begin ! ! File create/open successful ! end; lib_param_miss_l -> begin ! ! Parameter missing. ! call log^message^( 2250, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2250 ); end; ! of case lib_param_miss_l lib_stat_detl_see_l -> begin if lib_nsk_file_sys_err_d( stat, stat_detl ) then begin ! ! File system error. ! if create^it then begin call log^message^( 2260, ! routing code !, @error, net.myname, evt_msg_severity_crit_l, @ilf^name^g, stat_detl.cde2 ); end; return false; end ! of if NSK error else begin ! ! Internal error. ! call log^message^( 2270, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2270 ); end; ! of internal error end; ! of case lib_stat_detl_see_l otherwise -> begin ! ! Unrecognizable status. ! call log^message^( 2275, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2275 ); end; ! of otherwise end; ! of case if created then begin pct.ilf.tran^updt^ctr := 0; end; #DELETE 07796N01/07828 UTIL^ILF^OPEN #ADD 07848 UTIL^ILF^OPEN ! ! Determine the index of the FNUM and set the file format. ! for index := 0 to ( $occurs( pct.ilf ) - 1 ) do begin if pct.ilf[ index ].fcb.filenum = fnum then begin pct.ilf[ index ].fcb.file^frmt := file_frmt; index := $occurs( pct.ilf ); end; end; #ADD 08197N00 UTIL^ILF^UPDT if pct.ilf[ cur^l ].fcb.file^frmt = 1 then begin error := hiswfile^position( fnum, 0d ) end; if pct.ilf[ cur^l ].fcb.file^frmt = 2 then begin error := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, 0f ); end; if error or #DELETE 08197N01 UTIL^ILF^UPDT #ADD 08236 UTIL^ILF^UPDT^HEADER wlform( error, "Failure on ILF, File \F, Error #" ) wlform( lib^open^err, "Open Internal Error #, #, File \F, #, #, #, #." ',' " Process abending" ) #ADD 08238 UTIL^ILF^UPDT^HEADER struct .stat_detl( lib_stat_detl_def ); fixed last_addr_frmt2 := 0f; #DELETE 08239 UTIL^ILF^UPDT^HEADER #ADD 08243N02 UTIL^ILF^UPDT^HEADER int file_frmt; int .ilf^posn^frmt2[ 0:frmt2_savemax_l ]; int index; int posn_blk_size; int stat; int x; #REPLACE 08245 UTIL^ILF^UPDT^HEADER string last_addr_frmt2_s = last_addr_frmt2; #ADD 08248N05 UTIL^ILF^UPDT^HEADER begin ! ! Determine the index of the FNUM ! for x := 0 to ( $occurs( pct.ilf ) -1 ) do begin if pct.ilf[ x ].fcb.filenum = fnum then begin index := x; end; end; if pct.ilf[ index ].fcb.file^frmt = 1 then begin err := hiswfile^saveposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin err := hiswfile^saveposition( fnum, ! frmt 1 posn blk !, ! posn blk size !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, $occurs( ilf^posn^frmt2 ), posn_blk_size ); end; end #DELETE 08248N06 UTIL^ILF^UPDT^HEADER #DELETE 08249 UTIL^ILF^UPDT^HEADER #REPLACE 08250 /08250 OFFSET 0 UTIL^ILF^UPDT^HEADER if pct.ilf[ index ].fcb.file^frmt = 1 then begin file_frmt := file_frmt_1_l; stat := lib_file_rec_addr( stat_detl, fnum, file_frmt, last^addr, ! rec_addr_nxt_32bit !, ! rec_addr_cur_64bit !, ! rec_addr_nxt_64bit ! ); end; ! of if pct.ilf[ index ].fcb.file^frmt = 1 if pct.ilf[ index ].fcb.file^frmt = 2 then begin file_frmt := file_frmt_2_l; stat := lib_file_rec_addr( stat_detl, fnum, file_frmt, ! rec_addr_cur_32bit !, ! rec_addr_nxt_32bit !, last_addr_frmt2, ! rec_addr_nxt_64bit ! ); end; ! of if pct.ilf[ index ].fcb.file^frmt = 2 case stat of begin lib_ok_l -> begin ! ! Returned address successful ! end; lib_param_miss_l -> begin ! ! Parameter missing. ! call log^message^( 2212, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2212 ); end; ! of case lib_param_miss_l lib_stat_detl_see_l -> begin if lib_nsk_file_sys_err_d( stat, stat_detl ) then begin ! ! File system error. ! call log^message^( 2214, ! routing code !, @error, net.myname, evt_msg_severity_crit_l, @ilf^name^g, stat_detl.cde2 ); return false; end ! of if NSK error else begin ! ! Internal error. ! call log^message^( 2216, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2216 ); end; ! of internal error end; ! of case lib_stat_detl_see_l otherwise -> begin ! ! Unrecognizable status. ! call log^message^( 2218, ! routing code !, @lib^open^err, net.myname, evt_msg_severity_crit_l, stat_detl.cde1, stat_detl.cde2, @ilf^name^g, stat_detl.proc_num, stat, stat_detl.cde3, stat_detl.cde4 ); call abend^( 2218 ); end; ! of otherwise end; ! of case if pct.ilf[ index ].fcb.file^frmt = 1 then begin ferror := hiswfile^position( fnum, 0d ) end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, 0f ); end; if ferror then #DELETE 08251 UTIL^ILF^UPDT^HEADER #ADD 08255N01 UTIL^ILF^UPDT^HEADER begin if pct.ilf[ index ].fcb.file^frmt = 1 then begin call hiswfile^reposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin call hiswfile^reposition( fnum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, posn_blk_size ); end; end; #DELETE 08255N02 UTIL^ILF^UPDT^HEADER #ADD 08264N01 UTIL^ILF^UPDT^HEADER begin if pct.ilf[ index ].fcb.file^frmt = 1 then begin call hiswfile^reposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin call hiswfile^reposition( fnum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, posn_blk_size ); end; end; #DELETE 08264N02 UTIL^ILF^UPDT^HEADER #ADD 08268N02 UTIL^ILF^UPDT^HEADER begin if pct.ilf[ index ].fcb.file^frmt = 1 then begin call hiswfile^reposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin call hiswfile^reposition( fnum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, posn_blk_size ); end; end; #DELETE 08268N03 UTIL^ILF^UPDT^HEADER #ADD 08270 UTIL^ILF^UPDT^HEADER if pct.ilf[ index ].fcb.file^frmt = 1 then begin hdr.orig^net^pro ':=' last^addr^s for 4; end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin hdr.orig^net^pro ':=' last_addr_frmt2_s for 8; end; #DELETE 08271 UTIL^ILF^UPDT^HEADER #ADD 08279N01 UTIL^ILF^UPDT^HEADER begin if pct.ilf[ index ].fcb.file^frmt = 1 then begin call hiswfile^reposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin call hiswfile^reposition( fnum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, posn_blk_size ); end; end; #DELETE 08279N02 UTIL^ILF^UPDT^HEADER #ADD 08282N01 UTIL^ILF^UPDT^HEADER begin if pct.ilf[ index ].fcb.file^frmt = 1 then begin call hiswfile^reposition( fnum, ilf^posn ); end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin call hiswfile^reposition( fnum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf^posn^frmt2, posn_blk_size ); end; end; #DELETE 08282N02 UTIL^ILF^UPDT^HEADER #ADD 08367N02 UTIL^INCREMENT^TRACE ?section util_key6_get ?page " - util_key6_get" !##################################################################### !# # !# util_key6_get # !# # !# This procedure opens the KEY6 file and reads it sequentially # !# until the correct record is found. # !# # !# INPUT PARAMETERS: # !# fiid - fiid from the icf # !# # !# OUTPUT PARAMETERS: # !# key6 - key file record # !# # !# RETURNS: # !# TRUE: - If successful. # !# FALSE: - If unsuccessful. # !# # !##################################################################### int proc util_key6_get( fiid, key6 ); string .fiid; int .key6( key6_def ); begin wlform( error, "Failure on KEY6 File \F, Error \E" ) int ferror; if ferror := hiswfile^open( keyf^name^g, keyf^num^g, ! flags !, 1 ) then begin call log^message^( 2442, ! routing code !, @error, net.myname, 3, @keyf^name^g, ferror ); return false; end; init( key6.prikey, " ", $len( key6.prikey ) ); movd( key6.prikey_icf.rec_typ, "1" ); mov^( key6.prikey_icf.fiid, fiid ); mov^( key6.prikey_icf.swi_pro, net.myname ); if ferror := hiswfile^keyposition( keyf^num^g, key6, ! key^spec !, ! len !, 2 ) then begin call log^message^( 2444, ! routing code !, @error, net.myname, 3, @keyf^name^g, ferror ); return false; end; if ferror := hiswfile^read( keyf^num^g, key6, $len( key6 ) ) then begin call log^message^( 2446, ! routing code !, @error, net.myname, 3, @keyf^name^g, ferror ); return false; end; return true; end; !of proc util_key6_get ! ?section util_key6_updt ?page " - util_key6_updt" !##################################################################### !# # !# util_key6_updt # !# # !# This procedure updates a key6 record # !# # !# INPUT PARAMETERS: # !# key6 - KEY6 record # !# # !# OUTPUT PARAMETERS: # !# key6 - KEY6 record # !# # !# RETURN: # !# True: - If successful # !# False: - If unsuccessful # !# # !##################################################################### int proc util_key6_updt( key6 ); int .key6( key6_def ); begin wlform( error, "Failure on KEY6 File \F, Error \E" ) int ferror; if ferror := hiswfile^update( keyf^num^g, key6, $len( key6 ) ) then begin call log^message^( 2448, ! routing code !, @error, net.myname, 3, @keyf^name^g, ferror ); return false; end; call hiswfile^close( keyf^num^g ); return true; end; !of proc util_key6_updt ! #ENDSCN = SW05123 !*CMP2.10 01/10/02 BNETS 6041 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6041 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6041 * ******************************************************************************** #SCN = SW05126 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6041 #NEWVERSION = 6042 #ADD 00026o0O ! 08JAN2002 dtw/577 ! ! Symptom: Triple/Single DES Enhancement. ! ! Problem: None. ! ! Fix: Added Triple/Single DES support. ! ! Procs Modified: cmd^warmboot^retrieve^globals ! ! cmd^warmboot^store^globals ! ! init^get^lconf^info ! ! init^paramproc ! ! init^secure ! ! sem^key^chng^rqst ! ! tim^out^15^clr^old^key ! ! Dependency: Apply changes to BNETDDLS, BNETG, BNETLIBS, BNETM, ! ! BNETS, HISWUTLS, SECUTILS and run MAKE. ! ! Replace BNETLOGM, BNETMAN and BNETUPDT. ! ! Reference: WO #000211-01 (Triple DES) ! ! ! 08JAN2002 jds/1802 ! Symptom: Release 6.0 Format 2 File Support ! Problem: None ! Fix: Added support for format 2 files. ! Proc modified: init^ilf^review ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS and RP09BNTS. ! Replace files BNETLOGM, BNETMAN and BNETUPDT. Apply ! corresponding fixes to BAUTILS, HISWUTLS and OKLIBTS. ! Run MAKE. ! Reference: WO #000202-01 #REPLACE 00266j01 BNETS^60^41 PROC BNETS^60^40 MAIN; #ADD 02599R2S CMD^WARMBOOT^STORE^GLOBALS store^d( triple_to_single_g ); #DELETE 02599T06 CMD^WARMBOOT^STORE^GLOBALS #ADD 02599T1H CMD^WARMBOOT^STORE^GLOBALS triple_to_single_g := 0; #ADD 02599R8J CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( triple_to_single_g ); #ADD 03340R02 PARAMPROC tkn^name^g, triple_to_single_g ) then #DELETE 03340R03 PARAMPROC #REPLACE 03502 INIT^ILF^REVIEW fixed last^addr^frmt2 := 0f; #REPLACE 03507 /03507 OFFSET 0 INIT^ILF^REVIEW int index; int x; #ADD 03509 INIT^ILF^REVIEW ! ! Determine the index of the FNUM ! for x := 0 to ( $occurs( pct.ilf ) -1 ) do begin if pct.ilf[ x ].fcb.filenum = fnum then begin index := x; end; end; if pct.ilf[ index ].fcb.file^frmt = 1 then begin ferror := hiswfile^position( fnum, 0d ) end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, 0f ); end; if ferror then begin #DELETE 03510 /03511 INIT^ILF^REVIEW #ADD 03541 INIT^ILF^REVIEW if pct.ilf[ index ].fcb.file^frmt = 1 then begin last^addr ':=' hdr.orig^net^pro.byte for 4; end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin last^addr^frmt2 ':=' hdr.orig^net^pro.byte for 8; end; #DELETE 03542 INIT^ILF^REVIEW #ADD 03550J02 INIT^ILF^REVIEW if pct.ilf[ index ].fcb.file^frmt = 1 then begin ferror := hiswfile^position( fnum, last^addr + 1d ) end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, last^addr^frmt2 + 1f ); end; if ferror then #DELETE 03553 INIT^ILF^REVIEW #ADD 03941T05 INIT^PARAMPROC wlform( invdes, "The DES-TRIPLE-SINGLE param contains" ',' " invalid data. Triple to single PIN translations" ',' " will not be supported in this interface process. " ) #ADD 03945j0K INIT^PARAMPROC "P", "DES-TRIPLE-SINGLE ", #ADD 03996j4J INIT^PARAMPROC ! DES-TRIPLE-SINGLE ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin triple_to_single_g := 1; end else if lconf.param^msg.ptxt = "N" then begin triple_to_single_g := 0; end else begin call log^message^( 1269, ! routing code !, @invdes, net.myname, evt_msg_severity_info_l ); triple_to_single_g := 0; end; end; ! of case DES-TRIPLE-SINGLE ! #ADD 04484 INIT^SECURE struct .key6( key6_def ); #ADD 04494 INIT^SECURE else if triple_to_single_g then begin if not util_key6_get( pct.fiid, key6 ) then return false else begin ! ! ! Initialize the PCT fields used for Dynamic Key Mgmt ! ! ! if key6.interface.key_lgth = "2" then begin set( pct.secure.pin^key^lgth, 32 ); end else begin set( pct.secure.pin^key^lgth, 16 ); end; set( pct.secure.in^key^tran^cnt, 0d ); set( pct.secure.out^key^tran^cnt, 0d ); set( pct.secure.pin^key^tran^lmt, key6.interface.pin_key_tran_lmt ); set( pct.secure.old^key^timer^lmt, ( key6.interface.old_key_timer_lmt * 100d ) ); set( pct.secure.pin^key^timer^lmt, key6.interface.pin_key_timer_lmt ); call ascii^integer^( key6.interface.pin_key_variant, pct.secure.variant ); if pct.secure.pin^key^timer^lmt <> 0d then begin ! ! ! Delete any existing new key timer, and set the new ! ! key timer for Dynamic Key Management ! ! ! call timer^delete( tcb^g, typ^14^newkey^l, subtyp^8^newkey^l ); call timer^insert( tcb^g, pct.secure.pin^key^timer^lmt, typ^14^newkey^l, subtyp^8^newkey^l ); end; !of DKM field initialization ! move( pct.secure.out^typ, key6.interface.encrypt_typ ); move( pct.secure.in^typ, key6.interface.b24_encrypt_typ ); move( pct.secure.out^blk, key6.interface.pin_blk ); move( pct.secure.in^blk, key6.interface.pin_blk ); move( pct.secure.out^pan, key6.interface.ansi_pan ); move( pct.secure.in^pan, key6.interface.ansi_pan ); move( pct.secure.out^pad, key6.interface.pinpad_char ); move( pct.secure.in^pad, key6.interface.pinpad_char ); call ascii^integer^( key6.interface.inbound.pin.curr_indx, pct.secure.in^key^indx ); call ascii^integer^( key6.interface.outbound.pin.curr_indx, pct.secure.out^key^indx ); if key6.interface.encrypt_typ = "2" then begin call s^key^des( 1, key6.interface.exchng_key ); call s^key^des( 1, key6.interface.outbound.pin.key1 ); call s^key^des( 1, key6.interface.outbound.pin.key2 ); call s^key^des( 1, key6.interface.inbound.pin.key1 ); call s^key^des( 1, key6.interface.inbound.pin.key2 ); end; convert( pct.secure.exchng^key, key6.interface.exchng_key ); call binary^hexchar( pct.secure.exchng^key.byte[ 16 ], 16, key6.interface.exchng_key_extnd ); convert( pct.secure.clear^key, key6.interface.interm.key_clear ); convert( pct.secure.encrypt^key, key6.interface.interm.key_encrypt ); convert( pct.secure.out^key[ 0 ], key6.interface.outbound.pin.key1 ); convert( pct.secure.out^key[ 1 ], key6.interface.outbound.pin.key2 ); convert( pct.secure.in^key[ 0 ], key6.interface.inbound.pin.key1 ); convert( pct.secure.in^key[ 1 ], key6.interface.inbound.pin.key2 ); convert( pct.secure.in^key^chk^dgt[ 0 ], key6.interface.inbound.pin.key_chk_value1 ); convert( pct.secure.in^key^chk^dgt[ 1 ], key6.interface.inbound.pin.key_chk_value2 ); convert( pct.secure.out^key^chk^dgt[ 0 ], key6.interface.outbound.pin.key_chk_value1 ); convert( pct.secure.out^key^chk^dgt[ 1 ], key6.interface.outbound.pin.key_chk_value2 ); call hiswfile^close( keyf^num^g ) ; end; ! of Initialize PCT fields with KEY6 ! end ! of triple_to_single_g ! #ADD 04499k03 INIT^SECURE if keyf.interface.key^lgth = "2" then begin set( pct.secure.pin^key^lgth, 32 ); end else begin set( pct.secure.pin^key^lgth, 16 ); end; #REPLACE 06101k15 SEM^KEY^CHNG^RQST string newkey[ 0:31 ]; #ADD 06101k16 SEM^KEY^CHNG^RQST struct .key6( key6_def ); #ADD 06101k1Z SEM^KEY^CHNG^RQST kek^to^mfk^l, newkey, chk^dgt, ! get^check^digit !, pct.secure.pin^key^lgth, ! rsm^xlate^key^type !, triple_to_single_g ) then #DELETE 06101k20 SEM^KEY^CHNG^RQST #ADD 06101k30 SEM^KEY^CHNG^RQST else if triple_to_single_g then begin ! ! ! This is an 0820 message indicating that the pending key ! ! should be activated. Since there is one key for inbound ! ! and outbound trans, the key indexes for inbound and ! ! outbound will be the same. ! ! ! call util_key6_get( pct.fiid, key6 ); if pending^key^idx = 0 then begin set( pct.secure.in^key^indx, 1 ); set( pct.secure.out^key^indx, 1 ); convert( pct.secure.in^key[ pending^key^idx ], key6.interface.inbound.pin.key1 ); convert( pct.secure.out^key[ pending^key^idx ], key6.interface.outbound.pin.key1 ); convert( pct.secure.in^key^chk^dgt[ pending^key^idx ], key6.interface.inbound.pin.key_chk_value1 ); convert( pct.secure.out^key^chk^dgt[ pending^key^idx ], key6.interface.outbound.pin.key_chk_value1 ); end else begin set( pct.secure.in^key^indx, 2 ); set( pct.secure.out^key^indx, 2 ); convert( pct.secure.in^key[ pending^key^idx ], key6.interface.inbound.pin.key2 ); convert( pct.secure.out^key[ pending^key^idx ], key6.interface.outbound.pin.key2 ); convert( pct.secure.in^key^chk^dgt[ pending^key^idx ], key6.interface.inbound.pin.key_chk_value2 ); convert( pct.secure.out^key^chk^dgt[ pending^key^idx ], key6.interface.outbound.pin.key_chk_value2 ); end; call integer^ascii^( key6.interface.inbound.pin.curr_indx, pct.secure.in^key^indx ); call integer^ascii^( key6.interface.outbound.pin.curr_indx, pct.secure.out^key^indx ); call timestamp( key6.interface.last_tran.lt_timestamp ); set( key6.interface.last_tran.nonstop_id, 0 ); key6.interface.last_tran.pro_num := net.mynetid.<4:15>; if pct.secure.old^key^timer^lmt <> 0d then begin ! ! ! Set the timer to clear the old keys ! ! ! call timer^insert( tcb^g, pct.secure.old^key^timer^lmt, typ^15^clr^old^key^l ); end; if pct.secure.pin^key^timer^lmt <> 0d then begin ! ! ! Delete and reset the new key timer ! ! ! call timer^delete( tcb^g, typ^14^newkey^l, subtyp^8^newkey^l ); call timer^insert( tcb^g, pct.secure.pin^key^timer^lmt, typ^14^newkey^l, subtyp^8^newkey^l ); end; ! ! ! Reset the new key transaction counters ! ! ! set( pct.secure.in^key^tran^cnt, 0d ); set( pct.secure.out^key^tran^cnt, 0d ); ! ! ! Update the KEY6 record with the new key data ! ! ! call util_key6_updt( key6 ); end !of triple_to_single_g ! #ADD 06101k3F SEM^KEY^CHNG^RQST hexchar^binary( pct.secure.in^key[ pending^key^idx ], 16, keyf.interface.inbound.pin.key1 ); hexchar^binary( pct.secure.out^key[ pending^key^idx ], 16, keyf.interface.outbound.pin.key1 ); #DELETE 06101k3G/06101k3K SEM^KEY^CHNG^RQST #ADD 06101k3U SEM^KEY^CHNG^RQST hexchar^binary( pct.secure.in^key[ pending^key^idx ], 16, keyf.interface.inbound.pin.key2 ); hexchar^binary( pct.secure.out^key[ pending^key^idx ], 16, keyf.interface.outbound.pin.key2 ); #DELETE 06101k3V/06101k3Z SEM^KEY^CHNG^RQST #ADD 08468k1G TIM^OUT^15^CLR^OLD^KEYS struct .key6( key6_def ); #ADD 08468k1L TIM^OUT^15^CLR^OLD^KEYS literal key^lgth^dbl^l = $len( key6.interface.inbound.pin.key1 ) * 2; #ADD 08468k1O TIM^OUT^15^CLR^OLD^KEYS if triple_to_single_g then begin ! ! ! Retrieve the KEY6 record ! ! ! call util_key6_get( pct.fiid, key6 ); ! ! ! Clear out the old inbound keys in the PCT and the KEY6 ! ! ! if pct.secure.in^key^indx = 2 then begin mov^( pct.secure.in^key[ 0 ], zeroes ); mov^( pct.secure.in^key^chk^dgt[ 0 ], zeroes ); call hexchar^binary( zeroes, key^lgth^dbl^l, key6.interface.inbound.pin.key1 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, key6.interface.inbound.pin.key_chk_value1 ); end else begin mov^( pct.secure.in^key[ 1 ], zeroes ); mov^( pct.secure.in^key^chk^dgt[ 1 ], zeroes ); call hexchar^binary( zeroes, key^lgth^dbl^l, key6.interface.inbound.pin.key2 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, key6.interface.inbound.pin.key_chk_value2 ); end; ! of clear old inbound keys ! ! ! ! Clear out the old outbound keys in the PCT and the KEY6 ! ! ! if pct.secure.out^key^indx = 2 then begin mov^( pct.secure.out^key[ 0 ], zeroes ); mov^( pct.secure.out^key^chk^dgt[ 0 ], zeroes ); call hexchar^binary( zeroes, key^lgth^dbl^l, key6.interface.outbound.pin.key1 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, key6.interface.outbound.pin.key_chk_value1 ); end else begin mov^( pct.secure.out^key[ 1 ], zeroes ); mov^( pct.secure.out^key^chk^dgt[ 1 ], zeroes ); call hexchar^binary( zeroes, key^lgth^dbl^l, key6.interface.outbound.pin.key2 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, key6.interface.outbound.pin.key_chk_value2 ); end; ! of clear old outbound keys ! ! ! ! Update the KEY6 record ! ! ! call util_key6_updt( key6 ); end ! of Retrieve the KEY6 record ! else begin ! ! ! Retrieve the KEYF record ! ! ! call util^keyf^get( pct.fiid, keyf ); ! ! ! Clear out the old inbound keys in the PCT and the KEYF ! ! ! if pct.secure.in^key^indx = 2 then begin mov^( pct.secure.in^key[ 0 ], zeroes ); mov^( pct.secure.in^key^chk^dgt[ 0 ], zeroes ); call hexchar^binary( zeroes, key^lgth^l, keyf.interface.inbound.pin.key1 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, keyf.interface.inbound.pin.key^chk^value1 ); end else begin mov^( pct.secure.in^key[ 1 ], zeroes ); mov^( pct.secure.in^key^chk^dgt[ 1 ], zeroes ); call hexchar^binary( zeroes, key^lgth^l, keyf.interface.inbound.pin.key2 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, keyf.interface.inbound.pin.key^chk^value2 ); end; ! of clear old inbound keys ! ! ! ! Clear out the old outbound keys in the PCT and the KEYF ! ! ! if pct.secure.out^key^indx = 2 then begin mov^( pct.secure.out^key[ 0 ], zeroes ); mov^( pct.secure.out^key^chk^dgt[ 0 ], zeroes ); call hexchar^binary( zeroes, key^lgth^l, keyf.interface.outbound.pin.key1 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, keyf.interface.outbound.pin.key^chk^value1 ); end else begin mov^( pct.secure.out^key[ 1 ], zeroes ); mov^( pct.secure.out^key^chk^dgt[ 1 ], zeroes ); call hexchar^binary( zeroes, key^lgth^l, keyf.interface.outbound.pin.key2 ); call hexchar^binary( zeroes, chk^dgt^lgth^l, keyf.interface.outbound.pin.key^chk^value2 ); end; ! of clear old outbound keys ! ! ! ! Update the KEYF record ! ! ! call util^keyf^updt( keyf ); end ! Retrieve the KEYF record ! #DELETE 08468k1P/08468k3B TIM^OUT^15^CLR^OLD^KEYS #ENDSCN = SW05126 !*CMP2.10 01/11/02 BNETDDLS6009 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6009 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6009 * ******************************************************************************** #SCN = SW05131 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00262I0F * 20AUG2001 DTW/577 ! * Symptom: Triple/Single DES Enhancement. ! * Problem: None. ! * Fix: Added new field pin-key-lgth to the BNET pct structure.! * Expanded fields in-key, out-key and exchng-key ! * in the pct secure structure from 16 to 32 bytes. Data ! * element 48 of the Network Management Message was ! * modified to support double and triple length keys. ! * Dependency: Apply changes to BNETDDLS, BNETG, BNETLIBS, BNETM, ! * BNETS, HISWUTLS, SECUTILS and run MAKE. ! * Replace BNETLOGM, BNETMAN and BNETUPDT. ! * Reference: WO #000211-01 (Triple DES) ! #ADD 00378H06 NMM 06 encrypt-key pic x(64). 06 key-data-1 redefines encrypt-key. 08 key pic x(16). 08 chk pic x(16). 08 filler pic x(32). 06 key-data-2 redefines encrypt-key. 08 key pic x(32). 08 chk pic x(16). 08 filler pic x(16). 06 key-data-3 redefines encrypt-key. 08 key pic x(48). 08 chk pic x(16). 06 key-chk-dgt pic x(16). 06 user-fld pic x(10). #DELETE 00378H07/00378H0A NMM #REPLACE 02208 PCT-BNET 04 in-key occurs 2 times pic x(32). #REPLACE 02214 PCT-BNET 04 out-key occurs 2 times pic x(32). #REPLACE 02218 PCT-BNET 04 exchng-key pic x(32). #ADD 02220H06 PCT-BNET 04 pin-key-lgth type binary 16. #ENDSCN = SW05131 !*CMP2.10 01/11/02 BNETM 6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETM BNETM 6001 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETM BNETM 6001 * ******************************************************************************** #SCN = SW05132 , FILEID = BNETM #VOLUME = $ROOK.SW60BNET #FILE = BNETM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6001 #NEWVERSION = 6002 #ADD 0088A07 # 20AUG2001 dtw/577 # Symptom: Triple/Single DES Enhancement # Problem: None. # Fix: Added baddl_ddlfkey6 to the dependency list. # Dependency: Apply changes to BNETDDLS, BNETG, BNETLIBS, BNETM, # BNETS, HISWUTLS, SECUTILS and run MAKE. # Replace BNETLOGM, BNETMAN and BNETUPDT. # Reference: WO #000211-01 #ADD 0122 $(baddl_ddlfkey6) \ #ADD 0190 $(baddl_ddlfkey6) \ #ENDSCN = SW05132 !*CMP2.10 01/16/02 BNETLIBS6044 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6044 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6044 * ******************************************************************************** #SCN = SW05150 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6044 #NEWVERSION = 6045 #ADD 00026r0S ! 16JAN2002 ahs/3152 DOO/1693 ! Symptom: The interface dumps when it finds an ILF record for a ! reversal message for which no internal message was ! created. ! Problem: The interface did not verify that the internal message ! stored in the ILF was valid before trying to expand it. ! Fix: Changed the code to ensure that the message type in ! the internal message savearea of the ILF is not all ! blanks or all zeroes before attempting to expand it. ! Procs modified: util^ilf^get ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: (retro of SW5P646 from Case #340393) #ADD 07756 SUB^ILF^GET begin if ilf.atm <> zeroes for $len( ilf.atm.typ ) and ilf.atm <> blanks for $len( ilf.atm.typ ) then #REPLACE 07756N01/07756N08 SUB^ILF^GET begin call util^ilf^expand^base24( ilf, base24^msg ); if not hiswilf^get^tkn( ilf, base24^msg, ilf^lgth, base24^rel^g ) then begin call abend^( 2010 ); end; end else begin return false; end; end; #ENDSCN = SW05150 !*CMP2.10 02/08/02 BNETDDLS6010 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6010 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6010 * ******************************************************************************** #SCN = SW05180 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6010 #NEWVERSION = 6011 #ADD 00262J0C * 08FEB2002 DOO/1693 * Symptom: Banknet Release 02.1 Mandates. * Problem: None. * Fix: 1. Added a new subelement, SE 43, within DE 48 to * support the Universal Card Authentication field. * 2. Added a new field (UCAF-IND) within subelement 42 of * DE 42 to support the Universal Card Authentication * Field. * 3. Increased the size of the address field within DE * 120 from 20 bytes to 40 bytes to enable support for * International Address Verification (IAVS). * Modified sections: SEM * Dependency: New files: ILB0102M, ILB0102R, and ILB0102S. Apply * fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, BACOUTLS, * COBNAMES, DDLPSTKN, PSTKNCVS, and PSTKNID and re-MAKE. * Replace BNETLOGM, BNETMAN, and BNETUPDT. * Reference: (retro of SW5P662 from WO #011112-02, #011112-03, and * #011112-04) #ADD 01157E09 SEM 10 ucaf-ind pic 9. * Universal Card Authentication Field * Subfield tag = 43 06 ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(32). #REPLACE 01392 SEM 04 addr pic x(40). #ENDSCN = SW05180 !*CMP2.10 02/08/02 BNETG 6019 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6019 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6019 * ******************************************************************************** #SCN = SW05182 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6019 #NEWVERSION = 6020 #ADD 00025S0N ! 08FEB2002 DOO/1693 ! Symptom: Banknet Release 02.1 Mandates. ! Problem: None. ! Fix: 1. Added code to source in two new tokens, ! AUTHN^DATA^TKN (Authentication Data Token) and ! IAVS^DATA^TKN (International Address Verification), from ! file BADDLTAL. ! 2. Added a new global variable, DATA^ELEM^ERR^G, to ! hold the DE number that had an error during Universal ! Card Authentication Field data integrity checks. This ! number is then moved into DE 44 in the denial message. ! Dependency: New files: ILB0102M, ILB0102R, and ILB0102S. Apply ! fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, BACOUTLS, ! COBNAMES, DDLPSTKN, PSTKNCVS, and PSTKNID and re-MAKE. ! Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: (retro of SW5P663 from WO #011112-02, #011112-03, and ! #011112-04) #ADD 00026S00 ?nolist, source =basrc_baddltal( ? acct_typ_constants, ? acq_rte_tkn, ? alt^merch^id^tkn, ? apcf_, ? apcf_prikey, ? authn^data^tkn, ? cmd, ? crdhldr^serial^num^tkn, ? emv^discr^tkn, ? emv^rqst^tkn, ? emv^resp^tkn, ? emv^stat^tkn, ? emv^script^tkn, ? evt_msg_severity_constants, ? extmem_constants, ? fcb, ? file_format_constants, ? fname_lgth_constants, ? iavs^data^tkn, ? icf, ? icfbase, ? icfebase_, ? ichg^compliance^tkn, ? ilf, ? init_constants, ? ipcf_, ? ipcf_prikey, ? key6_, ? keyf, ? lconf^key, ? lconf, ? mrch^serial^num^tkn, ? msg_cat_constants, ? msg_typ_constants, ? pan_, ? pos_dflt_chk_id_constants, ? pos_msg_typ_constants, ? posicf, ? posicfe_, ? ps50^tkn, ? ps51^tkn, ? ps2000^tkn, ? pt^srv^data^tkn, ? proc_cde, ? prfl, ? pstm, ? pstm_, ? purchase^tkn, ? sdcb, ? sdcb_, ? seg_constants, ? stf, ? swi^tkn, ? swiicf, ? swiicfe_, ? sym_name, ? track1^tkn, ? txn_alwd_constants, ? txn^prfl^tkn, ? txn_prfl_tkn, ? user^data ? ) #DELETE 00026S01/00026S1P #ADD 00026O1U ! authn^data^tkn, #ADD 00026O25 ! iavs^data^tkn, #ADD 00501 string .data^elem^err^g[ 0:2 ] := [ $occurs( data^elem^err^g ) * [" "] ]; #ENDSCN = SW05182 !*CMP2.10 02/08/02 BNETLIBS6045 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6045 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6045 * ******************************************************************************** #SCN = SW05183 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6045 #NEWVERSION = 6046 #ADD 00026s0C ! 08FEB2002 kjw/571 DOO/1693 ! Symptom: Key exchange message from interface not accepted by ! Mastercard. ! Problem: The interchange does not want field 127 sent in key ! exchange messages and the interface sends this field. ! Fix: Modified logic to not send field 127 for key exchange ! messages. ! Modified proc: sem^frmt^nmm^request ! Dependency: Apply fix to BNETLIBS and re-Make. ! Reference: (retro of SW5P520 from Case #334515) ! 08FEB2002 RAF/100 DOO/1693 ! Symptom: The PTLF's approval code is incorrect for transactions ! sent to the BNET interface for authorization. ! Problem: On response messages from BNET, the interface simply ! moves the external approval code into the PSTM's ! approval code. However, the external approval code is ! 6 bytes long where the PSTM's approval code is 8 bytes ! long. Since the original PSTM was initialized to ! zeroes, the PSTM's approval code's last 2 bytes contain ! zeroes. This causes the PTLF's approval code to not ! match the external approval code. ! Fix: Modified the interface to initialize the PSTM's ! approval code to blanks before moving the external ! approval code into it. ! Modified procs: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS and re-make. ! Reference: (retro of SW5P541 from Case #336045) ! 08FEB2002 kjw/571 DOO/1693 ! Symptom: Interface maps an internal response code to a value ! externally that is misleading. ! Problem: Base24 POS returns response code of 74 when CAF record ! is not found. Interface maps this to a value of "30" ! externally which means format error. ! Fix: Modified the response code table to translate an "074" ! from Base24 to an external "05". ! Modified Procedure: PSTM^FRMT^RESP^CDE^TO^SEM ! Dependency: Apply changes to BNETLIBS and remake. ! Reference: (retro of SW5P574 from Case 336916) ! 08FEB2002 RAF/100 DOO/1693 ! Symptom: The PSTM's approval code length is not being set on ! internal 0210 messages from the interface. ! Problem: The interface does not populate the PSTM's approval ! code length when formatting PSTM response messages. ! Fix: Modified the interface to set the PSTM's approval code ! length to the length of the external approval code ! field (bit 38). ! Modified procs: sem^frmt^xresp^to^pstm^0210. ! Dependency: Apply changes to BNETLIBS and run MAKE. ! Reference: (retro of SW5P630 from Case #339799) ! 08FEB2002 DOO/1693 ! Symptom: Banknet Release 02.1 Mandates. ! Problem: None. ! Fix: 1. Added support for Universal Card Authentication ! Field (UCAF). This will be used for standardizing the ! transport of cardholder authentication data for ! electronic commerce transactions, including mobile ! commerce, within authorization messages. ! Modified Procedures: PSTM^FRMT^SEM^ADDL^DATA ! SEM^FRMT^XRQST^TO^PSTM^0200 ! UTIL^COLLAPSE^SEM ! UTIL^EXPAND^SEM ! 2. Modified the code to enable support for ! International Address Verification (IAVS). ! Modified Procedures: PSTM^FRMT^0200^TO^XRQST ! SEM^FRMT^XRQST^TO^PSTM^0200 ! 3. Modified the code to initialize field VALID^CDE ! within the Interchange Compliance Token to spaces so ! that the portion of the settlement data spilt over from ! the previous field (TRACE^ID) can be clearly identified. ! Modified Procedures: SEM^FRMT^XRESP^TO^PSTM^0210 ! SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: New files: ILB0102M, ILB0102R, and ILB0102S. Apply ! fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, BACOUTLS, ! COBNAMES, DDLPSTKN, PSTKNCVS, and PSTKNID and re-MAKE. ! Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: (retro of SW5P681 from WO #011112-02, #011112-03, and ! #011112-04) #ADD 00535X02 PSTM^FRMT^0200^TO^XRQST iavs^data^tkn^lgth, .iavs^data^tkn( iavs^data^tkn^def ), #ADD 00712Q08 PSTM^FRMT^0200^TO^XRQST movd( tkn^id, iavs^data^tkn^id^d ); if base24^rel^g >= 5 and hiswtkn^get^tkn( pstm, tkn^id, @iavs^data^tkn, iavs^data^tkn^lgth ) then begin move( sem.crdhldr^addr.zip^cde, iavs^data^tkn.pstl^cde ); move( sem.crdhldr^addr.addr, iavs^data^tkn.addr ); ! ! Determine the length of the address in the IAVS Token ! rscan iavs^data^tkn.addr while " " -> @ptr; lgth := ( @ptr '-' @iavs^data^tkn.addr ) + 1; if lgth = 0 then begin lgth := $len( iavs^data^tkn.pstl^cde ); end else begin lgth := lgth + $len( iavs^data^tkn.pstl^cde ); end; end; #REPLACE 01296S05 PSTM^FRMT^RESP^CDE^TO^SEM "074",! Unable to Authorize ! "05",! Do not Honor! #REPLACE 01491Q01 PSTM^FRMT^SEM^ADDL^DATA string .ptr, #REPLACE 01491Q04/01491Q04 OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA int authn^data^tkn^lgth := 0, .authn^data^tkn( authn^data^tkn^def ), #REPLACE 01491d00 PSTM^FRMT^SEM^ADDL^DATA data^lgth, #REPLACE 01541d3B PSTM^FRMT^SEM^ADDL^DATA lgth, "07" ); #ADD 01541d3F PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [" "] ] then begin move( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); end; #ADD 01541d3K PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' authn^data^tkn^id^d; if ps51^get^tkn.authn^coll^ind = "2" and hiswtkn^get^tkn( pstm, tkn^id, @authn^data^tkn, authn^data^tkn^lgth ) then begin movd( sem.addl^data.info.ucaf^sub^fld^43.tag, "43" ); ! ! If the length of the token's Authentication ! Indicator Data is less than or equal to 32, move ! the token's UCAF data into the SE 43's TAG^DATA ! field for that length. Otherwise, move the data ! for the the maximum of 32 bytes. Set SE 43's ! length field accordingly. ! rscan authn^data^tkn. authn^ind^data while " " -> @ptr; data^lgth := ( @ptr '-' @authn^data^tkn. authn^ind^data ) + 1; if data^lgth <= 32 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43.lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data, data^lgth ); end else begin movd( sem.addl^data.info.ucaf^sub^fld^43.lgth, "32" ); move( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43.lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end; #ADD 02440 SEM^FRMT^NMM^REQUEST if nmm^info^cde <> nmm^rqst^key^xchng^l then begin private^data^bit^d := 1; mov^ ( sem.private^data.info, zeroes ); end; #DELETE 02441 /02442 SEM^FRMT^NMM^REQUEST #ADD 03167 SEM^FRMT^XRESP^TO^PSTM^0210 if sem^approved^d( sem ) and auth^id^resp^bit^d then begin call integer^ascii^( pstm.tran.apprv^cde^lgth, $len( sem.auth^id^resp ) ); mov^ ( pstm.tran.apprv^cde, blanks ); move ( pstm.tran.apprv^cde, sem.auth^id^resp ); end; #DELETE 03168 /03170 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208Q0O SEM^FRMT^XRESP^TO^PSTM^0210 compliance^get^tkn.valid^cde ':=' [ $len( compliance^get^tkn.valid^cde ) * [" "] ]; #REPLACE 03208X0C SEM^FRMT^XRESP^TO^PSTM^0210 movl( compliance^get^tkn.trace^id.byte[ lgth ], #ADD 03208Q17 SEM^FRMT^XRESP^TO^PSTM^0210 compliance^tkn.valid^cde ':=' [ $len( compliance^get^tkn.valid^cde ) * [" "] ]; #REPLACE 03509Z0N/03509Z0O SEM^FRMT^XRQST^TO^PSTM^0200 struct .authn^data^tkn( authn^data^tkn^def ), .bnet^tkn^buf( bnet^swi^tkn^data^def ), #ADD 03509Z0S SEM^FRMT^XRQST^TO^PSTM^0200 .iavs^data^tkn( iavs^data^tkn^def ), #REPLACE 03509N02 SEM^FRMT^XRQST^TO^PSTM^0200 addr^lgth, #REPLACE 03510 /03510 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 .pbit^map := wordaddr( @sem.pbit^map ), .sbit^map := wordaddr( @sem.sbit^map ); #ADD 03542Q0O SEM^FRMT^XRQST^TO^PSTM^0200 compliance^tkn.valid^cde ':=' [ $len( compliance^tkn.valid^cde ) * [" "] ]; #ADD 03594X24 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "0" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "2" then begin move( ps51^tkn^data.authn^coll^ind, sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind ); end; #ADD 03594Z2Z SEM^FRMT^XRQST^TO^PSTM^0200 ! ! If the value of the UCAF collection indicator is either "0" ! or "1", subelement 43 of DE 42 cannot contain UCAF data. On ! the other hand if the value is "2", UCAF data must be ! contained within subelement 43 of DE 42. If any of these ! conditions is not met, reject the message. ! if ( ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "0" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "1" ) and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * ["0"] ] ) ) or ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "2" and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * [" "] ] or sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * ["0"] ] ) ) then begin movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; if ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "2" ) and ( sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "5" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" ) then begin movd( data^elem^err^g, "061" ); return resp^format^error^sem^l; end; ! ! Authentication Data Token ! init( authn^data^tkn, " ", wlen( authn^data^tkn ) ); call ascii^integer^( sem.addl^data.info.ucaf^sub^fld^43.lgth, temp^lgth ); if sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind = "2" and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * ["0"] ] ) then begin movd( authn^data^tkn.authn^ind^flg, "01" ); movl( authn^data^tkn.authn^ind^data, sem.addl^data.info.ucaf^sub^fld^43.tag^data, temp^lgth ); end; if authn^data^tkn.authn^ind^flg <> [ $len( authn^data^tkn ) * [" "] ] then begin tkn^id ':=' authn^data^tkn^id^d; ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); ! ! Include the length of the Authentication Indicator Flag ! temp^lgth := temp^lgth + 2; ! ! Ensure that the token length is even ! if temp^lgth.<15> then begin increment^d( temp^lgth ); end; tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, authn^data^tkn, temp^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3110, ! routing code ! , @noroom^tkn, net.myname, 2, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3120, ! routing code ! , @erradd^tkn, net.myname, 3, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2080 ); end; end; ! if tkn^result end; ! of if authn^data^tkn <> blanks if file^rec^bit^d then ! S-120 begin ! ! International Address Verification Service (IAVS) Token ! init( iavs^data^tkn, " ", wlen( iavs^data^tkn ) ); call ascii^integer^( sem.crdhldr^addr.addr^lgth, temp^lgth ); ! ! The zip code will always be 9 bytes long, left-justified ! and blank-filled. The length of address field is ! variable (up to 40 bytes). The actual length of the ! address data is calculated by subtracting the length of ! zip code from temp^lgth. ! addr^lgth := temp^lgth - $len( sem.crdhldr^addr.zip^cde ); move( iavs^data^tkn.pstl^cde, sem.crdhldr^addr.zip^cde ); movl( iavs^data^tkn.addr, sem.crdhldr^addr.addr, addr^lgth ); if iavs^data^tkn.pstl^cde <> [ $len( iavs^data^tkn ) * [" "] ] then begin tkn^id ':=' iavs^data^tkn^id^d; ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); ! ! Ensure that the token length is even ! if temp^lgth.<15> then begin increment^d( temp^lgth ); end; tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, iavs^data^tkn, temp^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3130, ! routing code !, @noroom^tkn, net.myname, 2, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3140, ! routing code !, @erradd^tkn, net.myname, 3, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2090 ); end; end; ! if tkn^result end; ! of if iavs^data^tkn <> blanks end; ! of if file^rec^bit^d #ADD 05555d0D UTIL^COLLAPSE^SEM if hdr.addl^data.info.ucaf^sub^fld^43. tag = "43" then begin call ascii^integer( hdr.addl^data.info. ucaf^sub^fld^43. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. ucaf^sub^fld^43.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 06170d08 UTIL^EXPAND^SEM if ptr[ length ] = "43" then begin movl( sem^ptr.addl^data.info. ucaf^sub^fld^43.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ENDSCN = SW05183 !*CMP2.10 02/08/02 BNETS 6042 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6042 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6042 * ******************************************************************************** #SCN = SW05184 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6042 #NEWVERSION = 6043 #ADD 00026p0Q ! 31JAN2002 DOO/1693 ! Symptom: The TAL directive, SECTION, is missing above procedure ! INIT^GET^LCONF^INFO. ! Problem: The line of code that contained the directive was ! erroneously deleted when an earlier fix was applied to ! this file. ! Fix: Added the SECTION directive above procedure ! INIT^GET^LCONF^INFO. ! Dependency: Apply fix to BNETS and re-MAKE. ! Reference: Case #342998 ! 08FEB2002 DOO/1693 ! Symptom: Banknet Release 02.1 Mandates. ! Problem: None. ! Fix: Modified the code to support a new global variable ! DATA^ELEM^ERR^G. This variable will contain the DE that ! had an error during Universal Card Authentication Field ! data integrity checks. ! Modified procedure: SEM^REQUEST^DENY ! Dependency: New files: ILB0102M, ILB0102R, and ILB0102S. Apply ! fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, BACOUTLS, ! COBNAMES, DDLPSTKN, PSTKNCVS, and PSTKNID and re-MAKE. ! Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: (retro of SW5P665 from WO #011112-02, #011112-03, and ! #011112-04) #REPLACE 03291j00 INIT_EMT_GLOBALS ?section init^get^lconf^info #ADD 06707 SEM^REQUEST^DENY .pbit^map := wordaddr( @resp.pbit^map ), #ADD 06717 SEM^REQUEST^DENY ! ! Determine if an error occurred when the UCAF data was checked ! for integrity. If there was an error, the DE will be contained ! in DATA^ELEM^ERR^G. Move this data to DE 44 and reinitialize ! the global variable to spaces for later use. ! if data^elem^err^g <> [ $len( data^elem^err^g ) * [" "] ] then begin movl( resp.addl^resp^data.info, data^elem^err^g, $occurs( data^elem^err^g ) ); movd( resp.addl^resp^data.lgth, "03" ); ! ! Turn Bit-44 on if it is turned off ! if not addl^resp^bit^d then begin addl^resp^bit^d := 1; end; data^elem^err^g ':=' [ $occurs( data^elem^err^g ) * [" "] ]; end; #ENDSCN = SW05184 !*CMP2.10 02/08/02 RP09BNTM6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.RP09BNTM RP09BNTM 6000 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.RP09BNTM RP09BNTM 6000 * ******************************************************************************** #SCN = SW05156 , FILEID = RP09BNTM #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6000 #NEWVERSION = 6001 #ADD 0047 # # 06FEB2002 DLH/158 # Symptom: Release 6.0 Format 2 File Support. # Problem: None # Fix: Added a dependency for OKLIBTO and OKDX. # Dependency: Apply fix to RP09BNTS, RP09BNTM, RP09SWIS, # RP09SWIM and reMake. # Reference: WO #000202-01 #ADD 0075 $(okddl_okdx) \ $(oklib_oklibto) \ #ENDSCN = SW05156 !*CMP2.10 02/08/02 RP09BNTS6006 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6006 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.RP09BNTS RP09BNTS 6006 * ******************************************************************************** #SCN = SW05157 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00008F0O * 06FEB2002 DLH/158 * Symptom: Release 6.0 Format 2 File Support. * Problem: None * Fix: Added Format 2 File Support. * Paragraph modified: A100-HOUSEKEEPING * H300-READ-ILF * Dependency: Apply fix to RP09BNTS, RP09BNTM, RP09SWIS, * RP09SWIM and reMake. * Reference: WO #000202-01 #ADD 00051E01 DATA DIVISION 01 WS-ILF-LGTH PIC S9(4) COMP VALUE +4072. #ADD 00224E06 DATA DIVISION ?SECTION WS-LIB-SECTION 01 WS-LIB. 05 STAT PIC S9(4) COMP. COPY LIB-STAT-DETL OF "=OKDDL_OKDX". 01 WS-ILF-OPEN-PARAMS. 05 IOBUF-LGTH PIC S9(4) COMP VALUE 0. 05 CNT-READ PIC S9(4) COMP VALUE 0. 05 OPEN-FLAGS-L PIC S9(4) COMP VALUE 1024. 05 SYNC-DEPTH-L PIC S9(4) COMP VALUE 0. COPY POSN-TYP-CONSTANTS OF "=BASRC_BADDLCOB". COPY READ-MODE-CONSTANTS OF "=BASRC_BADDLCOB". #ADD 00228F0X PROCEDURE DIVISION ENTER TAL "FNAMECOLLAPSE" USING ILF-FILE-NAME EXTERNAL-SUSP-NAME. ENTER TAL "LIB_FILE_OPEN" OF KERNELLIB USING LIB-STAT-DETL, ILF-FILE-NAME, ILF-FILE-NUM, OPEN-FLAGS-L, SYNC-DEPTH-L, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, OMITTED, FILE-FRMT GIVING STAT OF WS-LIB. IF ILF-FILE-NUM < 0 #DELETE 00228F0Y/00228F10 PROCEDURE DIVISION #ADD 00228F18 PROCEDURE DIVISION END-IF. ?IF 4 #DELETE 00228F19/00228F1B OFFSET 1 PROCEDURE DIVISION #ADD 00424 C630-ADMIN-TEXT-MESSAGE MOVE WS-ILF-LGTH TO IOBUF-LGTH. MOVE SPACES TO ILF. MOVE ZEROES TO CNT-READ. ENTER TAL "LIB_FILE_READ" OF KERNELLIB USING LIB-STAT-DETL, ILF-FILE-NUM, ILF, IOBUF-LGTH, RM-READ-C, PM-SEQ-C, CNT-READ GIVING STAT OF WS-LIB. IF STAT OF WS-LIB NOT = LIB-OK-C THEN MOVE CDE2 OF LIB-STAT-DETL TO ILF-FILE-ERR IF ILF-FILE-ERR = 1 MOVE "Y" TO ILF-EOF-SW END-IF IF ILF-FILE-ERR NOT = 1 MOVE ILF-FILE-ERR TO READ-ERR-REL, READ-ERR-REL-RP MOVE EXTERNAL-SUSP-NAME TO READ-FILE-NAME-REL READ-FILE-NAME-REL-RP MOVE READ-ERR-LINE TO RPT-LINE MOVE "+" TO PRT-CNTL, PRINTER-CONTROL OF RPT PERFORM H100-WRITE-PRINT-LINE MOVE READ-ERR-LINE-RP TO PRINT-LINE OF RPT PERFORM H150-WRITE-RP-REC ENTER "CLOSE" USING ILF-FILE-NUM PERFORM A300-CLOSE-UP STOP RUN END-IF END-IF. #DELETE 00425 /00427 C630-ADMIN-TEXT-MESSAGE #ENDSCN = SW05157 !*CMP2.12 03/28/02 BNETLIBS6046 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6046 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6046 * ******************************************************************************** #SCN = SW05242 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6046 #NEWVERSION = 6047 #ADD 00026t29 ! 28MAR2002 ahs/3152 ! Symptom: The interface dumps with trap 0 when unsupported ! subfields are received in Data Element 48. ! Problem: The interface was not properly incrementing the pointer ! to the next subfield if it finds a field it does ! support. This causes unpredictable results that may ! lead to the interface dumping. ! Fix: Modified the interface to skip over subfields that it ! does not recognise and increase the pointer by the ! unsupported subfield's length instead of just ! incrementing it by one. ! Modified Procedures: util^expand^sem ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #345901. Uplift of Case #343601 from 5.3 ! 28MAR2002 ahs/3152 ! Symptom: The length of DE 48 is not calculated properly for ! outbound response messages when the original request ! had some unrecognized fields in DE 48. ! Problem: The previous fix did not properly adjust the length of ! the unrecognized subfields of DE 48. It did not add ! the subfield's 4 byte header to the unrecognized ! length. So the length of DE 48 was off by 4 for each ! unrecognized subfield. ! Fix: Modified the interface to add the subfield header's 4 ! bytes when calculating the length of unrecognized ! subfields. ! Modified Procedures: util^expand^sem ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #345901. Uplift of Case #343601 from 5.3 ! 28MAR2002 ahs/3152 ! Symptom: MasterCard rejects some messages with invalid bit 48. ! Problem: 1. On response messages to MasterCard, bit 48 should ! only be sent if it contains response data. It ! should not be sent if it did not change from the ! original request message. The interface was always ! sending bit 48. ! 2. E-commerce subfield 48.42 had the wrong data length ! of 2 and it should be 3. ! Fix: 1. Modified the interface to turn bit 48 off when it ! formats the reply message. The interface already ! will turn on bit 48 if there is a change or addition ! to its data. ! 2. Changed the length to 3. ! Modified Procedures: pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #345901. Uplift of Case #345079 from 5.3 #ADD 00768 PSTM^FRMT^0210^TO^XRESP ! ! Additional data bit 48 should not be sent unless response ! data is present, so turn it off here and set it when we add ! response data or make changes to it. ! addl^data^bit^d := 0; #REPLACE 01541d3F PSTM^FRMT^SEM^ADDL^DATA data^lgth, "03" ); #REPLACE 06170Q26/06170Q27 UTIL^EXPAND^SEM bad^lgth := bad^lgth + tag^length + 4; length := length + tag^length + 4; #REPLACE 06170Q2E/06170Q2F UTIL^EXPAND^SEM ! if this field is greater than 0, a state code ! ! or an unsupported subfield was hit and the length! ! needs to be re-set ! #DELETE 06170Q2I UTIL^EXPAND^SEM #ENDSCN = SW05242 !*CMP2.12 04/11/02 BNETS 6043 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6043 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6043 * ******************************************************************************** #SCN = SW05244 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6043 #NEWVERSION = 6044 #ADD 00026q0P ! 11APR2002 cal/283 ! Symptom: Interface does not log advices that are denied or are ! for balance inquiries. ! Problem: Code checks the external advice and drops all denied or ! balance inquiry transactions without logging. ! Fix: Remove code that drops messages before being logged. ! Proc modified: sem^advice ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #346495 #DELETE 05635j00/05636j05 SEM^ADVICE #ENDSCN = SW05244 !*CMP2.12 04/18/02 BNETG 6020 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6020 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6020 * ******************************************************************************** #SCN = SW05254 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6020 #NEWVERSION = 6021 #ADD 00025T0H ! 18APR2002 gg/724 ! Symptom: MasterCard simulator is rejecting messages with DE 55. ! Problem: The DE 55 field length should always be in ebcdic. The ! translation from ascii to ebcdic in the proc ! emv^util^collapse^de55 is controlled by a global value ! ebcdic^g, which is set to 0. The global should be set ! to 1 to allow the translation to take place. ! Fix: Move the global ebcdic^g to be with the other EMV ! globals and defines, and change its default value from ! 0 to 1. ! Dependency: Apply fix to BNETG and run MAKE. ! Reference: Case #346801 #DELETE 00493O01 #ADD 01366O08 ! ! Global to indicate if the length in DE 55 will be ascii or ebcdic ! int ebcdic^g := 1; #ENDSCN = SW05254 !*CMP2.12 05/03/02 BNETS 6044 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6044 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6044 * ******************************************************************************** #SCN = SW05292 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6044 #NEWVERSION = 6045 #ADD 00026r09 ! 03MAY2002 chh/174 ! Symptom: Global string "blanks" was being over written. ! Problem: An incorrect "move" was being done on emt_g to ! emt_sav_g during a warmboot. ! Fix: Changed the "move" to a "set" to properly transfer the ! data from emt_g to emt_sav_g. ! Modified proc: cmd^warmboot^store^globals ! Dependency: Apply fix to BNETS and re-Make. ! Reference: Case #347510. #REPLACE 02599j0I CMD^WARMBOOT^STORE^GLOBALS set ( emt_sav_g[ i ].base_addr, #ENDSCN = SW05292 !*CMP2.12 05/29/02 BNETS 6045 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6045 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6045 * ******************************************************************************** #SCN = SW05306 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6045 #NEWVERSION = 6046 #ADD 00001 !##################################################################### !# # !# BASE24 # !# ------ # !# # !# BankNet INTERCHANGE INTERFACE # !# # !# Proprietary Software Product # !# # !# ACI Worldwide Inc. # !# 330 South 108th Avenue # !# Omaha, Nebraska 68154 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide Inc. 1988 - 2002 # !# # !# All Rights Reserved. # !# # !##################################################################### ?page ! Record of Changes: #DELETE 00001j00/00001j0R #ADD 00026s09 ! 01JUN2002 dtw/577 ! Symptom: Transaction Security Services Enhancement. ! Problem: None. ! Fix: Added support for Transaction Security Services. ! Procs modified: init^^initialization ! cmd^warmboot ! sem^key^chng^rqst ! Dependency: Apply fixes to BNETS, BNETG, HISWUTLS and run MAKE. ! Restore BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: WO #000211-01. #REPLACE 00483k01 ACI^COPYRIGHT "Copyrighted by ACI Worldwide Inc. 2002"; #ADD 02485R0Z CMD^WARMBOOT wlform( triplesingle, "Triple-To-Single PIN Translation will " ',' "be disabled and Transaction Security Ser" ',' "vices will be used" ) #ADD 02516R06 CMD^WARMBOOT int lconf_num_i := -2; #ADD 02516R10 CMD^WARMBOOT if not hiswsec^init^devices( sdcb, lconf^name, net.myname, true ) then begin error := true; end; if not error then begin if sdcb.sec^dev^typ = sec_dev_typ_tss_l and triple_to_single_g then begin triple_to_single_g := 0; call log^message^( 2955, !routing code!, @triplesingle, net.myname, 0 ); call lconf^init( lconf^name, lconf_num_i ); call hiswutil^get^lconf^rel( lconf_num_i, net.myname, base24^rel^g, keyf^name^g, tkn^name^g, triple_to_single_g ); call hiswfile^close( lconf_num_i ); end; ! of if Transaction Security Service will be used. ! end; ! of no error ! #DELETE 02597V00/02597V02 CMD^WARMBOOT #ADD 02617R06 INIT^^INITIALIZATION wlform( triplesingle, "Triple-To-Single PIN Translation will be disabled " ',' "and Transaction Security Services will be used" ) #ADD 02623j02 INIT^^INITIALIZATION int error := false; #ADD 02625j00 INIT^^INITIALIZATION int lconf_num_i := -2; #ADD 02637R01 INIT^^INITIALIZATION if not hiswsec^init^devices( sdcb, lconf^name, net.myname, true ) then begin error := true; end; if not error then begin if sdcb.sec^dev^typ = sec_dev_typ_tss_l and triple_to_single_g then begin triple_to_single_g := 0; call log^message^( 2960, !routing code!, @triplesingle, net.myname, 0 ); call lconf^init( lconf^name, lconf_num_i ); call hiswutil^get^lconf^rel( lconf_num_i, net.myname, base24^rel^g, keyf^name^g, tkn^name^g, triple_to_single_g ); call hiswfile^close( lconf_num_i ); end; ! of Transaction Security Service will be used. ! end; ! of no error ! #DELETE 02651R00/02651R01 INIT^^INITIALIZATION #ADD 06101k14 SEM^KEY^CHNG^RQST string key_dir_s; #ADD 06101k1K SEM^KEY^CHNG^RQST key_dir_s ':=' "B"; #ADD 06101p0A SEM^KEY^CHNG^RQST triple_to_single_g, ! chk^dgt^lgth !, ! remote^key^scheme !, ! dup^key^flg !, key_dir_s ) then #DELETE 06101p0B SEM^KEY^CHNG^RQST #ENDSCN = SW05306 !*CMP2.12 05/29/02 BNETG 6021 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6021 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6021 * ******************************************************************************** #SCN = SW05307 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6021 #NEWVERSION = 6022 #ADD 00001P00 !##################################################################### !# # !# BASE24 # !# ------ # !# # !# Banknet Interface Globals # !# # !# Proprietary Software Product # !# # !# ACI Worldwide Inc. # !# 330 South 108th Avenue # !# Omaha, Nebraska 68154 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide Inc. 2002 # !# # !# All Rights Reserved. # !# # !##################################################################### ?page ! Record of Changes: ! #DELETE 00001N00/00023 #ADD 00025U0C ! 01JUN2002 dtw/577 ! Symptom: Transaction Security Services Enhancement. ! Problem: None. ! Fix: Added support for Transaction Security Services. ! Dependency: Apply fixes to BNETS, BNETG, HISWUTLS and run MAKE. ! Restore BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: WO #000211-01. #ADD 00026T1F ? sec_dev_typ_constants, #ADD 00026S20 ! sec_dev_typ_constants, ! #ENDSCN = SW05307 !*CMP2.12 07/16/02 BNETDDLS6011 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6011 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6011 * ******************************************************************************** #SCN = SW06005 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6011 #NEWVERSION = 6012 #ADD 00262K0I * 13JUL2002 gg/724 * Symptom: Banknet Release 02.2 Mandates * Problem: None * Fix: Add acquirer support for Visa Secure Electronic * Commerce Verification Service. Added new subelements * 44 and 45 to DE 48 of the sem. Redefine subelement 43 * of DE 48. * Dependency: New files ILB0202M, ILB0202R, and ILB0202S. Apply * fixes to BNETDDLS, BNETG and BNETLIBS. Apply fix to * DDLPSTKN. Run MAKE. Replace files BNETMAN and * BNETUPDT. Run ILF conversion ILB0202. * Reference: WO #020424-02 #ADD 01157K08 SEM 08 user-fld pic x(9). * Visa CAVV Field * Subfield tag = 43, redefine of subfield 43 06 visa-cavv-sub-fld-43 redefines ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). 08 visa-sec-ecom-ind pic x. * Visa Secure Electronic Commerce Transaction Identifier * Subfield tag = 44 06 visa-ecom-xid-sub-fld-44. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). * Visa CAVV Result Code * Subfield tag = 45 06 visa-cavv-rslt-cde-sub-fld-45. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #ENDSCN = SW06005 !*CMP2.12 07/16/02 BNETG 6022 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6022 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6022 * ******************************************************************************** #SCN = SW06006 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6022 #NEWVERSION = 6023 #ADD 00025V07 ! 13JUL2002 gg/724 ! Symptom: Banknet Release 02.2 Mandates ! Problem: None ! Fix: Add acquirer support for Visa Secure Electronic ! Commerce Verification Service. Added defines ! hexchar_binary_ and visa_card_d, global visa_tran_g, ! and sourced in trans_stain_xid_tkn from baddltal. ! Dependency: New files ILB0202M, ILB0202R, and ILB0202S. Apply ! fixes to BNETDDLS, BNETG and BNETLIBS. Apply fix to ! DDLPSTKN. Run MAKE. Replace files BNETMAN and ! BNETUPDT. Run ILF conversion ILB0202. ! Reference: WO #020424-02 #ADD 00026T00 ?nolist, source =basrc_baddltal( ? acct_typ_constants, ? acq_rte_tkn, ? alt^merch^id^tkn, ? apcf_, ? apcf_prikey, ? authn^data^tkn, ? cmd, ? crdhldr^serial^num^tkn, ? emv^discr^tkn, ? emv^rqst^tkn, ? emv^resp^tkn, ? emv^stat^tkn, ? emv^script^tkn, ? evt_msg_severity_constants, ? extmem_constants, ? fcb, ? file_format_constants, ? fname_lgth_constants, ? iavs^data^tkn, ? icf, ? icfbase, ? icfebase_, ? ichg^compliance^tkn, ? ilf, ? init_constants, ? ipcf_, ? ipcf_prikey, ? key6_, ? keyf, ? lconf^key, ? lconf, ? mrch^serial^num^tkn, ? msg_cat_constants, ? msg_typ_constants, ? pan_, ? pos_dflt_chk_id_constants, ? pos_msg_typ_constants, ? posicf, ? posicfe_, ? ps50^tkn, ? ps51^tkn, ? ps2000^tkn, ? pt^srv^data^tkn, ? proc_cde, ? prfl, ? pstm, ? pstm_, ? purchase^tkn, ? sdcb, ? sdcb_, ? sec_dev_typ_constants, ? seg_constants, ? stf, ? swi^tkn, ? swiicf, ? swiicfe_, ? sym_name, ? track1^tkn, ? trans_stain_xid_tkn, ? txn_alwd_constants, ? txn^prfl^tkn, ? txn_prfl_tkn, ? user^data ? ) #DELETE 00026T01/00026T1F #DELETE 00026V00 #DELETE 00026V01 #DELETE 00026V02/00026T1R #ADD 00026O37 ! trans_stain_xid_tkn, #ADD 00047I01 define hexchar_binary_( s, num ) = hexchar^binary( s, $len( s ), num )#; #REPLACE 00194 define visa_card_d = "V"#; #REPLACE 00494S02 int visa_tran_g := false; #ENDSCN = SW06006 !*CMP2.12 07/16/02 BNETLIBS6047 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6047 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6047 * ******************************************************************************** #SCN = SW06007 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6047 #NEWVERSION = 6048 #ADD 00026u0n ! 13JUL2002 gg/724 ! Symptom: Incorrect values sent for DE 61 position 11, terminal ! input capability indicator, in EMV processing. ! Problem: DE 61 is initialized after the EMV processing has taken ! place. ! Fix: Initialize DE 61 before EMV processing. Remove the ! subsequent statements that initialize DE 61. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS and BNETEMVS and run MAKE. ! Reference: Case #348434 ! ! 13JUL2002 gg/724 ! Symptom: Banknet Release 02.2 Mandates ! Problem: None ! Fix: Add acquirer support for Visa Secure Electronic ! Commerce Verification Service. Visa CAVV is supported ! in DE 48 SE 43 and in the trans_stain_xid_tkn's ! trans_stain. Visa Ecom Transaction Identifier is ! supported in DE 48 SE 44 and in the ! trans_stain_xid_tkn's xid. Visa CAVV result code is ! supported in DE 48 SE 45 and the new PS51 token field ! cavv-aav-rslt-cde. ! Procs modified: pstm^frmt^sem^addl^data, ! sem^frmt^xresp^to^pstm^0210, ! util^collapse^sem, and ! util^expand^sem ! Dependency: New files ILB0202M, ILB0202R, and ILB0202S. Apply ! fixes to BNETDDLS, BNETG and BNETLIBS. Apply fix to ! DDLPSTKN. Run MAKE. Replace files BNETMAN and ! BNETUPDT. Run ILF conversion ILB0202. ! Reference: WO #020424-02 #REPLACE 00659l00 PSTM^FRMT^0200^TO^XRQST mov^( sem.ntl^pos^data, zeroes ); #DELETE 00659m01 PSTM^FRMT^0200^TO^XRQST #DELETE 00659X0W PSTM^FRMT^0200^TO^XRQST #ADD 00802m6C PSTM^FRMT^0210^TO^XRESP #REPLACE 01491W0H/01491W0I PSTM^FRMT^SEM^ADDL^DATA int .trans_stain_xid_tkn( trans_stain_xid_tkn_def ); int trans_stain_xid_tkn_lgth; #ADD 01491Q09 PSTM^FRMT^SEM^ADDL^DATA ! ! Set visa_tran_g to indicate if this tran was initiated by a ! Visa card ! visa_tran_g := false; if pstm.rte.srv = visa_card_d then begin visa_tran_g := true; end; #ADD 01541t1L PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' trans^stain^tkn^id^d; if visa_tran_g and base24^rel^g >= 5 and hiswtkn^get^tkn( pstm, tkn^id, @trans_stain_xid_tkn, trans_stain_xid_tkn_lgth ) then begin if trans_stain_xid_tkn.trans_stain <> zeroes for $len( trans_stain_xid_tkn.trans_stain ) and trans_stain_xid_tkn.trans_stain <> blanks for $len( trans_stain_xid_tkn.trans_stain ) then begin ! ! Fill the Visa CAVV subfield 43 with data from ! the trans_stain_xid token's trans^stain. Set ! the tag. The length is the collapsed length of ! the CAVV data plus one byte for the Visa Secure ! Electronic Commerce indicator, used to indicate ! the type of data sent in subelement 43. ! movd( sem.addl^data.info.visa^cavv^sub^fld^43. tag, "43" ); movd( sem.addl^data.info.visa^cavv^sub^fld^43. lgth, "21" ); movd( sem.addl^data.info.visa^cavv^sub^fld^43. visa^sec^ecom^ind, "8" ); movl( sem.addl^data.info.visa^cavv^sub^fld^43. tag^data, trans_stain_xid_tkn.trans_stain, $len( trans_stain_xid_tkn.trans_stain ) ); ! ! Increment the overall length of DE 48 by the ! collapsed length of the CAVV data, plus one ! byte for the visa^sec^ecom^ind, plus 4 bytes ! for the subfield tag and length ! lgth := lgth + 25; end; if trans_stain_xid_tkn.xid <> zeroes for $len( trans_stain_xid_tkn.xid ) and trans_stain_xid_tkn.xid <> blanks for $len( trans_stain_xid_tkn.xid ) then begin ! ! Fill the Visa Electronic Commerce ! Transaction identifier subfield 44 with ! data from the trans_stain_xid token's xid. ! Set the tag. The length is the collapsed ! length of the XID data. ! movd( sem.addl^data.info. visa^ecom^xid^sub^fld^44.tag, "44" ); movd( sem.addl^data.info. visa^ecom^xid^sub^fld^44.lgth, "20" ); movl( sem.addl^data.info. visa^ecom^xid^sub^fld^44.tag^data, trans_stain_xid_tkn.xid, $len( trans_stain_xid_tkn.xid ) ); ! ! Increment the overall length of DE 48 by the ! collapsed length of the XID data plus 4 bytes ! for the subfield tag and length ! lgth := lgth + 24; end; end; ! of if visa_tran and trans_stain_xid_tkn #ADD 03208d0X SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.visa^cmrcl^sub^fld^94.tag = "94" or sem.addl^data.info.visa^cavv^rslt^cde^sub^fld^45. tag = "45" then #DELETE 03208d0Y/03208d0Z SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208d14 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.visa^cmrcl^sub^fld^94. tag = "94" then begin ! ! Visa Commercial card type ! movl( ps51^get^tkn.cmrcl^crd^typ, sem.addl^data.info.visa^cmrcl^sub^fld^94. rqst^cmrcl^crd^typ, $len( ps51^get^tkn.cmrcl^crd^typ ) ); end; if sem.addl^data.info.visa^cavv^rslt^cde^sub^fld^45. tag = "45" then begin ! ! SE 45 contains Visa CAVV result code. Update ! the PS51 token with the value. ! movl( ps51^get^tkn.cavv^aav^rslt^cde, sem.addl^data.info. visa^cavv^rslt^cde^sub^fld^45.tag^data, $len( sem.addl^data.info. visa^cavv^rslt^cde^sub^fld^45. tag^data ) ); end; #DELETE 03208m41/03208m45 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208d1C SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.visa^cmrcl^sub^fld^94. tag = "94" then begin ! ! Visa Commercial card type ! movl( ps51^get^tkn.cmrcl^crd^typ, sem.addl^data.info.visa^cmrcl^sub^fld^94. rqst^cmrcl^crd^typ, $len( ps51^get^tkn.cmrcl^crd^typ ) ); end; if sem.addl^data.info.visa^cavv^rslt^cde^sub^fld^45. tag = "45" then begin ! ! SE 45 contains Visa CAVV result code. Add the ! PS51 token with the value. ! movl( ps51^get^tkn.cavv^aav^rslt^cde, sem.addl^data.info. visa^cavv^rslt^cde^sub^fld^45.tag^data, $len( sem.addl^data.info. visa^cavv^rslt^cde^sub^fld^45. tag^data ) ); end; #DELETE 03208d1D/03208d1G SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 05555t03 UTIL^COLLAPSE^SEM if visa_tran_g and hdr.addl^data.info. visa^cavv^sub^fld^43. visa^sec^ecom^ind = "8" then begin ! ! Subelement 43 contains Visa CAVV data. ! The subfield tag, length, and ecom ! indicator will be ebcdic in ! transmission. The CAVV data will be ! binary in transmission. ! call ascii^integer( hdr.addl^data.info. visa^cavv^sub^fld^43.lgth, 2, tag^length ); ! ! Move the tag and tag length to the ! pointer ! movl( ptr, hdr.addl^data.info. visa^cavv^sub^fld^43.tag, 4 ); ! ! Move the Visa Electronic Commerce ! Indicator to the pointer ! movl( ptr[ 4 ], hdr.addl^data.info. visa^cavv^sub^fld^43. visa^sec^ecom^ind, 1 ); ! ! Convert the data moved to the pointer ! to ebcdic for transmission ! call translate( ptr, 5, ascii^to^ebcdic^l ); ! ! Convert the Visa CAVV data to binary ! and move it to the pointer after the ! tag, length, and ecom indicator data ! call hexchar_binary_( hdr.addl^data.info. visa^cavv^sub^fld^43. tag^data, ptr[ 5 ] ); @ptr := @ptr[ tag^length + 4 ]; end ! of if Visa CAVV data in SE 43 else begin ! ! Subelement 43 contains UCAF data, ! ebcdic in transmission. ! call ascii^integer( hdr.addl^data.info. ucaf^sub^fld^43. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. ucaf^sub^fld^43.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if UCAF data in SE 43 end; ! of if SE 43 if hdr.addl^data.info.visa^ecom^xid^sub^fld^44. tag = "44" then begin ! ! Subelement 44 contains Visa Ecom XID data. ! The subfield tag and length will be ebcdic ! in transmission. The ecom xid data will be ! binary in transmission. ! call ascii^integer( hdr.addl^data.info. visa^ecom^xid^sub^fld^44.lgth, 2, tag^length ); ! ! Move the tag and tag length to the ! pointer ! movl( ptr, hdr.addl^data.info. visa^ecom^xid^sub^fld^44.tag, 4 ); ! ! Convert the data moved to the pointer ! to ebcdic for transmission ! call translate( ptr, 4, ascii^to^ebcdic^l ); ! ! Convert the Visa Ecom XID data to binary ! and move it to the pointer after the tag ! and length ! call hexchar_binary_( hdr.addl^data.info. visa^ecom^xid^sub^fld^44. tag^data, ptr[ 4 ] ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if SE 44 #DELETE 05555t04/05555t0D UTIL^COLLAPSE^SEM #ADD 05570 UTIL^COLLAPSE^SEM ! ! Reset the visa_tran_g global used to process Visa specific data ! visa_tran_g := false; #ADD 06170t08 UTIL^EXPAND^SEM if ptr[ length ] = "45" then begin movl( sem^ptr.addl^data.info. visa^cavv^rslt^cde^sub^fld^45. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ENDSCN = SW06007 !*CMP2.12 07/16/02 BNETS 6046 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6046 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6046 * ******************************************************************************** #SCN = SW06008 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6046 #NEWVERSION = 6047 #ADD 00026t0A ! 13JUL2002 kjw/571 gg/724 ! Symptom: The interface can send out corrupted logon messages ! under certain configurations. ! Problem: The interface is addressing beyond the end of the BNIIF ! when processing group logons. The problem occurs when ! there are more than twice as many stations as BNIIF ! records. ! Fix: Modified the looping logic controlling the addressing ! of the BNIIF table. ! Modified proc: cmd^logon^g ! Dependency: Apply fix to BNETS and remake. ! Reference: ( retro of SCN SW5P562 from Case #332418 ) ! ! 13JUL2002 kjw/571 gg/724 ! Symptom: Banknet initializing slowly. ! Problem: If the last address field in the ILF header contains ! a value of zero, the entire ILF will be read looking ! for the most recent trace number assigned to acquired ! transactions. If this occurs for the previous day's ILF ! much overhead will be used to read its records and the ! correct trace number will not likely result. ! Fix: Modified the interface to call fileinfo to get the ! relative byte address of EOF. Also added the ICF max ! tran update value to the trace number value from the ! header record to account for transactions that may have ! taken place between ILF header updates. ! Modified procs: init^ilf^review ! Dependency: Apply changes to BNETS and run MAKE. ! Reference: ( retro of SCN SW5P650 from Case #339104 ) ! ! 13JUL2002 kjw/571 gg/724 ! Symptom: Interface dumping with trap #1. ! Problem: When Mastercard rejects a message for formatting errors ! a 0620 is sent with the reject message in field 120. ! The interface is attempting to expand and process the ! reject message content in field 120 as an exception. ! The entire message is not rejected and does not always ! possess enough data to proceed. For example, the bit ! maps are present, but the reject is truncated at the ! field in error. ! Fix: Modified the interface to display log messages and log ! an ILF record when a 0620 reject is received. ! Modified procs: sem^admin^request ! Dependency: Apply changes to BNETS and run MAKE. ! Reference: ( retro of SCN SW5P659 from Case #340931 ) ! ! 13JUL2002 ahs/3152 gg/724 ! Symptom: The interface dumps with trap 2030. ! Problem: The suspense buffer was not always cleared out before ! it is used, causing some data from the previous message ! to be present. If that remaining data contains token ! information the interface tries to process it and ! dumps. ! Fix: Modified the interface to always initialize the ! suspense buffer prior to using it. ! Procs modified: pstm^0210^response ! pstm^0402^deny ! stm^0210^response ! Dependency: Apply fix to BNETS and re-MAKE. ! Reference: ( retro of SCN SW5P694 from Case #344357 ) #ADD 01714K00 CMD^LOGON^G if bniif^tbl.fiid = "****" or pct.bniif^tbl.ctr = 1d then #DELETE 01714K01 CMD^LOGON^G #ADD 01714T0F CMD^LOGON^G j := 0; #ADD 01752T00 CMD^LOGON^G if ( j + 1 > $int( pct.bniif^tbl.ctr - 1d ) ) then begin @bniif^tbl := pct.bniif^tbl.addr; j := 0; end else begin j := j + 1; @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; #DELETE 01752T01/01752T04 CMD^LOGON^G #ADD 03544 INIT^ILF^REVIEW if last^addr <= 0d then begin ! ! something wrong with last^addr, set to eof ! call fileinfo( fnum, ! error !, filename, ! logical device number !, ! device type !, ! extent size !, last^addr ); ! ! add to temp^trace as though a header update was imminent ! temp^trace := ( temp^trace + $dbl( pct.max^tran^updt ) ); end; #ADD 04924 PSTM^0210^RESPONSE init( susp, " ", wlen( susp^bnet^def ) ); #ADD 05055 PSTM^0402^DENY init( susp, " ", wlen( susp^bnet^def ) ); #ADD 05441 SEM^ADMIN^REQUEST wlform( rej^msg, "Administrative REJECT Message Received" ) #ADD 05470 SEM^ADMIN^REQUEST call log^message^( 1405, ! routing code !, @rej^msg, net.myname, 0 ); call ascii^integer^( sem.file^rec.lgth, reject^lgth ); call log^message( 1409,! routing code !, sem.file^rec.txt, $min( reject^lgth, max^logger^l ), net.myname, 0 ); call sem^frmt^admin^prikey ( sem, ilf.prikey ); if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), admin^l, msg^sym^source, ! b24 msg !, sem, $len( admin^def ), sub^format^error^l ); end else begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), admin^l, msg^sym^source, ! b24 msg !, sem, $len( admin^def ), sub^format^error^l ); end; #DELETE 05470J00/05470J08 SEM^ADMIN^REQUEST #ENDSCN = SW06008 !*CMP2.12 07/24/02 BNETS 6047 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6047 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6047 * ******************************************************************************** #SCN = SW06019 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6047 #NEWVERSION = 6048 #ADD 00026u0z ! 12JUL2002 kke/872 ! Symptom: Echotests are sent regardless of whether traffic ! occurred on a given station. ! Problem: Network management echotest timers were not found ! and deleted. The interface actually sends logons as ! echotests, so they have to be formatted as either ! prefix logons or group logons. Prefix logons are ! generally done for issuers and group logons are ! generally done for acquirers. However, an interface ! that is set up to process as both issuer and acquirer ! must format logons, fulfilling the echotest function, ! based upon the logon type specified on the ICF. The ! echotest procedure then sets the timer subtype based ! upon an issuer/acquirer flag passed to it instead of ! based upon the type of logon formatted. Therefore, the ! timer for a prefix logon response, fulfilling the ! echotest function, was being sought with the wrong ! subtype. ! Fix: Modified the echotest procedure to set the timer subtype ! based upon the type of logon message formatted, instead ! of based upon an issuer/acquirer flag passed to it. ! Procs modified: init^echotest ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #350028. (retro of SW5P750 from Case #350028) #REPLACE 03191 SUB^INIT^ECHOTEST if pct.options.logon^typ = nmm^logon^prefix^l then #ENDSCN = SW06019 !*CMP2.12 08/20/02 BNETDDLM6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLM BNETDDLM 6000 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLM BNETDDLM 6000 * ******************************************************************************** #SCN = SW06029 , FILEID = BNETDDLM #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6000 #NEWVERSION = 6001 #ADD 0051 # 16AUG2002 GCS/643 # Symptom: The interface doesn't initialize correctly. # Problem: There is no dependency for the DDLGDEFS file. As a # result, the BNETTAL file does not get rebuilt when # changes are made to the DDLGDEFS file. # Fix: Added the badefs_ddlgdefs define to the TAL compile. # Dependency: Add fix to BNETDDLM and run MAKE. # Reference: Case #351949. #ADD 0064 $(swbnet_dict) } $(badefs_ddlgdefs) \ $(badefs_defsdict) \ #DELETE 0065 #ENDSCN = SW06029 !*CMP2.12 08/22/02 BNETLIBS6048 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6048 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6048 * ******************************************************************************** #SCN = SW06050 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6048 #NEWVERSION = 6049 #ADD 00026v0W ! 14AUG2002 kke/872 ! Symptom: Interface sending response code 30, format error, when ! CVD is invalid instead of 05, do not honor. ! Problem: When RTAU encounters invalid CVD digits, it responds ! with 064, bad track2, if the Card prefix file BAD CV ! ACTION - MANUAL ENTRY is set to "1", deny and return. ! The interface maps a BASE24 POS response code of 064, ! bad track2, to a SEM response code of 30, format error. ! While format error might be a correct response if the ! track2 is incorrectly formatted, it is not an accurate ! response to invalid CVD digits. ! Fix: Added a check on the PS50 token card verify flag to ! reset the response code to a 05, do not honor, if the ! CVD digits were invalid. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #351202. ! ! 19AUG2002 kjw/571 ! Symptom: Interface sending zero in 7th position of condition code ! subfield of field 60 for pre-auth transaction requests. ! Problem: Interface is not setting byte 7 of condition code ! subfield in field 60. Field 60 is initialized to zeroes. ! Pre-auth transactions require a "4" in this position. ! Fix: Added a check for pre-auth transactions when setting ! individual bytes of condition code subfield of field 60. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #351822. ! ! 20AUG2002 kjw/571 ! Symptom: Interface is not sending field 48 correctly in some ! instances. ! Problem: Interface is not echoing field 48 correctly if subtags ! 88 and/or 89 are sent in the request and the other tags ! are not being updated. ! Fix: Added a check for subtags 88/89 for field 48 processing ! to turn bit 48 on if these tags are present from the ! request. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #351752. #ADD 00659X1U PSTM^FRMT^0200^TO^XRQST if pos^pre^auth^d( pstm ) then begin ! Pre-auth transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end; #ADD 00802m1O PSTM^FRMT^0210^TO^XRESP if pstm.tran.resp^cde = "064" and sem.addl^data.info.cvc2^sub^fld^92 <> " " then begin ! invalid CVD should be mapped to "05" ! do not honor, instead of "30", format ! error. movd( sem.resp^cde, "05" ); end; #REPLACE 00802v00/00802o00 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.cvc^sub^fld^88.lgth <> " " or sem.addl^data.info.cvc^sub^fld^89.lgth <> " " then begin addl^data^bit^d := 1; end; #ENDSCN = SW06050 !*CMP2.12 08/29/02 BNETLIBS6049 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6049 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6049 * ******************************************************************************** #SCN = SW06052 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6049 #NEWVERSION = 6050 #ADD 00026w0h ! 29AUG2002 RAF/100 ! Symptom: The Interface is not sending field 23, card sequence ! number, correctly on some chip card transactions. ! Problem: The interface is sending field 23 with blanks when the ! member number is not sent in the internal message. ! MasterCard rules state that on chip card transactions, ! field 23 must contain a value between 000-999. ! Fix: Modified the interface to default field 23 to zeroes ! when the internal member number field contains ! non-numeric values. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #351754. #REPLACE 00595Z05/00595Z05 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^entry^mde = "05" then begin crd^seq^num^bit^d := 1; if all^numeric( pstm.tran.mbr^num, 3 ) then begin move( sem.crd^seq^num, pstm.tran.mbr^num ); end else begin movd( sem.crd^seq^num, "000" ); #DELETE 00595Z06/00595Z0A PSTM^FRMT^0200^TO^XRQST #REPLACE 00595Z0B/00596 PSTM^FRMT^0200^TO^XRQST end; end; #ENDSCN = SW06052 !*CMP2.13 10/18/02 BNETG 6023 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6023 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6023 * ******************************************************************************** #SCN = SW06090 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6023 #NEWVERSION = 6024 #ADD 00025W0C ! 18OCT2002 gg/724 ! Symptom: Discretionary Data Suppression ! Problem: None ! Fix: Added global variables for discretionary data ! suppression. ! Dependency: Replace BNETUPDT and BNETMAN. Apply fixes to BAUTILS, ! HISWUTLS, BNETG, BNETLIBS, and BNETS. Run MAKE. ! Reference: WO #020625-02 #ADD 00026 !#################################################################### #ADD 00026W00 ?nolist, source =basrc_baddltal( ? acct_typ_constants ? acq_rte_tkn ? alt^merch^id^tkn ? apcf_ ? apcf_prikey ? authn^data^tkn ? cmd ? crdhldr^serial^num^tkn ? emv^discr^tkn ? emv^rqst^tkn ? emv^resp^tkn ? emv^stat^tkn ? emv^script^tkn ? evt_msg_severity_constants ? extmem_constants ? fcb ? file_format_constants ? fname_lgth_constants ? iavs^data^tkn ? icf ? icfbase ? icfebase_, ? ichg^compliance^tkn ? ilf, ? ilf_ ? init_constants ? ipcf_ ? ipcf_prikey ? key6_ ? keyf ? lconf^key ? lconf ? mrch^serial^num^tkn ? msg_cat_constants ? msg_typ_constants ? pan_ ? pos_dflt_chk_id_constants ? pos_msg_typ_constants ? posicf ? posicfe_ ? ps50^tkn ? ps51^tkn ? ps2000^tkn ? pt^srv^data^tkn ? proc_cde ? prfl ? pstm ? pstm_ ? purchase^tkn ? sdcb ? sdcb_ ? sec_dev_typ_constants ? seg_constants ? stf ? swi^tkn ? swiicf ? swiicfe_ ? sym_name ? track1^tkn ? trans_stain_xid_tkn ? txn_alwd_constants ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ) #DELETE 00026W01/00026W13 #ADD 00026O2A ! ilf_, #ADD 00494W01 ! ! Globals used to control logging track discretionary data, card ! verification data, and address verification data to the ILF ! int supprs_avs_data_g := false; int supprs_cvd2_data_g := false; int supprs_discr_data_g := false; #ADD 01366G0D int supprs_avs_data_g; int supprs_cvd2_data_g; int supprs_discr_data_g; #ADD 01366S03 ?nolist, source =basrc_hiswutle( ? hiswcmd^trace ? hiswfile^close ? hiswfile^control ? hiswfile^delete ? hiswfile^keyposition ? hiswfile^open ? hiswfile^position ? hiswfile^purge ? hiswfile^read ? hiswfile^reposition ? hiswfile^saveposition ? hiswfile^update ? hiswfile^write ? hiswilf^add^tkn ? hiswilf^compress ? hiswilf^expand ? hiswilf^get^tkn ? hiswilf_supprs_discr_data ? hiswilf^updt^tkn ? hiswlink^init ? hiswmem^allocatesegment ? hiswmem^deallocatesegment ? hiswmem^init ? hiswpin^decode^pinpad ? hiswpin^decode^pinpan ? hiswpin_xlate_3dea_dea ? hiswpstm_txn_alwd_acq ? hiswpstm_txn_alwd_iss ? hiswqueue^add ? hiswqueue^delete ? ) #DELETE 01366S04/01366S0Y #ADD 01366N3O ! hiswilf_supprs_discr_data #ENDSCN = SW06090 !*CMP2.13 10/18/02 BNETLIBS6050 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6050 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6050 * ******************************************************************************** #SCN = SW06091 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6050 #NEWVERSION = 6051 #ADD 00026x0D ! 18OCT2002 gg/724 ! Symptom: Discretionary Data Suppression ! Problem: None ! Fix: Added processing to call a new utility ! hiswilf_supprs_discr_data from HISWUTLS to control ! logging of discretionary data. ! Procs modified: util^ilf^add and ! util^ilf^updt ! Dependency: Replace BNETUPDT and BNETMAN. Apply fixes to BAUTILS, ! HISWUTLS, BNETG, BNETLIBS, and BNETS. Run MAKE. ! Reference: WO #020625-02 !#################################################################### #REPLACE 06656 UTIL^ILF^ADD string .prikey( prikey^def ); #ADD 06735J06 UTIL^ILF^ADD if prikey.orig^b24 = "1" then begin ! ! Suppress track discretionary data, card ! verification data, and address verification data as ! indicated in the associated globals ! call hiswilf_supprs_discr_data( supprs_discr_data_g, supprs_cvd2_data_g, supprs_avs_data_g, ! ilf !, sem.track1, $len( sem.track1 ), sem.track2, $len( sem.track2 ), sem.addl^data.info.cvc2^sub^fld^92, $len( sem.addl^data.info.cvc2^sub^fld^92 ), sem.crdhldr^addr, $len( sem.crdhldr^addr ) ); ! ! The Banknet Interface has a separate field for ! Visa CVV2 request data. If it is present, call the ! utility again to suppress this field before ! logging. ! if sem.addl^data.info.visa^cvv2^sub^fld^92 <> blanks for $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) then begin call hiswilf_supprs_discr_data( ! supprs_discr_data_g !, supprs_cvd2_data_g, ! supprs_avs_data_g !, ! ilf !, ! sem.track1 !, ! $len( sem.track1 ) !, ! sem.track2 !, ! $len( sem.track2 ) !, sem.addl^data.info.visa^cvv2^sub^fld^92, $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) ); end; ! of Visa CVV2 request data end; ! of acq b24 #ADD 06789N0G UTIL^ILF^ADD if $param( base24^msg ) and prikey.orig^b24 = "1" then begin ! ! Suppress discretionary data in the internal message and ! token sections of the ILF as indicated in the associated ! globals ! call hiswilf_supprs_discr_data( supprs_discr_data_g, supprs_cvd2_data_g, ! supprs_avs_data_g !, ilf ); end; #ADD 08151N01 UTIL^ILF^UPDT string orig_b24; #ADD 08166 UTIL^ILF^UPDT move( orig_b24, ilf.prikey ); #ADD 08181J06 UTIL^ILF^UPDT if orig_b24 = "1" then begin ! ! Suppress track discretionary data, card ! verification data, and address verification data as ! indicated in the associated globals ! call hiswilf_supprs_discr_data( supprs_discr_data_g, supprs_cvd2_data_g, supprs_avs_data_g, ! ilf !, sem.track1, $len( sem.track1 ), sem.track2, $len( sem.track2 ), sem.addl^data.info.cvc2^sub^fld^92, $len( sem.addl^data.info.cvc2^sub^fld^92 ), sem.crdhldr^addr, $len( sem.crdhldr^addr ) ); ! ! The Banknet Interface has a separate field for ! Visa CVV2 request data. If it is present, call the ! utility again to suppress this field before ! logging. ! if sem.addl^data.info.visa^cvv2^sub^fld^92 <> blanks for $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) then begin call hiswilf_supprs_discr_data( ! supprs_discr_data_g !, supprs_cvd2_data_g, ! supprs_avs_data_g !, ! ilf !, ! sem.track1 !, ! $len( sem.track1 ) !, ! sem.track2 !, ! $len( sem.track2 ) !, sem.addl^data.info.visa^cvv2^sub^fld^92, $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) ); end; ! of Visa CVV2 request data end; ! of orig_b24 #ADD 08184N09 UTIL^ILF^UPDT if $param( base24^msg ) and orig_b24 = "1" then begin ! ! Suppress discretionary data in the internal message and ! token sections of the ILF as indicated in the associated ! globals ! call hiswilf_supprs_discr_data( supprs_discr_data_g, supprs_cvd2_data_g, ! supprs_avs_data_g !, ilf ); end; #ENDSCN = SW06091 !*CMP2.13 10/18/02 BNETS 6048 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6048 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6048 * ******************************************************************************** #SCN = SW06093 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6048 #NEWVERSION = 6049 #ADD 00026v0O ! 18OCT2002 RAF/100 gg/724 ! Symptom: Echotests are sent after the interface has been logged ! off. ! Problem: When the Wait for Traffic timer expires, an echotest is ! sent by the interface regardless of whether the station ! is logged on or logged off. ! Fix: Modified the interface to not initiate an echotest when ! a Wait for Traffic timer expires and the interface is ! not logged on. ! Procs modified: tim^out^07^wft. ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: (retro of SCN SW5P766 from Case #352035) ! 18OCT2002 gg/724 ! Symptom: Discretionary Data Suppression ! Problem: None ! Fix: Added processing to read new lconf params and set new ! globals that will control the logging of discretionary ! data. ! Procs modified: cmd^warmboot^retrieve^globals, ! cmd^warmboot^store^globals, and ! init^paramproc ! Dependency: Replace BNETUPDT and BNETMAN. Apply fixes to BAUTILS, ! HISWUTLS, BNETG, BNETLIBS, and BNETS. Run MAKE. ! Reference: WO #020625-02 !#################################################################### #ADD 02599R2R CMD^WARMBOOT^STORE^GLOBALS store^d( supprs_avs_data_g ); store^d( supprs_cvd2_data_g ); store^d( supprs_discr_data_g ); #ADD 02599T1H CMD^WARMBOOT^STORE^GLOBALS supprs_avs_data_g := false; supprs_cvd2_data_g := false; supprs_discr_data_g := false; #ADD 02599R8I CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( supprs_avs_data_g ); retrieve^d( supprs_cvd2_data_g ); retrieve^d( supprs_discr_data_g ); #ADD 03945p01 INIT^PARAMPROC "P", "SWI-ACQ-AVS-DATA-SUPPRS ", "P", "SWI-ACQ-CVD2-DATA-SUPPRS ", "P", "SWI-ACQ-DISCR-DATA-SUPPRS ", #ADD 03996p0M INIT^PARAMPROC ! ! SWI-ACQ-AVS-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs_avs_data_g := true; end else begin ! ! The default value is false - do not suppress ! data before logging ! supprs_avs_data_g := false; end; end; ! ! SWI-ACQ-CVD2-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs_cvd2_data_g := true; end else begin ! ! The default value is false - do not suppress ! data before logging ! supprs_cvd2_data_g := false; end; end; ! ! SWI-ACQ-DISCR-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs_discr_data_g := true; end else begin ! ! The default value is false - do not suppress ! data before logging ! supprs_discr_data_g := false; end; end; #ADD 08265 TIM^OUT^07^WFT int .ext bniif^tbl( fiid^mci^def ); int seg^id; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; if not ( bniif^tbl.logon^acq or bniif^tbl.logon^iss or bniif^tbl.logon^cr or bniif^tbl.logon^db ) then begin return; end; #ADD 08270k01 TIM^OUT^07^WFT if pct.options.acq and bniif^tbl.logon^acq then #DELETE 08270k02 TIM^OUT^07^WFT #ADD 08270k06 TIM^OUT^07^WFT if pct.options.iss and bniif^tbl.logon^iss then #DELETE 08270k07 TIM^OUT^07^WFT #ENDSCN = SW06093 !*CMP2.13 10/22/02 RQBNIIFS6005 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.RQBNIIFS RQBNIIFS 6005 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.RQBNIIFS RQBNIIFS 6005 * ******************************************************************************** #SCN = SW06115 , FILEID = RQBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6005 #NEWVERSION = 6006 #ADD 00000 OFFSET 10 *############################################################### *# # *# BASE24 # *# ------ # *# # *# BNIIF REQUESTER # *# # *# Proprietary Software Product # *# # *# ACI Worldwide Inc. # *# 330 South 108th Avenue # *# Omaha, Nebraska 68154 # *# (402) 390-7600 # *# # *# Copyright by ACI Worldwide Inc. 1996 - 2002 # *# # *# All Rights Reserved. # *# # *############################################################### * * Record of Changes: * * Date Person/Emp # * --------- ------------ #DELETE 00000E00/00017A00 #ADD 00017E0K * 18OCT2002 kjw/571 gg/724 * * Symptom: None. * * Problem: BNIIF allows values for AVS TYPE not supported * * by Mastercard. * * Fix: Remove values 4 and 5 from validation edit and * * screen error description. * * Procs Modified: 480-DATA-CHECK * * Dependency: Apply fix to RQBNIIFS, SCRNBIIF and re-make. * * Reference: ( retro of SCN SW5P513 from Case #334372 ) * #DELETE 00017E0L #ADD 00420A02 480-DATA-CHECK AND NOT = "3" #DELETE 00420A03 480-DATA-CHECK #ADD 00420A07 480-DATA-CHECK MOVE "AVS TYPE MUST BE 0, 1, 2, 3 " #DELETE 00420A08 480-DATA-CHECK #ENDSCN = SW06115 !*CMP2.13 10/25/02 BNETLIBS6051 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6051 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6051 * ******************************************************************************** #SCN = SW06117 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6051 #NEWVERSION = 6052 #ADD 00026y0D ! 24OCT2002 kke/872 ! Symptom: MasterCard was denying transactions with a response code ! of 069, format error. ! Problem: The postal code field of bit 61, national POS data, ! contained a dash. The dash should be stripped out when ! the postal code is moved into bit 61. ! Fix: Added code to strip the dash from the postal code. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #354456 ! ! 24OCT2002 kke/872 ! Symptom: Bit 48, additional data, was not present on 0110 pinned ! POS transaction responses. For pinned POS transactions ! bit 48, subfield 80 should contain the pin service code. ! Problem: Bit 48 was turned off when the SEM response was ! formatted and only turned back on if new data was added ! to it. No check was made on subfield 80. ! Fix: Added code to turn on bit 48, additional data, in the ! response if subfield 80 is present. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #354496 #ADD 00707 PSTM^FRMT^0200^TO^XRQST if pstm.postal^cde <> zeroes for $len( pstm.postal^cde ) and pstm.postal^cde <> blanks for $len( pstm.postal^cde ) then begin if pstm.postal^cde.byte[5] <> "-" and pstm.postal^cde.byte[5] <> " " then begin move( sem.ntl^pos^data.postal^cde, pstm.postal^cde ); end else begin movl( sem.ntl^pos^data.postal^cde, pstm.postal^cde, 5 ); movl( sem.ntl^pos^data.postal^cde.byte[5], pstm.postal^cde.byte[6], 4 ); end; end ! PSTM contains a valid postal code else mov^( sem.ntl^pos^data.postal^cde, pct.dflt.postal^cde ); #DELETE 00708 /00712 PSTM^FRMT^0200^TO^XRQST #REPLACE 00802m6D/00803 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" then ! Pinned POS transaction response - send field 48 ! begin addl^data^bit^d := 1; end; #ENDSCN = SW06117 !*CMP2.13 10/28/02 BNETS 6049 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6049 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6049 * ******************************************************************************** #SCN = SW06120 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6049 #NEWVERSION = 6050 #ADD 00026w0P ! 28OCT2002 kke/872 kke/872 ! Symptom: Wait for Traffic timers are not initiated for acquirer ! only processors. ! Problem: 1) In the logon response procedures WFT timers are not ! initiated if the traffic direction contained in the ! timer userbuf of the logon timer is acquirer. ! 2) In the WFT timeout proc, the active segment is ! changed to be the BNIIF segment, but not returned to ! the original segment before the timeout proc is ! exited. ! Fix: 1) Added code to allow a WFT timer to be set if the ! customer is processing as an acquirer, but not as an ! issuer. Previously, the customer was required to be ! processing as issuer. ! 2) Added code to make the original segment the active ! segment prior to leaving the timeout proc. ! Procs modified: sem^logon^response^group ! sem^logon^response^prefix ! tim^out^07^wft ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #355038. (Retro of SW5P771 for Case #353958.) #REPLACE 06250 /06251 SEM^LOGON^RESPONSE^GROUP if ( traffic = acq^l and not pct.options.iss ) or ( traffic <> acq^l ) then #REPLACE 06348 /06349 SEM^LOGON^RESPONSE^PREFIX if ( traffic = acq^l and not pct.options.iss ) or ( traffic <> acq^l ) then #ADD 08265w0B TIM^OUT^07^WFT call usesegment( seg^id ); #REPLACE 08265w0E TIM^OUT^07^WFT call usesegment( seg^id ); #ENDSCN = SW06120 !*CMP2.13 12/13/02 RP09BNTS6007 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6007 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.RP09BNTS RP09BNTS 6007 * ******************************************************************************** #SCN = SW06187 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00008G09 * 12DEC2002 kjw/571 * Symptom: Code will not compile. * Problem: A modification made to the generic reports caused * duplicate variable names to be created. Fixing * that problem introduced the same problem in this * program. * Fix: Removed ws-ilf-lgth as it will be part of a copy * statement from the generic reports. * Working Storage modified. * Dependency: Apply fix to RP09BNTS and reMake. * Reference: Case #354841 #DELETE 00051G01 DATA DIVISION #ENDSCN = SW06187 !*CMP2.13 12/23/02 BNETLIBS6052 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6052 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6052 * ******************************************************************************** #SCN = SW06219 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6052 #NEWVERSION = 6053 #ADD 00026z0O ! 24DEC2002 RAF/100 ! Symptom: The interface is adding an ILF header record every time ! the ILF is opened. It should only add an ILF header ! record when the ILF is created. ! Problem: The interface is not updating the create^it parameter ! after opening the ILF. This causes the interface to ! think it created a new ILF every time it opens the ILF. ! Fix: Modified the interface to update the create^it flag ! after opening the ILF. This flag will be used to ! determine if the ILF was newly created or simply opened. ! Procs modified: util^ilf^open. ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #356654. #ADD 07796r1D UTIL^ILF^OPEN create^it := created; #ENDSCN = SW06219 !*CMP2.13 01/07/03 BNETLIBS6053 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6053 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6053 * ******************************************************************************** #SCN = SW06233 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6053 #NEWVERSION = 6054 #ADD 00026#0D ! 07JAN2003 ahs/3152 ! Symptom: Field 48 (additional private data) is not always sent ! in 0110 responses sent to MasterCard. ! Problem: The interface added tag 87 (CVC validation code) to ! field 48 only when the POS Entry Mode P-22 in the ! request is 90x (magnetic stripe read). If P-22 is ! 80x, then it means that the chip read failed and the ! magnetic-stripe was used. This is equivalent to P-22 ! being a 90x, and tag 87 should be added. ! Fix: Modified the interface to add tag 87 to P-48 if the ! POS entry mode is either 80x or 90x. ! Modified proc: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #357213. #REPLACE 00802m0J/00802m0J OFFSET 0 PSTM^FRMT^0210^TO^XRESP ( sem.pos^entry^mde = "90" or sem.pos^entry^mde = "80" ) then #ENDSCN = SW06233 !*CMP2.13 01/08/03 BNETS 6050 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6050 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6050 * ******************************************************************************** #SCN = SW06237 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6050 #NEWVERSION = 6051 #ADD 00026x0M ! 08JAN2003 RAF/100 ! Symptom: RACAL users are unable to complete a Key Exchange. ! Problem: MasterCard is using the ANSI X9.17 encryption method for ! Key Exchanges. The interface is only coded to use the ! Variant encryption method. ! Fix: Added processing to read a new lconf param ! RACAL-ANSI-METHOD. When this parameter is set to 'Y' ! the interface will operate using the ANSI X9.17 ! encryption method. If set to 'N' or not added, the ! interface will use the Variant encryption method. ! Procs modified: cmd^warmboot^retrieve^globals, ! cmd^warmboot^store^globals, ! init^paramproc, ! sem^key^request. ! Dependency: Replace BNETMAN. Apply fixes to BNETG and BNETS. Run ! MAKE. ! Reference: Case #357289. #REPLACE 02599p02 CMD^WARMBOOT^STORE^GLOBALS store^d( remote_key_scheme_g ); #REPLACE 02599w0E CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( remote_key_scheme_g ); #REPLACE 03945w04 INIT^PARAMPROC "P", "RACAL-ANSI-METHOD ", #ADD 03996w0v INIT^PARAMPROC if not ferror then begin ! ! RACAL-ANSI-METHOD ! remote_key_scheme_g := 0; if lconf.param^msg.ptxt = "Y" then begin remote_key_scheme_g := 1; end; end; #REPLACE 06101t09 SEM^KEY^CHNG^RQST remote_key_scheme_g, #ENDSCN = SW06237 !*CMP2.13 01/08/03 BNETG 6024 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6024 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6024 * ******************************************************************************** #SCN = SW06238 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6024 #NEWVERSION = 6025 #ADD 00025X09 ! 08JAN2003 RAF/100 ! Symptom: RACAL users are unable to complete a Key Exchange. ! Problem: MasterCard is using the ANSI X9.17 encryption method for ! Key Exchanges. The interface is only coded to use the ! Variant encryption method. ! Fix: Added processing to read a new lconf param ! RACAL-ANSI-METHOD. When this parameter is set to 'Y' ! the interface will operate using the ANSI X9.17 ! encryption method. If set to 'N' or not added, the ! interface will use the Variant encryption method. ! Dependency: Replace BNETMAN. Apply fixes to BNETG and BNETS. Run ! MAKE. ! Reference: Case #357289. #REPLACE 00494W00 int remote_key_scheme_g := 0; #REPLACE 01366S02 remote_key_scheme_g, #ENDSCN = SW06238 !*CMP2.13 01/16/03 BNETLIBS6054 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6054 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6054 * ******************************************************************************** #SCN = SW06254 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6054 #NEWVERSION = 6055 #ADD 00026$0E ! 14JAN2003 chh/174 ! Symptom: Triple-To-Single PIN Translation translated incorrectly ! for formating internal pin to external pin. ! Problem: Internal PAN was being used in the call to ! hiswpin_xlate_3dea_dea instead of External PAN. ! Fix: Modified the call to hiswpin_xlate_3dea_dea proc to ! used External PAN instead of Internal PAN. ! Proc modified: ! util^frmt^int^pin^to^ext^pin. ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #357672. #REPLACE 06317r3Y UTIL^FRMT^INT^PIN^TO^EXT^PIN ext^pan.byte, #ENDSCN = SW06254 !*CMP2.13 03/03/03 BNETS 6051 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6051 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6051 * ******************************************************************************** #SCN = SW07002 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6051 #NEWVERSION = 6052 #ADD 00026y0I ! 03MAR2003 kke/872 ! Symptom: Garbage appears is log message #1500. ! Problem: Not all possible reject codes were present in the table ! of reject reasons put out by the message. ! Fix: Added response codes 63 (security violation), 80 ! (duplicate add, action not performed), and 96 (system ! error) to the table of reject reasons used by log ! message 1500. ! Procs modified: sem^file^request^response ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #359476. #REPLACE 05982R02 SEM^FILE^REQUEST^RESPONSE ',' " Text: \?" ) #ADD 06006 SEM^FILE^REQUEST^RESPONSE "63", "SECURITY VIOLATION ", "80", "DUPLICATE ADD; NO ACTION TAKEN", "96", "SYSTEM ERROR ", #REPLACE 06023 SEM^FILE^REQUEST^RESPONSE @sem.typ, @sem.resp^cde, @txt, 30 ); #ENDSCN = SW07002 !*CMP2.13 03/07/03 BNETLIBS6055 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6055 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6055 * ******************************************************************************** #SCN = SW07012 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6055 #NEWVERSION = 6056 #ADD 00026%0B ! 07MAR2003 jds/1802 ! Symptom: Banknet Data Integrity Monitoring Program Mandates. ! Problem: None. ! Fix: 1. Deleted the entry of Merchant Category Code '6011' ! mapped to a Transaction Category Code of 'Z' in the sic ! code conversion table. ! 2. If DE 48, SE 42, sub-field 1, position 3 has the ! value '2', (UCAF data collection is supported and UCAF ! data is populated) and the interface is unable to ! retrieve the UCAF data from the Authentication Data ! token, then DE 48, SE 42, sub-field 1, position 3 is set ! to the value '1' (UCAF data collection is supported but ! UCAF data was not populated). ! 3. Added code to deny the transaction if DE 18 has the ! value of '5542' and DE 61 position 10 does not contain ! the value of '1' or '2'. ! 4. Added code to deny the transaction if DE 48, SE 42, ! sub-field 01, position 3 is ('1' or '2') and DE 61 ! position 4 does not contain the value '5' and position ! 10 does not contain the value '6'. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: WO #030220-03 #ADD 00700i00 PSTM^FRMT^0200^TO^XRQST ! ! If merchant type = "5542" (automated fuel dispenser) and ! position 10 does not equal "1" (authorized level 1 CAT: ! automated despensing machine with PIN) or "2" (authorized ! level 2 CAT: self-service terminal), deny the transaction. ! if sem.merch^typ = "5542" and ( sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "1" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "2" ) then #DELETE 00700i01/00700i05 PSTM^FRMT^0200^TO^XRQST #ADD 00700e0J PSTM^FRMT^0200^TO^XRQST ! ! If the UCAF indicator within sub-field 42 of data element 48 ! equals '1' or '2' and position 4 of DE 61 (National Point of ! Service Condition Code) does not equal '5' (electronic order - ! home PC, internet) and position 10 of DE 61 does not equal '6' ! (authorized level 6 cardholder-activated terminal: electronic ! commerce), deny the transaction. ! if ( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" ) and ( sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "5" or sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" ) then begin return resp^format^error^sem^l; end; #REPLACE 01422o01 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 61, #DELETE 01455 PSTM^FRMT^SEM^ADDL^DATA #ADD 01541t0E PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "2" then begin if hiswtkn^get^tkn( pstm, tkn^id, @authn^data^tkn, authn^data^tkn^lgth ) then begin movd( sem.addl^data.info.ucaf^sub^fld^43.tag, "43" ); ! ! If the length of the token's Authentication ! Indicator Data is less than or equal to 32, ! move the token's UCAF data into the SE 43's ! TAG^DATA field for that length. Otherwise, ! move the data for the the maximum of 32 ! bytes. Set SE 43's length field ! accordingly. ! rscan authn^data^tkn. authn^ind^data while " " -> @ptr; data^lgth := ( @ptr '-' @authn^data^tkn. authn^ind^data ) + 1; if data^lgth <= 32 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43.lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data, data^lgth ); end else begin movd( sem.addl^data.info.ucaf^sub^fld^43. lgth, "32" ); move( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43.lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end else begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "1" ); end; end; #DELETE 01541t0F/01541t1L PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW07012 !*CMP2.13 03/17/03 BNETLIBS6056 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6056 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6056 * ******************************************************************************** #SCN = SW07056 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6056 #NEWVERSION = 6057 #ADD 00026&0O ! 17MAR2003 ahs/3152 ! Symptom: DE-48 (additional data) is being sent to MasterCard ! when it should not be, or sent with invalid data. ! Problem: MasterCard requires DE 48 to be sent back in response ! messages if it is modified or if new tags have been ! added to it. It should not be sent if it contains the ! same data as in the response. When DE 48 is sent back, ! it must contain all the tags present in the request, ! plus any possible additions. Also, tag 87 should be ! added to DE 48 if card verification was performed ! regardless of the value in the POS Entry Mode (DE 22). ! The interface was not performing these rules. ! Fix: Modified the interface to perform the above. ! Modified proc: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and re-MAKE. ! Reference: Case #359727 #ADD 00746Q06 PSTM^FRMT^0210^TO^XRESP ! ! Assume we did not modify addl data, any modification sets this ! flag to true and then DE-48 will be sent. ! int send^addl^data := false; ! ! This define is used to update data in the sem.addl^data DE 48 ! field. Any modifications will set the flag so that the data ! is sent in the response. ! define set^addl^data^d( fld, value ) = begin if sem.addl^data.info.fld <> value then begin send^addl^data := true; movd( sem.addl^data.info.fld, value ); end; end#; #REPLACE 00802m0I PSTM^FRMT^0210^TO^XRESP ps50^tkn.crd^vrfy^flg = "R" ) then #DELETE 00802$00/00802$03 PSTM^FRMT^0210^TO^XRESP #ADD 00802m0N PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "Y" ); #DELETE 00802m0O/00802m0P PSTM^FRMT^0210^TO^XRESP #DELETE 00802m11 PSTM^FRMT^0210^TO^XRESP #REPLACE 00802m12 PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "P" ); #REPLACE 00802m1E/00802m1F PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "M" ); #REPLACE 00802m1N/00802m1O PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "N" ); #REPLACE 00802m1Y/00802m1Z PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "P" ); #REPLACE 00802m2I/00802m2K PSTM^FRMT^0210^TO^XRESP set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "01" ); #REPLACE 00802m2P/00802m2R PSTM^FRMT^0210^TO^XRESP set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "02" ); #REPLACE 00802m2W/00802m2Y PSTM^FRMT^0210^TO^XRESP set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "03" ); #REPLACE 00802m33/00802m35 PSTM^FRMT^0210^TO^XRESP set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, " " ); #DELETE 00802m3L PSTM^FRMT^0210^TO^XRESP #REPLACE 00802m3M PSTM^FRMT^0210^TO^XRESP set^addl^data^d( cvc^sub^fld^87.tag^data, "P" ); #ADD 00802m5A PSTM^FRMT^0210^TO^XRESP send^addl^data := true; #ADD 00802m6A PSTM^FRMT^0210^TO^XRESP send^addl^data := true; #ADD 00802m6C PSTM^FRMT^0210^TO^XRESP if sem.addl^data.lgth = "001" or not send^addl^data then ! ! If only the transaction category code is present in ! DE 48, or we did not add new data to it, then do ! not send DE 48. ! begin addl^data^bit^d := 0; end; #DELETE 00802w0B/00802o09 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW07056 !*CMP2.13 03/21/03 BNETLIBS6057 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6057 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6057 * ******************************************************************************** #SCN = SW07068 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6057 #NEWVERSION = 6058 #ADD 00026*0H ! 21MAR2003 RAF/100 ! Symptom: Process abends with trap #1900 when receiving an ! internal reversal. ! Problem: Token data is corrupted when the Switch Token (tkn^id ! of 'B0') is updated during reversal processing. This ! can happen when the Switch Token Structure is modified ! to a larger size. Switch Token Version Numbers should ! be compared before the interface updates the Switch ! Token. If the Version Numbers are different, then the ! Switch Token should not be updated. ! Fix: Modified the code to compare version numbers between ! the current token from the ILF and the switch token ! that is being used to update the buffer. If they are ! not the same, the interface will not update the token. ! Proc modified: util^swi^tkn^updt. ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #360144. #ADD 10230Z4O UTIL^SWI^TKN^UPDT ! ! New versions have more data than old versions, which ! can cause the interface to abend if the token is updated ! if bnet^tkn.ver^id <> bnet^tkn^buf.ver^id for $len( bnet^tkn.ver^id ) then begin return; end; #ENDSCN = SW07068 !*CMP2.13 04/01/03 BNETS 6052 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6052 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6052 * ******************************************************************************** #SCN = SW07102 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6052 #NEWVERSION = 6053 #ADD 00026z0B ! 01APR2003 ahs/3152 ! Symptom: The interface dumps with trap 2 on receipt of a late ! response from BankNet. ! Problem: The interface did not return from the sem^response proc ! after updating the ILF record. When processing reaches ! further steps, it tries to access the pointer to the ! suspended messages. Since that pointer is -1, the ! process dumps. ! Fix: Added a return from the sem^response proc if the ! response is late and the suspended message cannot be ! found. ! Modified proc: sem^response ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #361105. #REPLACE 06861T01/06862 SEM^RESPONSE return; end; ! of if not util^suspend^tran^delete ! #ENDSCN = SW07102 !*CMP2.13 04/02/03 BNETLIBS6058 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6058 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6058 * ******************************************************************************** #SCN = SW07108 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6058 #NEWVERSION = 6059 #ADD 00026+0I ! 02APR2003 kke/872 ! Symptom: Card sequence number (DE-23) is included on all EMV ! transactions, even when it does not reflect the member ! number from the chip. Field 23 should only be sent for ! EMV transactions when it contains a chip read member ! number which differentiates between cards. ! Problem: The interface was setting field 23 to the member number ! as read from track2 on EMV transactions. If the member ! number was not present field 23 was zero filled and ! sent anyway. Subsequent code in the EMV extension ! would then set it to the value read from the chip if ! it was not zeroes. ! Fix: Removed code which set field 23 for EMV transactions. ! The EMV extension will turn on bit 23 and set field 23 ! to the member number as read from the chip if that ! member number is not "00". A member number of "00" ! does not differentiate between cards. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #360496. #DELETE 00595Z01/00595x0I PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW07108 !*CMP2.13 04/10/03 BNETS 6053 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6053 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6053 * ******************************************************************************** #SCN = SW07112 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6053 #NEWVERSION = 6054 #ADD 00026#0F ! 09APR2003 ahs/3152 ! Symptom: The ILF record logged for an outbound timeout message ! does not contain the external message. ! Problem: The interface did not include the external message when ! logging the ILF record for an outbound timeout. ! Fix: Added the external message to the ILF record. ! Modified proc: pstm^0200^route ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #361211 #REPLACE 04874 /04876 PSTM^0200^ROUTE call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, susp.orig^net^pro, pstm, susp.extrn^msg, susp.extrn^msg^lgth, substate ); #ENDSCN = SW07112 !*CMP2.13 05/13/03 BNETLIBS6059 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6059 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6059 * ******************************************************************************** #SCN = SW07167 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6059 #NEWVERSION = 6060 #ADD 00026-0K ! 12MAY2003 kjw/571 ! Symptom: Interface not setting recurring payment indicator in ! outbound request messages. ! Problem: The interface was checking the Base24 release indicator ! to be = 5, preventing the access to the PS51 token if ! installation is using 6. ! Fix: Modified code to check the Base24 release indicator to ! greater than or equal to 5. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #362912. #REPLACE 00700q02 PSTM^FRMT^0200^TO^XRQST if base24^rel^g >= 5 and #ENDSCN = SW07167 !*CMP2.13 06/19/03 BNETLIBS6060 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6060 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6060 * ******************************************************************************** #SCN = SW07211 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6060 #NEWVERSION = 6061 #ADD 00026:0C ! 17JUN2003 kke/872 ! Symptom: SEM field DE-48, subfield 42, position 3, UCAF ! Collection Indicator was sometimes sent to MasterCard ! as a space which is not a valid value for this field. ! Problem: Position 3 was initialized to a space and left that ! way if the PS51 token authn^coll^ind field was blank. ! Fix: Added code to set position 3 to "0", UCAF collection ! not supported, if the PS51 token value contains a space. ! Procs modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #364373. ! ! 17JUN2003 kke/872 ! Symptom: When a SEM is formatted from a PSTM request and the ! customer has been ID has been verified, that ! information was not being passed on in DE-61 subfield ! 8, POS Transaction Security. ! Problem: No check was made for the pstm.pt^srv^cond^cde value ! of "10", Customer identity verified. ! Fix: Added code to set DE-61, Point of Service Data, ! subfield 8 to "2", ID verified, if the PSTM indicates ! that the customer's identity has been verified. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #364436. ! ! 17JUN2003 kke/872 ! Symptom: SEM field DE-61, subfield 3, POS terminal location was ! not set correctly. ! Problem: No check was made for mail/phone order transactions. ! This value was defaulted to "1", Off premises of card ! acceptor facility (Merchant terminal -- remote ! location). ! Fix: Added code to set the POS terminal location to "3", No ! terminal used (voice/ARU authorization) for mail/phone ! order transactions. Removed code which would default ! this value to "1". It will now be left "0", On ! premises of card acceptor facility if no reason is ! encountered to set it to a different value. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #364437. #ADD 00659X16 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "15" or ! cust term/home term ! sem.pos^entry^mde = "81" then ! e-comm incl. chip ! begin ! ! On premises of cardholder (home PC ) ! movd ( sem.ntl^pos^data.cond^cde.byte[2], "2" ); end; if pstm.pt^srv^cond^cde = "08" then ! mail/phone order ! begin ! ! No terminal used (voice/ARU authorization ) ! movd ( sem.ntl^pos^data.cond^cde.byte[2], "3" ); end; #DELETE 00659X17/00659X1B PSTM^FRMT^0200^TO^XRQST #ADD 00659X21 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "10" then ! Cust id verified ! begin ! ! ID verified ! movd( sem.ntl^pos^data.cond^cde.byte[ 7 ], "2" ); end; #REPLACE 01541t0B/01541t0B OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA end else begin movd( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind, "0" ); ! UCAF collection not supported ! end; #ENDSCN = SW07211 !*CMP2.13 06/23/03 BNETDDLS6012 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6012 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6012 * ******************************************************************************** #SCN = SW07215 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6012 #NEWVERSION = 6013 #ADD 00262L0D * 19JUN2003 DOO/1693 * Symptom: Banknet Release 03.2 Mandates. * Problem: None. * Fix: 1. Increased the size of field MCI Identification * Number (MCI-ID) within the BNIIF definition. * 2. Added support for DE 124 (Member-defined Data). * Modified sections: BNIIF and SEM * Dependency: BA10SC04 subvolume. New files: BII0203M, BII0203R, * BII0203S, ILB0203M, ILB0203R, and ILB0203S. Apply fixes * to BNETDDLS, BNETG, BNETLIBS, BNETS, and SCRNBIIF and * re-MAKE. Replace BNETLOGM, BNETMAN, and BNETUPDT. * Reference: WO #030323-01 #ADD 01403 SEM * * member defined data * bit map position = 124 * EBCDIC in transmission, variable in length * * used when an acquirer or issuer needs to send data about the * transaction to the recepient of the message. * 02 mbr-def. 04 lgth pic 999. 04 info pic x(99). #ADD 02629 BNIIF 02 mci-id pic x(6). #DELETE 02630 BNIIF #ENDSCN = SW07215 !*CMP2.13 06/23/03 BNETLIBS6061 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6061 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6061 * ******************************************************************************** #SCN = SW07216 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6061 #NEWVERSION = 6062 #ADD 00026;0h ! 19JUN2003 DOO/1693 ! Symptom: DE 61 is incorrectly formatted for e-commerce ! transactions initiated at a home terminal. ! Problem: Subfield 5 (POS Card Presence) of DE 61 is set to "0" ! (card present) instead of "1" (card not present) for ! these transctions. ! Fix: Modified the code to set subfield 5 of DE 61 to "1" for ! e-commerce transactions initiated at a home terminal. ! Modified procs: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETDDLS and re-MAKE. ! Reference: Case #362404 ! 19JUN2003 DOO/1693 ! Symptom: Banknet Release 03.2 Mandates. ! Problem: None. ! Fix: 1. Replaced literal MAX^GROUP^LGTH^L with the new global ! variable MAX^GROUP^LGTH^G. ! 2. Added code to add the Original Currency Token to the ! internal message (PSTM). ! Modified procs: path^frmt^admin^rqst ! path^frmt^file^rqst ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0402^to^sem ! sdf^frmt^0220^to^xadv ! sdf^frmt^0422^to^xrvsl ! sdf^frmt^0620^to^xadmin ! sem^frmt^nmm^request ! sem^frmt^xrqst^to^pstm^0200 ! util^send^reject ! Dependency: BA10SC04 subvolume. New files: BII0203M, BII0203R, ! BII0203S, ILB0203M, ILB0203R, and ILB0203S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, and SCRNBIIF and ! re-MAKE. Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: WO #030323-01 #ADD 00291 PATH^FRMT^ADMIN^RQST call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 00292 /00293 PATH^FRMT^ADMIN^RQST #ADD 00365 PATH^FRMT^FILE^RQST call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); #DELETE 00366 PATH^FRMT^FILE^RQST #ADD 00366Q0F PATH^FRMT^FILE^RQST max^group^lgth^g, #DELETE 00366Q0G PATH^FRMT^FILE^RQST #ADD 00595x0J PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); movl ( sem.acq^inst.cde, prikey.term^id, max^group^lgth^g ); #DELETE 00597 /00598 PSTM^FRMT^0200^TO^XRQST #ADD 00599 PSTM^FRMT^0200^TO^XRQST if sem.acq^inst.cde <> pct.inst for max^group^lgth^g then #DELETE 00600 PSTM^FRMT^0200^TO^XRQST #ADD 00601 PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 00602 /00603 PSTM^FRMT^0200^TO^XRQST #ADD 00659X1N PSTM^FRMT^0200^TO^XRQST pstm.pt^srv^cond^cde = "08" or pstm.pt^srv^cond^cde = "15" then #DELETE 00659X1O PSTM^FRMT^0200^TO^XRQST #ADD 00942 PSTM^FRMT^0402^TO^SEM call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); #DELETE 00943 PSTM^FRMT^0402^TO^SEM #ADD 00953 PSTM^FRMT^0402^TO^SEM call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); #DELETE 00954 PSTM^FRMT^0402^TO^SEM #ADD 01692 SDF^FRMT^0220^TO^XADV ( lgth <= 0 ) or ( lgth > max^group^lgth^g ) then #DELETE 01693 SDF^FRMT^0220^TO^XADV #ADD 01702 SDF^FRMT^0220^TO^XADV if sdf.acq^inst.num <> pct.inst for max^group^lgth^g then #DELETE 01703 SDF^FRMT^0220^TO^XADV #ADD 01704 SDF^FRMT^0220^TO^XADV call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 01705 /01706 SDF^FRMT^0220^TO^XADV #ADD 01799 SDF^FRMT^0422^TO^XRVSL if sem.acq^inst.cde <> pct.inst for max^group^lgth^g then #DELETE 01800 SDF^FRMT^0422^TO^XRVSL #ADD 01802 SDF^FRMT^0422^TO^XRVSL call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 01803 /01804 SDF^FRMT^0422^TO^XRVSL #ADD 01881 SDF^FRMT^0620^TO^XADMIN call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 01882 /01883 SDF^FRMT^0620^TO^XADMIN #ADD 02429 SEM^FRMT^NMM^REQUEST call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 02430 /02431 SEM^FRMT^NMM^REQUEST #ADD 02438N00 SEM^FRMT^NMM^REQUEST if $param( group ) and group <> blanks for max^group^lgth^g then #DELETE 02438N01 SEM^FRMT^NMM^REQUEST #ADD 02446 SEM^FRMT^NMM^REQUEST max^group^lgth^g + max^prefix^lgth^l + 2 ); #DELETE 02447 SEM^FRMT^NMM^REQUEST #ADD 02447N02 SEM^FRMT^NMM^REQUEST max^group^lgth^g ); #DELETE 02447N03 SEM^FRMT^NMM^REQUEST #ADD 02453N00 SEM^FRMT^NMM^REQUEST if $param( group ) and group <> blanks for max^group^lgth^g then #DELETE 02453N01 SEM^FRMT^NMM^REQUEST #ADD 02454N02 SEM^FRMT^NMM^REQUEST max^group^lgth^g + 2 ); #DELETE 02454N03 SEM^FRMT^NMM^REQUEST #ADD 02454N04 SEM^FRMT^NMM^REQUEST max^group^lgth^g ); #DELETE 02454N05 SEM^FRMT^NMM^REQUEST #ADD 02469 SEM^FRMT^NMM^REQUEST call integer^ascii^( sem.pan.lgth, max^group^lgth^g ); movl ( sem.pan.num, group, max^group^lgth^g ); #DELETE 02470 /02471 SEM^FRMT^NMM^REQUEST #ADD 03511W0A SEM^FRMT^XRQST^TO^PSTM^0200 string conv^dat[ 0:3 ]; string conv^rate[ 0:7 ]; string crncy^cde[ 0:2 ]; string tran^amt[ 0:11 ]; #ADD 03629J02 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 and sem.tran^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin move( tran^amt, sem.tran^amt ); move( conv^rate, sem.conv^rate^crd^iss ); move( conv^dat, sem.conv^dat ); move( crncy^cde, sem.tran^crncy^cde ); tkn^lgth := 0; call hiswtkn_add_orig_crncy_60( ofst, pos^l, tran^amt, $occurs( tran^amt ), ! amt^2 !, ! amt^2^lgth !, crncy^cde, conv^rate, conv^dat, pstm, tkn^lgth ); end; ! of if base24^rel^g >= 5 #ADD 09375 UTIL^SEND^REJECT call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl ( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); #DELETE 09376 /09377 UTIL^SEND^REJECT #ENDSCN = SW07216 !*CMP2.13 06/23/03 BNETS 6054 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6054 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6054 * ******************************************************************************** #SCN = SW07217 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6054 #NEWVERSION = 6055 #ADD 00026$0A ! 19JUN2003 DOO/1693 ! Symptom: Banknet Release 03.2 Mandates. ! Problem: None. ! Fix: 1. Replaced literal MAX^GROUP^LGTH^L with the new global ! varaible MAX^GROUP^LGTH^G. ! 2. Modified copyright date to 2003. ! Modified procs: aci^copyright ! cmd^logoff^g ! cmd^logon^g ! cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^newkey ! init^paramproc ! sem^response ! Dependency: BA10SC04 subvolume. New files: BII0203M, BII0203R, ! BII0203S, ILB0203M, ILB0203R, and ILB0203S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, and SCRNBIIF and ! re-MAKE. Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: WO #030323-01 #ADD 00483t00 ACI^COPYRIGHT "Copyrighted by ACI Worldwide Inc. 2003"; #DELETE 00483t01 ACI^COPYRIGHT #ADD 01474 CMD^LOGOFF^G set( group^lgth, max^group^lgth^g ); #DELETE 01475 CMD^LOGOFF^G #ADD 01486 CMD^LOGOFF^G if ( group = blanks for max^group^lgth^g ) or #DELETE 01487 CMD^LOGOFF^G #ADD 01703 CMD^LOGON^G set( group^lgth, max^group^lgth^g ); #DELETE 01704 CMD^LOGON^G #ADD 01716 CMD^LOGON^G if ( group = blanks for max^group^lgth^g ) or #DELETE 01717 CMD^LOGON^G #ADD 02599T0C CMD^WARMBOOT^STORE^GLOBALS store^d( max^group^lgth^g ); #DELETE 02599T0D CMD^WARMBOOT^STORE^GLOBALS #ADD 02599T1H CMD^WARMBOOT^STORE^GLOBALS max^group^lgth^g := 5; #DELETE 02599w05 CMD^WARMBOOT^STORE^GLOBALS #ADD 02599T5Q CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( max^group^lgth^g ); #ADD 03920k22 INIT^NEWKEY call integer^ascii^( sem.pan.lgth, max^group^lgth^g ); movl( sem.pan.num, pct.inst, max^group^lgth^g ); #DELETE 03920k23/03920k24 INIT^NEWKEY #ADD 03941p03 INIT^PARAMPROC wlform( invld^grp^lgth, "Param MAX-GROUP-LGTH contains invalid " ','"data. Default value of 5 used." ) #ADD 03945y01 INIT^PARAMPROC "P", "MAX-GROUP-LGTH ", #ADD 03996y0C INIT^PARAMPROC ! ! MAX-GROUP-LGTH ! if not ferror then begin call ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, max^group^lgth^g ); if max^group^lgth^g < 5 or max^group^lgth^g > 11 then begin ! ! Length out of range. Log warning message and ! set global variable to default value. ! call log^message^( 3150, ! routing code !, @invld^grp^lgth, net.myname, evt_msg_severity_warn_l, @lconf^key.item^name, item^name^len^l ); max^group^lgth^g := 5; end; end; #ADD 06844k04 SEM^RESPONSE max^group^lgth^g ); #DELETE 06844k05 SEM^RESPONSE #ENDSCN = SW07217 !*CMP2.13 06/23/03 BNETG 6025 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6025 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6025 * ******************************************************************************** #SCN = SW07218 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6025 #NEWVERSION = 6026 #ADD 00025Y0E ! 19JUN2003 DOO/1693 ! Symptom: Banknet Release 03.2 Mandates. ! Problem: None. ! Fix: 1. Sourced in section ORIG^CRNCY^60^TKN from file ! BADDLTAL ! 2. Sourced in section HISWTKN_ADD_ORIG_CRNCY_60 from ! file HISWUTLE. ! 3. Deleted literal MAX^GROUP^LGTH^L ! 4. Added a new global variable MAX^GROUP^LGTH^G ! 5. Added support for DE 124 (Member-defined Data). ! Dependency: BA10SC04 subvolume. New files: BII0203M, BII0203R, ! BII0203S, ILB0203M, ILB0203R, and ILB0203S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, and SCRNBIIF and ! re-MAKE. Replace BNETLOGM, BNETMAN, and BNETUPDT. ! Reference: WO #030323-01 #ADD 00026X03 ?nolist, source =basrc_baddltal( ? acct_typ_constants ? acq_rte_tkn ? alt^merch^id^tkn ? apcf_ ? apcf_prikey ? authn^data^tkn ? cmd ? crdhldr^serial^num^tkn ? emv^discr^tkn ? emv^rqst^tkn ? emv^resp^tkn ? emv^stat^tkn ? emv^script^tkn ? evt_msg_severity_constants ? extmem_constants ? fcb ? file_format_constants ? fname_lgth_constants ? iavs^data^tkn ? icf ? icfbase ? icfebase_, ? ichg^compliance^tkn ? ilf, ? ilf_ ? init_constants ? ipcf_ ? ipcf_prikey ? key6_ ? keyf ? lconf^key ? lconf ? mrch^serial^num^tkn ? msg_cat_constants ? msg_typ_constants ? orig^crncy^60^tkn ? pan_ ? pos_dflt_chk_id_constants ? pos_msg_typ_constants ? posicf ? posicfe_ ? ps50^tkn ? ps51^tkn ? ps2000^tkn ? pt^srv^data^tkn ? proc_cde ? prfl ? pstm ? pstm_ ? purchase^tkn ? sdcb ? sdcb_ ? sec_dev_typ_constants ? seg_constants ? stf ? swi^tkn ? swiicf ? swiicfe_ ? sym_name ? track1^tkn ? trans_stain_xid_tkn ? txn_alwd_constants ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ) #DELETE 00026X04/00026X17 #ADD 00026O2J ! orig^crncy^60^tkn, #DELETE 00365 #ADD 00448G07 int max^group^lgth^g := 5; #DELETE 00448G08 #ADD 01060 124, 3, sem^field( mbr^def ), #DELETE 01061 #ADD 01366G0D int max^group^lgth^g; #DELETE 01366X00 #ADD 01366P00 ?nolist, source =basrc_hiswutle( ? hiswpin^encode^pinpad, ? hiswpin^encode^pinpan, ? hiswsec^key^translate, ? hiswsec^pin^translate, ? hiswtkn_add_orig_crncy_60 ) #DELETE 01366P01/01366P05 #ADD 01366P09 ! hiswsec^pin^translate, ! hiswtkn_add_orig_crncy_60 ) #DELETE 01366P0A #ENDSCN = SW07218 !*CMP2.13 06/27/03 BNETDDLS6013 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6013 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6013 * ******************************************************************************** #SCN = SW07224 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6013 #NEWVERSION = 6014 #ADD 00262M0D * 26JUN2003 DOO/1693 * Symptom: Field MCI-ID in the BNIIF Extended memory table is * smaller than the same field in the BNIIF definition. * Problem: The size of the field in the BNIIF definition was * increased as a result of the 03.2 mandates but the * corresponding field in the extended memory table was not * changed to match. * Fix: Increased the size of field MCI-ID in the extended * memory table to 6 bytes. * Modified sections: FIID-MCI * Dependency: Apply fix to BNETDDLS and re-MAKE. * Reference: Case #365126 #ADD 02579 FIID-MCI 02 mci-id pic x(6). #DELETE 02580 FIID-MCI #ENDSCN = SW07224 !*CMP2.13 06/27/03 BNETG 6026 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6026 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6026 * ******************************************************************************** #SCN = SW07225 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6026 #NEWVERSION = 6027 #ADD 00025Z0G ! 26JUN2003 DOO/1693 ! Symptom: CVV2 response codes are always logged to the PS50 token. ! Problem: The 6.0 token POS Data1 token also has a field meant ! specifically for these response codes. Customers should ! have the option of which token to log the responses to. ! Fix: 1. Sourced in section POS^DATA1^TKN from file BADDLTAL. ! 2. Added a new global varaible CVV2^RSLT^OPT^G. This ! variable will be set based on the value of the new LCONF ! parameter CVV2-RESULT-OPTION. ! Dependency: Apply fixes BNETG, BNETLIBS, and BNETS and re-MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #030323-06 #ADD 00026Z0c ? pos^data1^tkn #ADD 00026O2K ! pos^data1^tkn #ADD 00448Z01 int cvv2^rslt^opt^g := false; #ADD 01366Z01 int cvv2^rslt^opt^g; #ENDSCN = SW07225 !*CMP2.13 06/27/03 BNETLIBS6062 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6062 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6062 * ******************************************************************************** #SCN = SW07226 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00026<0Z ! 26JUN2003 DOO/1693 ! Symptom: 1. CVV2 response codes are always logged to the PS50 ! token. ! 2. Original Currency token added with garbage in fields ! transaction amount, conversion date, conversion rate, ! and conversion code. ! Problem: 1. The 6.0 token POS Data1 token also has a field meant ! specifically for these response codes. Customers should ! have the option of which token to log the responses to. ! 2. When the code was added by the last fix, information ! was not moved into these fields for the correct lengths. ! Fix: 1. Modified the code to use the new LCONF parameter to ! determine whether to log the CVV2 response code to the ! POS Data1 token or the PS51 token. ! 2. Modified the code to initialize the fields and move ! information into them for the correct lengths. ! Modified proc: sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes BNETG, BNETLIBS, and BNETS and re-MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #030323-06 #ADD 03135Q05 SEM^FRMT^XRESP^TO^PSTM^0210 pos^data1^tkn^lgth := 0, #ADD 03138W03 SEM^FRMT^XRESP^TO^PSTM^0210 struct .pos^data1^tkn( pos^data1^tkn^def ); #DELETE 03138W04 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208m2X SEM^FRMT^XRESP^TO^PSTM^0210 if cvv2^rslt^opt^g then begin ! ! Log the CVV2 result to the POS DATA1 Token. ! init( pos^data1^tkn, " ", wlen( pos^data1^tkn ) ); move( pos^data1^tkn.crd^vrfy^flg2, card^vrfy^flg ); if pos^data1^tkn.resp^src^rsn^cde <> [ $len( pos^data1^tkn ) * [ " " ] ] then begin movd( tkn^id, pos^data1^tkn^id^d ); pos^data1^tkn^lgth := $len( pos^data1^tkn ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, lgth, max^msg^lgth^l, tkn^id, pos^data1^tkn, pos^data1^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 3160, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3170, ! routing code !, @err^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2280 ); end; end; ! of if pos^data1^tkn. . . end ! of if cvv2^rslt^opt^g else begin ! ! Log the CVV2 result to the PS50 Token. ! tkn^lgth := 0; if sem.addl^data.info.cvc^sub^fld^87.tag = "87" and sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag = "84" then begin call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, card^vrfy^flg ); end ! of if tag = "87" and "84" else if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then begin call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, ! err^flg !, ! rte^grp !, card^vrfy^flg ); end ! of if tag = "87" else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag = "84" then begin call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, ! card^vrfy^flg ! ); end; ! of if tag = "84" end; ! of if not cvv2^rslt^opt^g #DELETE 03208m2Y/03208m3N SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03511<00 SEM^FRMT^XRQST^TO^PSTM^0200 string conv^dat[ 0:3 ] := [ 4 * [ " " ] ]; string conv^rate[ 0:7 ] := [ 8 * [ " " ] ]; string crncy^cde[ 0:2 ] := [ 3 * [ " " ] ]; string tran^amt[ 0:11 ] := [ 12 * [ " " ] ]; #DELETE 03511<01/03511<04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03629<04 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tran^amt, sem.tran^amt, $occurs( tran^amt ) ); movl( conv^rate, sem.conv^rate^crd^iss, $occurs( conv^rate ) ); movl( conv^dat, sem.conv^dat, $occurs( conv^dat ) ); movl( crncy^cde, sem.tran^crncy^cde, $occurs( crncy^cde) ); #DELETE 03629<05/03629<08 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW07226 !*CMP2.13 06/27/03 BNETS 6055 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6055 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6055 * ******************************************************************************** #SCN = SW07227 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6055 #NEWVERSION = 6056 #ADD 00026%0K ! 26JUN2003 DOO/1693 ! Symptom: CVV2 response codes are always logged to the PS50 token. ! Problem: The 6.0 token POS Data1 token also has a field meant ! specifically for these response codes. Customers should ! have the option of which token to log the responses to. ! Fix: Modified the code to provide support for a new LCONF ! parameter CVV2-RESULT-OPTION. This parameter will be ! used to determine whether to log the CVV2 response code ! to the POS Data1 token or the PS51 token. ! Modified procs: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! Dependency: Apply fixes BNETG, BNETLIBS, and BNETS and re-MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #030323-06 #ADD 02599%01 CMD^WARMBOOT^STORE^GLOBALS store^d( cvv2^rslt^opt^g ); #ADD 02599%06 CMD^WARMBOOT^STORE^GLOBALS cvv2^rslt^opt^g := false; #ADD 02599%0B CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( cvv2^rslt^opt^g ); #ADD 03945%01 INIT^PARAMPROC "P", "CVV2-RESULT-OPTION ", #ADD 03996%0S INIT^PARAMPROC ! ! CVV2-RESULT-OPTION ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin ! ! Log CVV2 result to POS DATA1 Token. ! cvv2^rslt^opt^g := true; end else begin ! ! Log CVV2 result to the PS50 Token. ! cvv2^rslt^opt^g := false; end; end; #ENDSCN = SW07227 !*CMP2.13 07/30/03 BNETLIBS6063 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6063 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6063 * ******************************************************************************** #SCN = SW07290 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00026=0M ! 29JUL2003 kke/872 ! Symptom: The postal code in the external message field, DE61, ! national POS data, contains an erroneous zero after ! spaces. ! Problem: Both the PSTM postal code field and the SEM postal ! code field can accommodate 10 characters. When a dash ! is removed from the PSTM postal code, only 9 characters ! of the SEM postal code are filled. Since this field ! is initialized to zeroes, a zero is left in the final ! position. ! Fix: Added code to initialize the SEM postal code field to ! spaces prior to filling it from the PSTM if a dash is ! to be removed. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #365844. #ADD 00707z0A PSTM^FRMT^0200^TO^XRQST mov^( sem.ntl^pos^data.postal^cde, blanks ); #ENDSCN = SW07290 !*CMP2.13 08/11/03 BNETDDLS6014 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6014 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6014 * ******************************************************************************** #SCN = SW07334 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6014 #NEWVERSION = 6015 #ADD 00262K0J * 11AUG2003 DOO/1693 * Symptom: Inconsistency in the length of field MCI-ID. * Problem: The size of the field in the BNIIF definition was * increased by one to 6 bytes as a result of the 03.2 * mandates but some corresponding fields elsewhere in this * file were not changed to match. * Fix: Increased the sizes of all fields that relate to MCI-ID * to 6 bytes. * Modified sections: PATH-RQST * TIMER-USERBUF * Dependency: Apply fixes BNETDDLS, BNETLIBS, and BNETS and re-MAKE. * Replace BNETMAN and SCRNBADM. * Reference: Case #366959, 366962, and 366629. #ADD 02395 ICF-BNET 04 dest-mci-id pic x(6). #DELETE 02396 ICF-BNET #ADD 02401 ICF-BNET 04 fill1 pic x(30). #DELETE 02402 ICF-BNET #ADD 02731 SAF-BNET 04 mci-id pic x(6). #DELETE 02732 SAF-BNET #ENDSCN = SW07334 !*CMP2.13 08/11/03 BNETLIBS6064 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6064 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6064 * ******************************************************************************** #SCN = SW07335 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00026>0H ! 11AUG2003 DOO/1693 ! Symptom: Inconsistency in the length of field MCI-ID. ! Problem: The size of the field in the BNIIF definition was ! increased by one to 6 bytes as a result of the 03.2 ! mandates but some corresponding fields elsewhere in this ! file were not changed to match. ! Fix: Increased the sizes of all fields that relate to MCI-ID ! to 6 bytes. Also modified the code so that the ! institution identifier may be configured on the LCONF ! for a maximum length of 6 bytes. ! Modified proc: util^set^logon^status ! Dependency: Apply fixes BNETDDLS, BNETLIBS, and BNETS and re-MAKE. ! Replace BNETMAN and SCRNBADM. ! Reference: Case #366959, 366962, and 366629. #ADD 09575Q00 UTIL^SET^LOGON^STATUS "GROUP \\\\\\ Logged ON as \*********** and \**************" ) #DELETE 09575Q01 UTIL^SET^LOGON^STATUS #ADD 09580Q00 UTIL^SET^LOGON^STATUS "GROUP \\\\\\ Logged OFF as \*********** and \**************" ) #DELETE 09580Q01 UTIL^SET^LOGON^STATUS #ENDSCN = SW07335 !*CMP2.13 08/11/03 BNETS 6056 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6056 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6056 * ******************************************************************************** #SCN = SW07336 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6056 #NEWVERSION = 6057 #ADD 00026&0G ! 11AUG2003 DOO/1693 ! Symptom: Inconsistency in the length of field MCI-ID. ! Problem: The size of the field in the BNIIF definition was ! increased by one to 6 bytes as a result of the 03.2 ! mandates but some corresponding fields elsewhere in this ! file were not changed to match. ! Fix: Increased the sizes of all fields that relate to MCI-ID ! to 6 bytes. Also modified the code so that the ! institution identifier may be configured on the LCONF ! for a maximum length of 6 bytes. ! Modified procs: cmd^logoff^p ! cmd^logon^g ! cmd^status^g ! cmd^status^p ! init^echotest ! init^logoff ! init^paramproc ! sem^echotest^response ! sem^logon^response^group ! sem^logon^response^prefix ! tim^out^05^nmm ! tim^out^06^xnmm ! Dependency: Apply fixes BNETDDLS, BNETLIBS, and BNETS and re-MAKE. ! Replace BNETMAN and SCRNBADM. ! Reference: Case #366959, 366962, and 366629. #ADD 01465 CMD^LOGOFF^G string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 01466 CMD^LOGOFF^G #ADD 01548 CMD^LOGOFF^P string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 01549 CMD^LOGOFF^P #ADD 01686 CMD^LOGON^G string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 01687 CMD^LOGON^G #ADD 02273 CMD^STATUS^G "Fiid \\\\, Logon Group \\\\\\, Acq \, Iss \, Cr \, Db \" ) #DELETE 02274 CMD^STATUS^G #ADD 02345R00 CMD^STATUS^P "Fiid \\\\, Group \\\\\\, Logon Prefix \**********, Acq \, " ',' "Iss \, Cr \, Db \" ) #DELETE 02345R01/02345R02 CMD^STATUS^P #ADD 03166 INIT^ECHOTEST string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 03167 INIT^ECHOTEST #ADD 03636R03 INIT^LOGOFF wlform( status1, "Group \\\\\\ LOGGED OFF as \\\\\\\\" ) #DELETE 03639 INIT^LOGOFF #ADD 03639R01 INIT^LOGOFF "Group \\\\\\, Prefix \*********** LOGGED OFF as \\\\\\\\" ) #DELETE 03639R02 INIT^LOGOFF #ADD 03996%0A INIT^PARAMPROC max^group^lgth^g > 6 then #DELETE 03996%0B INIT^PARAMPROC #ADD 05959T16 SEM^ECHOTEST^RESPONSE .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 05959T17 SEM^ECHOTEST^RESPONSE #ADD 06207 SEM^LOGON^RESPONSE^GROUP wlform( logong, "GROUP \\\\\\ LOGGED ON as \\\\\\\\" ) #DELETE 06208 SEM^LOGON^RESPONSE^GROUP #ADD 06215K02 SEM^LOGON^RESPONSE^GROUP string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 06216 SEM^LOGON^RESPONSE^GROUP #ADD 06302R01 SEM^LOGON^RESPONSE^PREFIX "Group \\\\\\, Prefix \\\\\\\\\\\ LOGGED ON as \\\\\\\\" ) #DELETE 06302R02 SEM^LOGON^RESPONSE^PREFIX #ADD 06312 SEM^LOGON^RESPONSE^PREFIX string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 06313 SEM^LOGON^RESPONSE^PREFIX #ADD 08162d02 TIM^OUT^05^NMM "GROUP \\\\\\ \*********** Logon as \**************" ',' " timed out " ) #DELETE 08162d03/08162d04 TIM^OUT^05^NMM #ADD 08162d0A TIM^OUT^05^NMM "GROUP \\\\\\ \*********** Logoff as \************** " ',' "timed out" ) #DELETE 08162d0B/08162d0C TIM^OUT^05^NMM #ADD 08214 TIM^OUT^06^XNMM string .group[ 0:5 ] := [ 6 * [" "] ], #DELETE 08215 TIM^OUT^06^XNMM #ENDSCN = SW07336 !*CMP2.13 08/20/03 BNETLIBS6065 FIX SW60BNET **; \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6065 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6065 * ******************************************************************************** #SCN = SW07354 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00026|0F ! 20AUG2003 DOO/1693 ! Symptom: Station(s) status does not change when LOGON commands ! are issued. ! Problem: The interface only supports a 5-byte MasterCard ! Institution ID (MCI^ID) while the 03.2 mandates added ! support for 6-byte MCI^IDs. As a result, when the ! interface formats DE 127 (Private Data) in the outbound ! NMM request message, the prefix from the BNIIF table ! overwrites the last byte of a 6-byte MCI^ID. ! Fix: Modified the code to enable support for variable length ! MCI^ID when formatting DE 127. ! Modified proc: sem^frmt^nmm^request ! Dependency: Apply fixes BNETLIBS and BNETS and re-MAKE. ! Reference: Case #367173 #ADD 02447<06 SEM^FRMT^NMM^REQUEST movl ( sem.private^data.info.byte[ 2 + max^group^lgth^g ], prefix, max^prefix^lgth^l ); #DELETE 02447N04/02447N05 SEM^FRMT^NMM^REQUEST #ENDSCN = SW07354 !*CMP2.13 08/20/03 BNETS 6057 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6057 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6057 * ******************************************************************************** #SCN = SW07355 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6057 #NEWVERSION = 6058 #ADD 00026*0Q ! 20AUG2003 DOO/1693 ! Symptom: Station(s) status does not change when LOGON commands ! are issued. ! Problem: When a LOGON response (0810) is received from the ! interchange the relative NMM LOGON timers cannot be ! found because the MasterCard Institution Id (MCI^ID) in ! USERBUF does not match the one that was used to set the ! timer when the request was sent. ! Fix: 1. Modified the code to use the global variable ! MAX^GROUP^LGTH^G to determine the amount of data to move ! into field MCI^ID within USERBUF. ! 2. Deleted messages that are never logged by this ! module. ! Modified procs: init^echotest ! init^logoff ! init^logon ! sem^echotest^response ! sem^logoff^response^group ! sem^logoff^response^prefix ! sem^logon^response^group ! sem^logon^response^prefix ! sem^logon^response^saf ! Dependency: Apply fixes BNETLIBS and BNETS and re-MAKE. ! Reference: Case #367173 #ADD 03179R02 SUB^INIT^ECHOTEST movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03179R03 SUB^INIT^ECHOTEST #ADD 03206 SUB^INIT^ECHOTEST movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03207 SUB^INIT^ECHOTEST #DELETE 03636*01 INIT^LOGOFF #DELETE 03639R01/03639*03 INIT^LOGOFF #ADD 03694 SUB^INIT^LOGOFF movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03695 SUB^INIT^LOGOFF #ADD 03706R01 SUB^INIT^LOGOFF movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03706R02 SUB^INIT^LOGOFF #ADD 03800T03 SUB^INIT^LOGON movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03800T04 SUB^INIT^LOGON #ADD 03848Y00 SUB^INIT^LOGON movl( userbuf.nmm.mci^id, group, max^group^lgth^g ); #DELETE 03848Y01 SUB^INIT^LOGON #ADD 05959T1A SEM^ECHOTEST^RESPONSE movl( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); mov^( userbuf.nmm.prefix, sem.private^data.info.byte[ 2 + max^group^lgth^g ] ); #DELETE 05959T1B/05959T1C SEM^ECHOTEST^RESPONSE #ADD 06130 SEM^LOGOFF^RESPONSE^GROUP movl ( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); mov^ ( userbuf.nmm.prefix, sem.private^data.info.byte[ 2 + max^group^lgth^g ] ); #DELETE 06131 /06132 SEM^LOGOFF^RESPONSE^GROUP #ADD 06171 SEM^LOGOFF^RESPONSE^PREFIX movl( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); mov^( userbuf.nmm.prefix, sem.private^data.info.byte[ 2 + max^group^lgth^g ] ); #DELETE 06172 /06173 SEM^LOGOFF^RESPONSE^PREFIX #DELETE 06207*01 SEM^LOGON^RESPONSE^GROUP #ADD 06219T02 SEM^LOGON^RESPONSE^GROUP movl ( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); mov^ ( userbuf.nmm.prefix, sem.private^data.info.byte[ 2 + max^group^lgth^g ] ); #DELETE 06220 /06221 SEM^LOGON^RESPONSE^GROUP #DELETE 06302R01/06302*01 SEM^LOGON^RESPONSE^PREFIX #ADD 06316T02 SEM^LOGON^RESPONSE^PREFIX movl( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); mov^( userbuf.nmm.prefix, sem.private^data.info.byte[ 2 + max^group^lgth^g ] ); #DELETE 06317 /06318 SEM^LOGON^RESPONSE^PREFIX #ADD 06402T02 SEM^LOGON^RESPONSE^SAF movl ( userbuf.nmm.mci^id, sem.private^data.info.byte[ 2 ], max^group^lgth^g ); #DELETE 06403 SEM^LOGON^RESPONSE^SAF #ENDSCN = SW07355 !*CMP2.13 08/28/03 BNETDDLS6015 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6015 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6015 * ******************************************************************************** #SCN = SW07372 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6015 #NEWVERSION = 6016 #ADD 00262O0E * 28AUG2003 DOO/1693 * Symptom: Banknet Release 03.2 Mandates. * Problem: The size of the field in the BNIIF definition was * increased by one to 6 bytes as a result of the 03.2 * mandates but some corresponding fields elsewhere in this * file were not changed to match. * Fix: Increased the sizes of all fields that relate to MCI-ID/ * Customer ID to 6 bytes. * Modified sections: BNRLF * FRQST * PATH-RQST * Dependency: Apply fix BNETDDLS and re-MAKE. Replace BNETMAN and * SCRNBRLF. * Reference: Case #367529 #ADD 00657 FRQST 06 cust-id pic x(6). #DELETE 00658 FRQST #ADD 00680 FRQST 06 filler3 pic x(901). #DELETE 00681 FRQST #ADD 02453 ICF-BNET 06 cust-id pic x(6). #DELETE 02454 ICF-BNET #ADD 02476 ICF-BNET 06 fill3 pic x(26). #DELETE 02477 ICF-BNET #ADD 02530 BNRLF 04 cust-id pic x(6). #DELETE 02531 BNRLF #ADD 02566 BNRLF 04 filler1 pic x(19). #DELETE 02567 BNRLF #ENDSCN = SW07372 !*CMP2.13 09/02/03 BNETLIBS6066 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6066 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6066 * ******************************************************************************** #SCN = SW07376 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00026@0F ! 02SEP2003 DLH/158 ! Symptom: The interface is not processing Scrip Issue ! transactions. ! Problem: Scrip issue transactions are not supported within the ! interface. ! Fix: Modified the code to support Scrip Issue transactions. ! Scrip Issue transactions will be identified as purchase ! transactions coming from a Script terminal for acquirer ! transactions. The processing code will be used to ! identify issuer Scrip Issue transactions. ! Modified procs: sem^frmt^proc^cde^to^pstm^tran ! pstm^frmt^tran^to^sem^proc^cde ! Dependency: Apply fixes BNETLIBS and re-MAKE. ! Reference: Case #366453 #ADD 01627 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE ! ! Set transaction code for script terminals. ! if pstm.term^typ = "D8" and ! Script Terminal ! sem.proc^cde = sem^purchase^d then begin movd( sem.proc^cde, "18" ); end; #REPLACE 02618o01 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN literal b24^pos^number^tran^types^l = 13, #ADD 02630 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN "18", "10", ! normal purchase #ENDSCN = SW07376 !*CMP2.13 09/08/03 BNETLIBS6067 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6067 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6067 * ******************************************************************************** #SCN = SW07384 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00026\0F ! 08SEP2003 DOO/1693 ! Symptom: DE 2 (PAN) contains a 6-digit Customer ID in group ! sign-on/off functions when the customer is using a ! 6-digit MCI-ID. ! Problem: MasterCard requires that this DE bear a 5-digit Customer ! ID for all group sign-on/off functions regardless of the ! length of the MCI-ID. ! Fix: Modified the code to set DE 2 to the 5-digit Customer ID ! in all group sign-on/off functions. ! Modified proc: sem^frmt^nmm^request ! Dependency: Apply fixes BNETLIBS and run MAKE. ! Reference: Case #367173 #ADD 02469<00 SEM^FRMT^NMM^REQUEST call integer^ascii^( sem.pan.lgth, 5 ); ! ! If the MCI ID is more than 5 bytes long, set the PAN to the ! last five digits of the identifier. ! if max^group^lgth^g = 5 then begin movl( sem.pan.num, group, max^group^lgth^g ); end else begin movl( sem.pan.num, group[ 1 ], 5 ); end; #DELETE 02469<01/02469<02 SEM^FRMT^NMM^REQUEST #ENDSCN = SW07384 !*CMP2.13 09/11/03 BNETS 6058 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6058 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6058 * ******************************************************************************** #SCN = SW07404 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6058 #NEWVERSION = 6059 #ADD 00026+0P ! 11SEP2003 RAF/100 ! Symptom: Log message #2860 is not properly displaying the MCI-ID ! upon a time out of a Logon SAF Network Management ! Message. ! Problem: The log message is only displaying 5 digits of the ! MCI-ID. The MCI-ID could contain up to 6 digits. ! Fix: Modified the WLFORM for log message #2860 to display ! 6 digits of the MCI-ID. ! Modified procs: tim^out^05^nmm. ! Dependency: Apply fixes BNETS and re-MAKE. ! Reference: Case #368302 #REPLACE 08162d09 TIM^OUT^05^NMM "SAF \\\\\\ \*********** Logon as \************** timed out" ) #ENDSCN = SW07404 !*CMP2.13 10/09/03 BNETLIBS6068 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6068 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6068 * ******************************************************************************** #SCN = SW07436 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00026]0D ! 09OCT2003 DOO/1693 ! Symptom: DE 48 (Additional Data) is not being returned in AVS ! response messages. ! Problem: The bit is inadvertently turned off when the response is ! being formatted. ! Fix: Modified the code to ensure that the bit remains on when ! AVS is performed. ! Modified proc: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes BNETLIBS and run MAKE. ! Reference: Case #369373 #DELETE 00802K01 PSTM^FRMT^0210^TO^XRESP #ADD 00802Q0P PSTM^FRMT^0210^TO^XRESP send^addl^data := true; #DELETE 00802Q0Q PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW07436 !*CMP2.13 11/04/03 BNETLIBS6069 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6069 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6069 * ******************************************************************************** #SCN = SW07457 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00026^0B ! 22OCT2003 kke/872 ! Symptom: SEM 0302 file request messages were being rejected by ! MasterCard ! Problem: The purge date in the file request message was being ! sent for 1 too few characters. The length of data was ! hardcoded and this hardcoding was not changed when the ! customer id field was enlarged. ! If the prefix of the PAN affected was not found in the ! BNIIF file, the forwarding institution id code length ! (P-33) was replaced with part of the pct.inst. ! Fix: Added code to use the lengths of fields instead of ! using hardcoded numbers. ! Replaced the field justification on pct.inst with a ! move statement. ! Procs modified: path^frmt^file^rqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #370045. #REPLACE 00366Q0C/00367Q00 PATH^FRMT^FILE^RQST if not util^get^bniif( prefix^l, ! fiid !, sem.fwd^inst.cde, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, ! security !, pan ) then begin movl( sem.fwd^inst.cde, pct.inst, max^group^lgth^g ); end; #ADD 00396Q0J PATH^FRMT^FILE^RQST lgth := $offset( sem.file^rec.mcc103.reg^ind^purg^dat2 ) - $offset( sem.file^rec.mcc103 ); #DELETE 00396Q0K PATH^FRMT^FILE^RQST #ADD 00396Q0P PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc103.reg^ind^purg^dat2 ); #DELETE 00396Q0Q PATH^FRMT^FILE^RQST #REPLACE 00396Q0X/00396Q0Y PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc103.reg^ind^purg^dat3 ); #REPLACE 00396Q15/00396Q16 PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc103.reg^ind^purg^dat4 ); #ADD 00396Q1C PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc103.reg^ind^purg^dat5 ); #DELETE 00396Q1D PATH^FRMT^FILE^RQST #ADD 00396Q1J PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc103.reg^ind^purg^dat6 ); #DELETE 00396Q1K PATH^FRMT^FILE^RQST #ENDSCN = SW07457 !*CMP2.13 11/11/03 BNETLIBS6070 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6070 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6070 * ******************************************************************************** #SCN = SW07477 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00026`0I ! 05NOV2003 kke/872 ! Symptom: Bit 48 is not being returned in a SEM 0110 response for ! AVS transactions. ! Problem: Bit 48 is turned off and although a variable was set to ! indicate something in bit 48 changed, the bit was not ! always getting turned back on. ! Fix: Changed code to set the bit on and then it will only ! be turned off if nothing in bit 48 changed. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #369140. #REPLACE 00768u03/00768u04 PSTM^FRMT^0210^TO^XRESP ! data is present. Turn it on here. It will be turned off below ! ! if no changes have been made to bit 48. ! #REPLACE 00768u06 PSTM^FRMT^0210^TO^XRESP addl^data^bit^d := 1; #ENDSCN = SW07477 !*CMP2.13 11/24/03 BNETS 6059 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6059 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6059 * ******************************************************************************** #SCN = SW08035 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6059 #NEWVERSION = 6060 #ADD 00026-0C ! 24NOV2003 frederr ! Symptom: 0810 response messages to MasterCard contain field 94, ! Service Indicator, and field 96, Message Security Code. ! Neither should be sent in an 0810 message. ! Problem: The interface is simply adding field 39 to the fields ! sent in the 0800 request message. Fields 94 and 96 ! should be turned off in the response. ! Fix: Modified the interface to not send field 94 or field 96 ! in an 0810 response to MasterCard. ! Modified procs: sem^key^chng^rqst ! sem^nmm^request ! Dependency: Apply fixes BNETS and re-MAKE. ! Reference: Case #371590 #ADD 06101k1U SEM^KEY^CHNG^RQST service^ind^bit^d := 0; security^cde^bit^d := 0; #ADD 06466 SEM^NMM^REQUEST service^ind^bit^d := 0; security^cde^bit^d := 0; #ENDSCN = SW08035 !*CMP2.13 12/02/03 BNETLIBS6071 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6071 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6071 * ******************************************************************************** #SCN = SW08046 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00026~0C ! 01DEC2003 engelk ! Symptom: Acquired Mail/Phone order transactions did not have ! bit 61, point of service data, formatted correctly. ! Problem: Bit 61 positions 1, 4, and 11 should be set to ! indicate that no terminal was used for mail/phone ! order transactions. These positions are POS ! Terminal Attendance, POS Cardholder Presence, and ! POS Card Data Terminal Input Capability, respectively. ! Fix: Added code to set the following positions within bit ! 61 for mail/phone order transactions: ! 1) position 1, POS Terminal Attendance, to "2", ! no terminal (voice/ARU authorization). ! 2) position 4, POS Cardholder Presence, to "3", ! cardholder not present; telephone/ARU order. ! 3) position 11, POS Card Data Terminal Input ! Capability, to "1", no terminal used (voice/ ! ARU authorization). ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #371608 #REPLACE 00659;0E/00659;0I PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "1" ); end; #REPLACE 00659X1E PSTM^FRMT^0200^TO^XRQST pstm.pt^srv^cond^cde = "07" then #DELETE 00659X1F PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW08046 !*CMP2.13 12/08/03 BNETLIBS6072 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6072 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6072 * ******************************************************************************** #SCN = SW08055 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00026(0L ! 04DEC2003 frederr ! Symptom: Transactions from MasterCard that contain bad Track 1 ! data are still being forwarded to auth for approval. ! Problem: If a transaction comes in with bad Track 1 data, the ! interface is using field 2, PAN, to populate the ! internal Track 2 field. The standard is to deny this ! transaction due to bad Track 1 data. ! Fix: Modified the interface to deny any request from ! MasterCard with bad Track 1 data with a response code ! '30', format error. ! Procs modified: sem^frmt^data^to^pstm^track2 ! sem^frmt^xrqst^to^pstm^0200. ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #371810 #ADD 02257 SUB^CONVERT^AMT !# RETURN: # !# Returns True if no errors. # !# Returns False for any error condition. # !# # #REPLACE 02258X01/02258X02 SEM^FRMT^DATA^TO^PSTM^TRACK2 int proc sem^frmt^data^to^pstm^track2( sem, pstm, track1, track1^lgth ); #REPLACE 02298X01 SEM^FRMT^DATA^TO^PSTM^TRACK2 if track1^bit^d then #DELETE 02298b01 SEM^FRMT^DATA^TO^PSTM^TRACK2 #DELETE 02298b02 SEM^FRMT^DATA^TO^PSTM^TRACK2 #DELETE 02298b03 SEM^FRMT^DATA^TO^PSTM^TRACK2 #DELETE 02298b04 SEM^FRMT^DATA^TO^PSTM^TRACK2 #DELETE 02298b05 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ADD 02298X05 SEM^FRMT^DATA^TO^PSTM^TRACK2 if extract^track1^info( s^trk1, track1^lgth, pstm.tran.track2.byte[1], pan^lgth, !cardholder name!, !cardholder name length!, exp^dat ) then begin return false; end; #ADD 02320 SEM^FRMT^DATA^TO^PSTM^TRACK2 return true; #REPLACE 03563X01/03564X01 SEM^FRMT^XRQST^TO^PSTM^0200 if not sem^frmt^data^to^pstm^track2( sem, pstm, track1^tkn, track1^tkn^lgth) then begin return resp^format^error^sem^l; end; #ENDSCN = SW08055 !*CMP2.13 12/09/03 BNETS 6060 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6060 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6060 * ******************************************************************************** #SCN = SW08069 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6060 #NEWVERSION = 6061 #ADD 00026:0E ! 08DEC2003 engelk ! Symptom: Logon status messages were not displaying status ! information correctly. ! Problem: When the mci^id field was expanded from 5 characters ! to 6, the field used in the status messages was not ! increased in length. The mci^id would overwrite other ! status data used in the status messages. ! Fix: Modified the logon status routines to have logical ! names for the status information displayed. Increased ! the size of the mci^id field and decreased the size of ! others which used just one character, but were defined ! longer. ! Procs modified: cmd^status^g ! cmd^status^p ! Dependency: Apply fix to BNETS and run MAKE. Replace BNETLOGM. ! Reference: Case #372225 #REPLACE 02279 /02285 CMD^STATUS^G string .fiid[ 0:3 ] := [ 4 * [" "] ]; string logonacq := [ 1 * [" "] ]; string logondb := [ 1 * [" "] ]; string logoncr := [ 1 * [" "] ]; string logoniss := [ 1 * [" "] ]; string .mci^id[ 0:5 ] := [ 6 * [" "] ]; #REPLACE 02292 /02293 CMD^STATUS^G if bniif^tbl.logon^acq then movd( logonacq, "Y" ) #REPLACE 02295 CMD^STATUS^G movd( logonacq, "N" ); #REPLACE 02297 /02298 CMD^STATUS^G if bniif^tbl.logon^iss then movd( logoniss, "Y" ) #REPLACE 02300 CMD^STATUS^G movd( logoniss, "N" ); #REPLACE 02302 /02303 CMD^STATUS^G if bniif^tbl.logon^cr then movd( logoncr, "Y" ) #REPLACE 02305 CMD^STATUS^G movd( logoncr, "N" ); #REPLACE 02307 /02308 CMD^STATUS^G if bniif^tbl.logon^db then movd( logondb, "Y" ) #REPLACE 02310 CMD^STATUS^G movd( logondb, "N" ); #REPLACE 02312 /02316 CMD^STATUS^G mov^( fiid, bniif^tbl.fiid ); mov^( mci^id, bniif^tbl.mci^id ); call log^message^( 0880, !routing code!, @group, net.myname, 0, @fiid, @mci^id, @logonacq, @logoniss, @logoncr, @logondb ); #REPLACE 02352 /02358 CMD^STATUS^P string .fiid[ 0:3 ] := [ 4 * [" "] ]; string logonacq := [ 1 * [" "] ]; string logoncr := [ 1 * [" "] ]; string logondb := [ 1 * [" "] ]; string logoniss := [ 1 * [" "] ]; string .mci^id[ 0:5 ] := [ 6 * [" "] ]; string .prfx[ 0:11 ] := [ 12 * [" "] ]; #REPLACE 02367 /02368 CMD^STATUS^P if bniif^tbl.prefix[ j ].logon^acq then movd ( logonacq, "Y" ) #REPLACE 02370 CMD^STATUS^P movd ( logonacq, "N" ); #REPLACE 02372 /02373 CMD^STATUS^P if bniif^tbl.prefix[ j ].logon^iss then movd ( logoniss, "Y" ) #REPLACE 02375 CMD^STATUS^P movd ( logoniss, "N" ); #REPLACE 02377 /02378 CMD^STATUS^P if bniif^tbl.prefix[ j ].logon^cr then movd ( logoncr, "Y" ) #REPLACE 02380 CMD^STATUS^P movd ( logoncr, "N" ); #REPLACE 02382 /02383 CMD^STATUS^P if bniif^tbl.prefix[ j ].logon^db then movd ( logondb, "Y" ) #REPLACE 02385 CMD^STATUS^P movd ( logondb, "N" ); #REPLACE 02387 /02394 CMD^STATUS^P mov^( fiid, bniif^tbl.fiid ); mov^( mci^id, bniif^tbl.mci^id ); movl( prfx, nulls, $occurs( prfx ) ); movl( prfx, bniif^tbl.prefix[ j ].num, bniif^tbl.prefix[ j ].lgth ); call log^message^( 0890, !routing code!, @prefix, net.myname, 0, @fiid, @mci^id, @prfx, @logonacq, @logoniss, @logoncr, @logondb ); #ENDSCN = SW08069 !*CMP2.13 01/09/04 BNETLIBS6073 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6073 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6073 * ******************************************************************************** #SCN = SW08105 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00026)0E ! 09JAN2004 frederr ! Symptom: File Update Request Messages (message type = 0302) are ! being sent with an invalid customer id (field 120). ! Problem: The interface is right justifying zero filling field ! 120 when formatting the 0302 messages. It should be ! using the max-group-lgth field to determine the ! number of bytes to send in field 120. ! Fix: Modified the interface to use the max-group-lgth field ! when populating field 120 on 0302 messages. ! Procs modified: path^frmt^file^rqst. ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #373348 #ADD 00396Q03 PATH^FRMT^FILE^RQST movl ( sem.file^rec.mcc103.cust^id, path.frqst.mcc103.cust^id, max^group^lgth^g ); #DELETE 00396Q04/00396Q0A PATH^FRMT^FILE^RQST #ENDSCN = SW08105 !*CMP2.13 01/29/04 BNETS 6061 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6061 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6061 * ******************************************************************************** #SCN = SW08131 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6061 #NEWVERSION = 6062 #ADD 00026;0H ! 28JAN2004 engelk ! Symptom: Echotests were not being sent by the interface. ! Problem: Code was added to the WFT timeout proc to ensure that ! the interface was logged on prior to initiating an ! echotest. However, the BNIIF segment was not active ! when the check was made, so the interface always ! assumed it was not logged on and sent no echotests. ! Fix: Moved the usesegment to release the BNIIF extended ! memory segment after the logon test. ! Procs modified: tim^out^07^wft ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #374391. #DELETE 08265x04 TIM^OUT^07^WFT #ADD 08272 TIM^OUT^07^WFT begin set ( pct.station[ userbuf.sta^x ].traffic, false ); end; call usesegment( seg^id ); #DELETE 08273 TIM^OUT^07^WFT #REPLACE 08274 TIM^OUT^07^WFT end; ! of tim^out^07^wft ! #ENDSCN = SW08131 !*CMP2.13 02/06/04 BNETDDLS6016 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6016 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETDDLS BNETDDLS 6016 * ******************************************************************************** #SCN = SW08154 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6016 #NEWVERSION = 6017 #ADD 00262P0E * 08JAN2004 HUAC * Symptom: Banknet Release 04.1 Mandates * Problem: None. * Fix: Removed the redefine of issuer application data of * data element 55. Modified some of the definition * comments for byte 11 of data element 61. * Dependency: Apply fix to BNETLIBS, BNETG, BNETEMVS and BNETDDLS and * run MAKE. * Reference: WO #031104-04. #DELETE 01225G22/01225G2H SEM #REPLACE 01236B22/01236B23 SEM * 3 = contactless M/Chip * 4 = contactless Magnetic Stripe #ENDSCN = SW08154 !*CMP2.13 02/06/04 BNETG 6027 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6027 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6027 * ******************************************************************************** #SCN = SW08155 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6027 #NEWVERSION = 6028 #ADD 00025a0C ! 08JAN2004 HUAC ! Symptom: Banknet Release 04.1 Mandates ! Problem: None. ! Fix: Added new defines for Card Data Terminal Input ! Capability Indicator and POS Entry Mode. ! Dependency: Apply fix to BNETLIBS, BNETG, BNETEMVS and BNETDDLS and ! run MAKE. ! Reference: WO #031104-04. #ADD 01366O0H define pos^unkn = "00"#, manual^entry = "01"#, mag^stripe^read = "02"#, bar^code^read = "03"#, ocr^code^read = "04"#, chip^read = "05"#, pan^auto^cntctlss^m^chip = "07"#, bad^mag^and^chip = "79"#, full^mag^stripe = "80"#, elec^commerce = "81"#, pan^auto^entry^via^mag^stripe = "90"#, pan^auto^cntctlss^mag^stripe = "91"#, chip^crd^unreliable^cvv = "95"#; #DELETE 01366O0I/01366O0R #ADD 01366O0X chip^card = "1"#, mag^stripe^rdr = "2"#, cntctlss^m^chip = "3"#, cntctlss^mag^stripe = "4"#, mag^stripe^chip^rdr = "5"#, radio^freq^dev^cntctlss = "7"#, emv^compatible^icc^rdr = "9"#; #DELETE 01366O0Y #ENDSCN = SW08155 !*CMP2.13 02/06/04 BNETLIBS6074 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6074 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6074 * ******************************************************************************** #SCN = SW08156 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00026{0C ! 08JAN2004 HUAC ! Symptom: Banknet Release 04.1 Mandates ! Problem: None. ! Fix: Added Proximity Chip Payments support. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS, BNETG, BNETEMVS and BNETDDLS and ! run MAKE. ! Reference: WO #031104-04. #ADD 00659X0P PSTM^FRMT^0200^TO^XRQST if pos^data^get^tkn.crdhldr^actvt^term^ind = radio^freq^dev^cntctlss and pos^data^get^tkn.term^input^cap^ind = mag^stripe^rdr then begin movd ( sem.pos^entry^mde, pan^auto^cntctlss^mag^stripe ); movd ( sem.ntl^pos^data.cond^cde.byte[ 10 ], cntctlss^mag^stripe ); end else if pos^data^get^tkn.crdhldr^actvt^term^ind = radio^freq^dev^cntctlss and pos^data^get^tkn.term^input^cap^ind = emv^compatible^icc^rdr then begin movd ( sem.pos^entry^mde, pan^auto^cntctlss^m^chip ); movd ( sem.ntl^pos^data.cond^cde.byte[ 10 ], cntctlss^m^chip ); end else begin move ( sem.ntl^pos^data.cond^cde.byte[ 10 ], pos^data^get^tkn.term^input^cap^ind ); end; #DELETE 00659X0Q/00659X0R PSTM^FRMT^0200^TO^XRQST #ADD 02519l0Z SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = full^mag^stripe or sem.pos^entry^mde = pan^auto^entry^via^mag^stripe or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe then begin movd( pstm.pt^srv^entry^mde, mag^stripe^read ); end else if sem.pos^entry^mde = pan^auto^cntctlss^m^chip then begin movd( pstm.pt^srv^entry^mde, chip^read ); end else begin move( pstm.pt^srv^entry^mde, sem.pos^entry^mde ); end; #DELETE 02519l10/02519l19 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 03542o06 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = chip^read or sem.pos^entry^mde = chip^crd^unreliable^cvv or sem.pos^entry^mde = pan^auto^cntctlss^m^chip ) and crd^seq^num^bit^d then #DELETE 03542o07 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542o08 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542o09 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542o0A SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542o0B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03594X0O SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 10 ] = cntctlss^m^chip and sem.pos^entry^mde = pan^auto^cntctlss^m^chip then begin set( pos^data^tkn.crdhldr^actvt^term^ind, radio^freq^dev^cntctlss ); set( pos^data^tkn.term^input^cap^ind, emv^compatible^icc^rdr ); end else if sem.ntl^pos^data.cond^cde.byte[ 10 ] = cntctlss^mag^stripe and sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe then begin set( pos^data^tkn.crdhldr^actvt^term^ind, radio^freq^dev^cntctlss ); set( pos^data^tkn.term^input^cap^ind, mag^stripe^rdr ); end else begin move( pos^data^tkn.term^input^cap^ind, sem.ntl^pos^data.cond^cde.byte[ 10 ] ); end; #DELETE 03594X0P/03594X0Q SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW08156 !*CMP2.13 02/26/04 BNETS 6062 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6062 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6062 * ******************************************************************************** #SCN = SW08199 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00026<0D ! 23FEB2004 engelk ! Symptom: Operators were not informed if group logon/logoffs ! were not sent after they issued a LOGONG/LOGOFFG ! command containing a specific group. ! Problem: No check was done on the length of the group specified ! when a LOGONG/LOGOFFG command was parsed. The group ! specified in the LOGONG/LOGOFFG command is compared ! directly against the MCI IDs specified in the BNIIF. ! No match can occur if these are different lengths. ! No check was done to ensure groups specified in ! LOGONG/LOGOFFG commands corresponded to MCI IDs in ! the BNIIF. ! Fix: Added a check on the length of the group specified in ! the LOGONG/LOGOFFG command. If it is not the same as ! the MAX-GROUP-LGTH LCONF param (or its default), an ! error message will be displayed so the operator can ! retry with a correct command. Added a check to ! identify groups specified in LOGONG/LOGOFFG commands ! which do not match MCI IDs in the BNIIF. ! Procs modified: cmd^logon^g ! cmd^logoff^g ! Dependency: Apply fix to BNETS. Run MAKE. Replace BNETLOGM and ! BNETMAN. ! Reference: Case #374259. #REPLACE 01454 CMD^LOGOFF^G "No Group \\\\\\ Logoff sent. Group must contain # digits." ) #ADD 01456 CMD^LOGOFF^G wlform( nosent, "No Group \\\\\\ Logoff sent. No BNIIF MCI ID match found." ) #REPLACE 01464R03/01464R04 CMD^LOGOFF^G match^found := false, seg^id; #ADD 01481 CMD^LOGOFF^G if group^lgth > 0 and group^lgth <> max^group^lgth^g then begin call log^message^( 0505, !routing code!, @error1, net.myname, evt_msg_severity_err_l, @group, max^group^lgth^g ); return; end; ! bad group length specified in command #ADD 01489 CMD^LOGOFF^G match^found := true; #ADD 01512R01 CMD^LOGOFF^G if not match^found and group^lgth > 0 then begin call log^message^( 0507, !routing code!, @nosent, net.myname, evt_msg_severity_err_l, @group ); #REPLACE 01512R02 CMD^LOGOFF^G end; #REPLACE 01674 CMD^LOGON^G "No Group \\\\\\ Logon sent. Group must contain # digits." ) #REPLACE 01677R00/01677R01 CMD^LOGON^G wlform( nosent, "No Group \\\\\\ Logon sent. No BNIIF MCI ID match found." ) #REPLACE 01685T00 CMD^LOGON^G match^found := false, #ADD 01710 CMD^LOGON^G if group^lgth > 0 and group^lgth <> max^group^lgth^g then begin call log^message^( 0562, !routing code!, @error1, net.myname, evt_msg_severity_err_l, @group, max^group^lgth^g ); return; end; ! bad group length specified in command #ADD 01719 CMD^LOGON^G match^found := true; #ADD 01754R01 CMD^LOGON^G if not match^found and group^lgth > 0 then begin call log^message^( 0565, !routing code!, @nosent, net.myname, evt_msg_severity_err_l, @group ); #REPLACE 01754R02 CMD^LOGON^G end; #ENDSCN = SW08199 !*CMP2.13 02/26/04 BNETG 6028 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETG BNETG 6028 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETG BNETG 6028 * ******************************************************************************** #SCN = SW08202 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6028 #NEWVERSION = 6029 #ADD 00025b09 ! 24FEB2004 engelk ! Symptom: If MasterCard sent both PAN and Track data, and they ! were different, the interface sent the transaction to ! auth for processing instead of denying it. This was ! found during certification testing. ! Problem: The interface was not comparing the values in the PAN ! and Track data when they are both sent in a message ! from MasterCard. ! Fix: Modified the interface to data check the PAN against ! Track data when both fields are sent in a message from ! MasterCard. Added the literal, ! resp^do^not^honor^sem^l, so that the response code 05 ! may be returned to MasterCard in this instance. ! Dependency: Apply fixes to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #375189 #REPLACE 00270I02 resp^do^not^honor^sem^l = 05, #ENDSCN = SW08202 !*CMP2.13 02/26/04 BNETLIBS6075 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6075 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6075 * ******************************************************************************** #SCN = SW08203 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00026}0A ! 24FEB2004 engelk ! Symptom: If MasterCard sent both PAN and Track data, and they ! were different, the interface sent the transaction to ! auth for processing instead of denying it. This was ! found during certification testing. ! Problem: The interface was not comparing the values in the PAN ! and Track data when they are both sent in a message ! from MasterCard. ! Fix: Modified the interface to data check the PAN against ! Track data when both fields are sent in a message from ! MasterCard. ! Procs modified: sem^frmt^data^to^pstm^track2 ! sem^frmt^xrqst^to^pstm^0200. ! Dependency: Apply fixes to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #375189 #REPLACE 02257)02/02257)03 SUB^CONVERT^AMT !# 00 if formatting is successful or #! !# a SEM response code indicating why formatting failed #! #ADD 02286 SEM^FRMT^DATA^TO^PSTM^TRACK2 ! ! If the PAN bit (field 2) is on and does not equal the ! Track 2's PAN in length or content, then deny the ! transaction with a "do not honor" response code (05). ! if pan^bit^d then begin call ascii^integer^( sem.pan.lgth, lgth ); if lgth <> ( i - 1 ) or sem.track2.val <> sem.pan.num for lgth then begin return resp^do^not^honor^sem^l; end; end; #REPLACE 02298)0K SEM^FRMT^DATA^TO^PSTM^TRACK2 return resp^format^error^sem^l; #ADD 02298)0M SEM^FRMT^DATA^TO^PSTM^TRACK2 ! ! If the PAN bit (field 2) is on and does not equal the ! Track 1's PAN in length or content, then deny the ! transaction with a "do not honor" response code (05). ! if pan^bit^d then begin call ascii^integer^( sem.pan.lgth, lgth ); if lgth <> pan^lgth or pstm.tran.track2.byte[1] <> sem.pan.num for lgth then begin return resp^do^not^honor^sem^l; end; end; #REPLACE 02320)01 SEM^FRMT^DATA^TO^PSTM^TRACK2 return resp^no^error^sem^l; #REPLACE 03416k0A/03416k0C SEM^FRMT^XRESP^TO^SEM^XRVSL !# INPUT PARAMETERS: #! !# SEM - Pointer to a Banknet external request. #! !# STA^X - Index of the station where the message originated. #! #REPLACE 03416k0E/03416k0F SEM^FRMT^XRESP^TO^SEM^XRVSL !# OUTPUT PARAMETERS: #! !# PSTM - Pointer to a BASE24 internal POS request. #! #ADD 03416k0G SEM^FRMT^XRESP^TO^SEM^XRVSL !# RETURNS: # !# 00 if formatting is successful or # !# a SEM response code indicating why formatting failed # #REPLACE 03563)02/03563)03 SEM^FRMT^XRQST^TO^PSTM^0200 rcode := sem^frmt^data^to^pstm^track2( sem, pstm, track1^tkn, track1^tkn^lgth); if rcode <> resp^no^error^sem^l then #REPLACE 03563)05 SEM^FRMT^XRQST^TO^PSTM^0200 return rcode; #DELETE 03563)07 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW08203 !*CMP2.13 03/02/04 BNETS 6063 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETS BNETS 6063 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETS BNETS 6063 * ******************************************************************************** #SCN = SW08218 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00026=0P ! 02MAR2004 frederr ! Symptom: POS reversals are not going back to the process that ! handled the original request. ! Problem: The interface is not checking for auth indicators 'F' or ! 'f'. This causes the authorizer field in the PSTM to ! not get populated. Which causes Auth to not know where ! to send the reversal. ! Fix: Modified the interface to support auth indicators 'F' ! and 'f' when setting up the authorizer field of the ! PSTM. ! Procs modified: pstm^0200^request. ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #375922. #REPLACE 04763 /04763 OFFSET 0 PSTM^0200^REQUEST if pstm.auth^ind2 = "P" or pstm.auth^ind2 = "F" then #REPLACE 04766 /04766 OFFSET 0 PSTM^0200^REQUEST if pstm.auth^ind2 = "1" or pstm.auth^ind2 = "f" then #REPLACE 04774 /04774 OFFSET 0 PSTM^0200^REQUEST if pstm.rte.auth^ind = "P" or pstm.rte.auth^ind = "F" then #REPLACE 04777 /04777 OFFSET 0 PSTM^0200^REQUEST if pstm.rte.auth^ind = "1" or pstm.rte.auth^ind = "f" then #ENDSCN = SW08218 !*CMP2.13 03/12/04 BNETLIBS6076 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \ARGUS.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6076 * * NEW FILE: \ARGUS.$EARL.SW6DBNET.BNETLIBS BNETLIBS 6076 * ******************************************************************************** #SCN = SW08238 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0002600G ! 12MAR2004 frederr ! Symptom: The interface is dumping with a trap 8032 when ! attempting to log a message. ! Problem: The interface is using the wrong local PS51 token ! structure when adding the PS51 token to the PSTM on 0210 ! messages from MasterCard. The use of the incorrect ! structure is causing global data to be stepped on. This ! global data is used for logging messages. ! Fix: Modified the interface to use the correct PS51 token ! structure when adding the PS51 token to the PSTM when ! processing 0210 messages from MasterCard. ! Proc modified: sem^frmt^xresp^to^pstm^0210. ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #375566 #REPLACE 03208v0k SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps51^tkn^data.cmrcl^crd^typ, #REPLACE 03208v0n SEM^FRMT^XRESP^TO^PSTM^0210 $len( ps51^tkn^data.cmrcl^crd^typ ) ); #REPLACE 03208v0x SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps51^tkn^data.cavv^aav^rslt^cde, #ENDSCN = SW08238 !*CMP2.13 03/24/04 BNETS 6064 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6064 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6064 * ******************************************************************************** #SCN = SW08252 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00026>0E ! 23MAR2004 engelk ! Symptom: The transactions allowed token is not being returned in ! PSTM 0210 response messages to Auth. ! Problem: The PSTM is moved into the suspense record before the ! transactions allowed token is added to the end of the ! PSTM. Also, if the transaction is allowed, the length ! of the internal message within the suspense record was ! not reset. ! Fix: Changed where the PSTM is moved into the suspense ! record to be after the transactions allowed token is ! added. ! Procs modified: pstm^0200^request. ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #376092. #DELETE 04740 PSTM^0200^REQUEST #ADD 04754 PSTM^0200^REQUEST movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); #REPLACE 04788j01/04788j02 PSTM^0200^REQUEST if ( base24^rel^g >= 6 ) then begin if ( response := hiswpstm_txn_alwd_iss( pstm, #REPLACE 04788j0A/04788j0L PSTM^0200^REQUEST begin if response = sys_frmt_err_l then begin ! ! ! SYSTEM ERROR ! ! ! movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); call pstm^0200^route( susp, resp^format^error^pos^l, sub^format^error^l ); return; end;! of if response = sys_frmt_err_l ! #ADD 04788j0Q PSTM^0200^REQUEST movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); #REPLACE 04788j0V/04788j0X PSTM^0200^REQUEST end; ! of transaction allowed if ! ! Adjust the susp internal message length to reflect the ! ! addition of the transactions allowed token ! #REPLACE 04788j10 PSTM^0200^REQUEST if pstm.data^flag = "1" then #REPLACE 04788j14 PSTM^0200^REQUEST end; ! of if pstm.data^flag ! #REPLACE 04788j18/04788j19 PSTM^0200^REQUEST end; ! of if base24^rel^g >= 6 ! movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); #ENDSCN = SW08252 !*CMP2.13 03/29/04 RQBNIIFS6006 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNIIFS RQBNIIFS 6006 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNIIFS RQBNIIFS 6006 * ******************************************************************************** #SCN = SW08268 , FILEID = RQBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00017F0c * 29MAR2004 engelk * Symptom: If all 60 prefixes were used and the last prefix * contained 11 characters, the last digit of the * last prefix was dropped. * Problem: When the length of the BNIIF record was expanded * for the mci^id change from 5 to 6 characters, * the length of the storage space for the BNIIF * record within the requester was not adjusted. * Fix: Changed REC-IMAGE-BNIIF from 878 bytes to 880. * Modified: WORKING STORAGE SECTION * Dependency: Apply fixes to RQBNIIFS and SVBNIIFS. Run MAKE. * Reference: Case #376766. #REPLACE 00063D02/00063D03 DATA DIVISION 03 REC-IMAGE-BNIIF PIC X(880). 03 WS-FILLER PIC X(144). #ENDSCN = SW08268 !*CMP2.13 03/29/04 SVBNIIFS6009 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNIIFS SVBNIIFS 6009 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNIIFS SVBNIIFS 6009 * ******************************************************************************** #SCN = SW08269 , FILEID = SVBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00012I1S * 29MAR2004 engelk * Symptom: If all 60 prefixes were used and the last prefix * contained 11 characters, the last digit of the * last prefix was dropped. * Problem: When the length of the BNIIF record was expanded * for the mci^id change from 5 to 6 characters, * the length of the storage space for the BNIIF * record within the server was not adjusted. * Fix: Changed REC-IMAGE-BNIIF and WS-RECORD-HOLD from * 878 bytes to 880. * Modified: FILE SECTION and WORKING STORAGE * SECTION * Dependency: Apply fixes to RQBNIIFS and SVBNIIFS. Run MAKE. * Reference: Case #376766. #REPLACE 00092G02/00092G03 DATA DIVISION 03 REC-IMAGE-BNIIF PIC X(880). 03 LEFTOVER PIC X(144). #REPLACE 00099G01 DATA DIVISION 02 FILLER PIC X(876). #REPLACE 00105G01 DATA DIVISION 02 FILLER PIC X(876). #REPLACE 00111G01 DATA DIVISION 02 FILLER PIC X(876). #REPLACE 00117G01 DATA DIVISION 02 FILLER PIC X(876). #REPLACE 00123G01 DATA DIVISION 02 FILLER PIC X(876). #REPLACE 00141G01 DATA DIVISION 01 WS-RECORD-HOLD PIC X(880). #ENDSCN = SW08269 !*CMP2.13 04/08/04 BNETS 6065 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6065 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6065 * ******************************************************************************** #SCN = SW08316 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00026|0F ! 06APR2004 engelk ! Symptom: New key requests are rejected by MasterCard. ! Problem: As part of the ICA expansion the ID placed in field 2 ! was erroneously expanded also. Only DE-32, DE-33, ! DE-120 and DE-121 should have been affected by the ! expansion. ! Fix: Modified the code to send only 5 digits in DE-2 on new ! key requests. ! Procs modified: init^newkey ! Dependency: Apply fixes to BNETLIBS and BNETS. Run MAKE. ! Reference: Case #376685. #DELETE 03920k1Z/03920k25 INIT^NEWKEY #ENDSCN = SW08316 !*CMP2.13 04/08/04 BNETLIBS6077 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6077 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6077 * ******************************************************************************** #SCN = SW08317 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0002610F ! 06APR2004 engelk ! Symptom: New key requests are rejected by MasterCard. ! Problem: As part of the ICA expansion the ID placed in field 2 ! was erroneously expanded also. Only DE-32, DE-33, ! DE-120 and DE-121 should have been affected by the ! expansion. ! Fix: Modified the code to send only 5 digits in DE-2 on new ! key requests. ! Procs modified: sem^frmt^nmm^request ! Dependency: Apply fixes to BNETLIBS and BNETS. Run MAKE. ! Reference: Case #376685. #REPLACE 02511m02/02512m00 SEM^FRMT^NMM^REQUEST ( nmm^info^cde = nmm^echo^l ) then begin return true; end; #REPLACE 02512m02 SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^rqst^key^xchng^l then #ADD 02514 SEM^FRMT^NMM^REQUEST pan^bit^d := 1; call integer^ascii^( sem.pan.lgth, 5 ); if max^group^lgth^g = 5 then begin movl( sem.pan.num, pct.inst, max^group^lgth^g ); end else begin movl( sem.pan.num, pct.inst.byte[ 1 ], 5 ); end; #REPLACE 02516 SEM^FRMT^NMM^REQUEST end; ! nmm^info^cde = nmm^rqst^key^xchng^l ! #ENDSCN = SW08317 !*CMP2.13 04/13/04 BNETLIBS6078 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6078 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6078 * ******************************************************************************** #SCN = SW08320 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0002620B ! 13APR2004 wielerk ! Symptom: The interface is not correctly identifying voice/VRU ! transactions that are sent to the interchange. ! Problem: The interface is not identifying CRT Auth transactions ! in field 61. ! Fix: Modified the interface to set field 61 correctly for ! CRT Auth transactions. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #377140 #ADD 00659;08 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "07" then begin ! ! Customer not present ! movd ( sem.ntl^pos^data.cond^cde.byte[ 3 ], "1" ); end; if pstm.term^typ = "99" or ! CRT Auth orig #REPLACE 00659;09 PSTM^FRMT^0200^TO^XRQST pstm.pt^srv^cond^cde = "08" then ! mail/phone order ! #DELETE 00659X1D PSTM^FRMT^0200^TO^XRQST #DELETE 00659(09 PSTM^FRMT^0200^TO^XRQST #DELETE 00659X1G/00659X1H PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW08320 !*CMP2.13 05/06/04 BNETLIBS6079 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6079 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6079 * ******************************************************************************** #SCN = SW08359 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0002630B ! 28APR2004 engelk ! Symptom: If AVS, CVC1, or CVV2 response data is sent in the ! request from MasterCard, it is not returned in the ! response. ! Problem: The code was modified so that it would not send field ! 48, additional data private, unless something in the ! field changed. AVS, CVC1, and CVV2 response data is ! contained in field 48. ! Fix: Added code check to ensure that bit 48 will be sent if ! it contains AVS, CVC1, or CVV2 response data. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #378771 #ADD 00746*0J PSTM^FRMT^0210^TO^XRESP if addl^data^bit^d and sem.addl^data.info.avs^resp.tag = "83" and sem.addl^data.info.avs^resp.result <> " " and sem.addl^data.info.avs^resp.result <> "0" then begin ! ! If AVS result data was sent in the request, field 48, must ! be sent back in the response with all of the subelements ! it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^87.tag = "87" and sem.addl^data.info.cvc^sub^fld^87.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^87.tag^data <> "0" then begin ! ! If CVC1 or CVV2 result data was sent in the request, ! field 48 must be sent back in the response with all ! of the subelements it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^88.tag = "88" and sem.addl^data.info.cvc^sub^fld^88.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^88.tag^data <> "0" then begin ! ! If CVC1 result data was sent in the request, field 48 ! must be sent back in the response with all of the ! subelements it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^89.tag = "89" and sem.addl^data.info.cvc^sub^fld^89.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^89.tag^data <> "0" then begin ! ! If CVC1 result data was sent in the request, field ! 48 must be sent back in the response with all of the ! subelements it contained in the original message ! send^addl^data := true; end; #DELETE 00746Q07/00747Q01 PSTM^FRMT^0210^TO^XRESP #ADD 03655 SEM^FRMT^XRQST^TO^SEM^XRESP int send^addl^data := false; #ADD 03663 SEM^FRMT^XRQST^TO^SEM^XRESP if addl^data^bit^d and sem.addl^data.info.avs^resp.tag = "83" and sem.addl^data.info.avs^resp.result <> " " and sem.addl^data.info.avs^resp.result <> "0" then begin ! ! If AVS result data was sent in the request, field 48, must ! be sent back in the response with all of the subelements ! it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^87.tag = "87" and sem.addl^data.info.cvc^sub^fld^87.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^87.tag^data <> "0" then begin ! ! If CVC1 or CVV2 result data was sent in the request, ! field 48 must be sent back in the response with all ! of the subelements it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^88.tag = "88" and sem.addl^data.info.cvc^sub^fld^88.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^88.tag^data <> "0" then begin ! ! If CVC1 result data was sent in the request, field 48 ! must be sent back in the response with all of the ! subelements it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.cvc^sub^fld^89.tag = "89" and sem.addl^data.info.cvc^sub^fld^89.tag^data <> " " and sem.addl^data.info.cvc^sub^fld^89.tag^data <> "0" then begin ! ! If CVC1 result data was sent in the request, field 48 ! must be sent back in the response with all of the ! subelements it contained in the original message ! send^addl^data := true; end; #DELETE 03674 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 03678 SEM^FRMT^XRQST^TO^SEM^XRESP if not send^addl^data then begin addl^data^bit^d := 0; end; #ENDSCN = SW08359 !*CMP2.13 06/11/04 BNETS 6066 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6066 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6066 * ******************************************************************************** #SCN = SW08407 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00026@0B ! 11JUN2004 shahb ! Symptom: When the interchange is unavailable, the interchange ! response logged to the PTLF (AUTH.ICHG-RESP) is blank. ! Problem: If the interchange is unavailable, and the transaction ! cannot be sent, the interchange response is not set to ! to 'Destination not available'. ! Fix: If the transaction cannot be sent to Banknet because ! the interchange is unavailable, the interchange response ! code (PSTM.TRAN.ICHG-RESP) will be set to the Banknet ! resp code 91 (Auth System or Issuer System inoperative). ! Procs modified: pstm^0200^route ! Dependency: Apply fix to BNETS. Run MAKE ! Reference: Case 379675 #ADD 04864 PSTM^0200^ROUTE call integer^ascii^( pstm.tran.ichg^resp, resp^system^unavail^sem^l ); #ENDSCN = SW08407 !*CMP2.13 07/22/04 BNETLIBS6080 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6080 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6080 * ******************************************************************************** #SCN = SW08442 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0002640F ! 22JUL2004 frederr ! Symptom: Field 33 (forwarding institution id) is not being ! formatted correctly on file request messages (message ! type = 0302) to MasterCard. ! Problem: The interface checks if a prefix match can be made on ! the BNIIF when populating field 33 on 0302 messages. ! If no prefixes are set up on the BNIIF though, the ! BNIIF utility will use a length of zero to check for a ! matching prefix. A length of zero will always match ! any check. So that BNIIF record is used for field 33. ! Fix: Modified the interface to only use a particular BNIIF ! record if the prefixes match and the prefix length on ! the BNIIF is > 0. ! Procs modified: util^get^bniif. ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #382286. #REPLACE 06450 /06450 OFFSET 0 UTIL^GET^BNIIF bniif^tbl.prefix[ j ].lgth and bniif^tbl.prefix[ j ].lgth > 0 then #ENDSCN = SW08442 !*CMP2.13 07/27/04 BNETLIBS6081 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6081 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6081 * ******************************************************************************** #SCN = SW08444 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0002650H ! 27JUL2004 frederr ! Symptom: Field 48, Additional Data, contains invalid data when ! the Token CE, authn data token, contains less than 32 ! bytes of data. ! Problem: The interface is attempting to use an RSCAN to determine ! the length of the CE token. This will not work as the ! RSCAN is being done to the token buffer in the internal ! message. Because of this the calculated length is ! invalid. ! Fix: Modified the interface to use the total length of the ! CE token as sent in the token buffer minus the ! authentication indicator flag's length (this subfield is ! not sent in field 48). ! Procs modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #381997. #ADD 01541&0I PSTM^FRMT^SEM^ADDL^DATA data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn.authn^ind^flg ))); #DELETE 01541&0J/01541&0M PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW08444 !*CMP2.13 08/05/04 BNETDDLS6017 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6017 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6017 * ******************************************************************************** #SCN = SW08458 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6017 #NEWVERSION = 6018 #ADD 00262Q0A * 05AUG2004 OwallaD * Symptom: Banknet Release 04.2 Mandates. * Problem: None. * Fix: 1. Added two new subelements, SE 71 and SE 72, within DE * 48 to support the new M/Chip on-behalf services. * 2. Added a new subelement, SE 76, within DE 48. This * field will be used to specify whether or not an acquirer * participates in MasterCard Electronic programs. * 3. Added fields ON-BEHALF-SVC and ON-BEHALF-RSLT-1 to * the definition of the Switch Token. * Modified sections: BNET-SWI-TKN-DATA * SEM * Dependency: BA10SC04 subvolume. New files: ILB0404M, ILB0404R, and * ILB0404S. Apply fixes to BNETDDLS, BNETEMVS, BNETG, * BNETLIBS, BNETS, and DDLPSTKN and re-MAKE. Run ILF * conversion program ILB0404. Replace BNETLOGM, BNETMAN, * and BNETUPDT. * Reference: WO #040505-02 #ADD 01157I06 SEM * On-behalf Services * Subfield tag = 71 * This field notifies the issuer of the M/Chip on-behalf service * performed. * * Valid values positions 1-2 (on-behalf service) * 01 - M/Chip to Magnetic Stripe Conversion * 02 - M/Chip Cryptogram Pre-validation/Post-generation * 03 - Dynamic M/Chip Stand-In * * Valid values position 3 (on-behalf result 1) * C - Conversion of the M/Chip transaction to a magnetic stripe * transaction was completed. * F - Format error. No check on Cryptogram, status of TVR/CVR * unknown. * G - Application Cryptogram is valid, but not an ARQC. Status of * TVR/CVR unknown. * I - Invalid. Application Cryptogram (AC) is incorrect. Status * of TVR/CVR unknown. * T - Valid ARQC, TVR/CVR invalid. * U - Unable to process. No check on Cryptogram. Status of * TVR/CVR unknown. * V - Valid ARQC, valid TVR/CVR. * Blank - No value present. * * Position 4 is on-behalf result 2. This is for MasterCard internal * use only. 06 on-behalf-svc-sub-fld-71. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 svc pic x(2). 10 rslt-1 pic x. 10 rslt-2 pic x. * Issuer Chip Authentication * Subfield tag = 72 06 iss-chip-auth-sub-fld-72. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(16). * MasterCard Electronic Acceptance Indicator * Subfield tag = 76 06 mc-elec-accpt-ind-sub-fld-76. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #REPLACE 02760H01 SAF-BNET * Switch token version (ver-id) will be "05". #ADD 02760I02 SAF-BNET 02 on-behalf-svc pic x(2). 02 on-behalf-rslt-1 pic x. 02 user-fld pic x. #ENDSCN = SW08458 !*CMP2.13 08/05/04 BNETG 6029 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6029 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6029 * ******************************************************************************** #SCN = SW08459 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6029 #NEWVERSION = 6030 #REPLACE 00001V0E !# Copyright by ACI Worldwide Inc. 2004 #! #ADD 00025c0G ! 05AUG2004 OwallaD ! Symptom: Banknet Release 04.2 Mandates. ! Problem: None. ! Fix: 1. Added variable DENY^FAILED^ON^BEHALF^G that will be ! set via LCONF parameter DENY-FAILED-ON-BEHALF. When set ! to true, the interface will deny inbound request ! transactions that failed pre-validation. ! 2. Added variable DENY^MC^E^COMM^TXN^G that will be set ! via LCONF parameter DENY-MC-E-COMM-TXN. When set to ! true, the interface will deny MasterCard e-commerce ! transactions that come from acquirers that do not ! participate in MasterCard Electronic Commerce program. ! 3. Added variable FRWD^UNMATCHED^RVSLS^G that will be ! set via LCONF parameter FRWD-UNMATCHED-RVSLS. When set ! to true, the interface will format internal reversal ! messages from unmatched external reversal messages and ! send the message to BASE24-pos Router Authorization. ! 4. Added variable ON^BEHALF^APPRV^RSLT^CDES^G that will ! be set via LCONF parameter ON-BEHALF-APPRV-RSLT-CDES. ! This variable will contain all the on-behalf result 1 ! codes that should be considered approvals. ! 5. Sourced in section POS^MRCH^TKN from file BADDLTAL. ! Dependency: BA10SC04 subvolume. New files: ILB0404M, ILB0404R, and ! ILB0404S. Apply fixes to BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, and DDLPSTKN and re-MAKE. Run ILF ! conversion program ILB0404. Replace BNETLOGM, BNETMAN, ! and BNETUPDT. ! Reference: WO #040505-02 #ADD 00026a01 ? pos^mrch^tkn #ADD 00026a04 ! pos^mrch^tkn #ADD 00448a01 int deny^failed^on^behalf^g := true; int deny^mc^e^comm^txn^g := true; int frwd^unmatched^rvsls^g := false; #ADD 00454 string on^behalf^apprv^rslt^cdes^g[ 0:20 ] := [ "V", 20 * [ " " ] ]; #ADD 01366a01 int deny^failed^on^behalf^g; int deny^mc^e^comm^txn^g; int frwd^unmatched^rvsls^g; #ADD 01366E1O string on^behalf^apprv^rslt^cdes^g[ 0:20 ]; #ADD 01366Z08 ? hiswsec^key^reverse, #ADD 01366P08 ! hiswsec^key^reverse, #ENDSCN = SW08459 !*CMP2.13 08/05/04 BNETLIBS6082 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6082 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6082 * ******************************************************************************** #SCN = SW08460 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6082 #NEWVERSION = 6083 #ADD 00001 !##################################################################### !# # !# BASE24 # !# ------ # !# # !# Banknet Interchange Interface Library # !# # !# Proprietary Software Product # !# # !# ACI Worldwide Inc. # !# 330 South 108th Avenue # !# Omaha, Nebraska 68154 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide Inc. 2004 # !# # !# All Rights Reserved. # !# # !##################################################################### ?page ! Record of Changes: ! ! Date Person ! --------- ------- #DELETE 00001k00/00025 #ADD 0002660H ! 05AUG2004 OwallaD ! Symptom: The interface uses the PS51 token only when determining ! if a transaction is a recurring payment transction. ! Problem: 6.0 device handlers set the recurring payment indicator ! in a field within 6.0 token POS Data1. ! Fix: Modified the code to use both the POS Data1 token and ! the PS51 token when identifying recurring payment ! transctions. ! Modified procs: PSTM^FRMT^0200^TO^XRQST ! SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fixes to BNETLIBS and run MAKE. Replace BNETLOGM. ! Reference: Case #378766 ! 05AUG2004 OwallaD ! Symptom: Inbound AVS Only transactions may be submitted for ! authorization as purchases. ! Problem: AVS Only transactions which bear a transaction amount of ! zero may be sent to Router/Auth or other host for ! authorization. ! Fix: Modified the code to set the processing codes of such ! transactions to "16" (Card Verification) so that POS ! Router/Auth or other host does not treat them as ! purchases. ! Modified procs: SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fixes to BNETLIBS and run MAKE. ! Reference: Case #383129 ! 05AUG2004 OwallaD ! Symptom: Log message #3170 is always logged after POS Data1 token ! has been added. ! Problem: The log message should only be logged to the EMS session ! if an error occured during the attempt to added the ! token to the PSTM. ! Fix: Modified the code to only log the message if an error ! occurred in the process of adding the POS Data1 Token ! to the PSTM. ! Modified procs: SEM^FRMT^XRESP^TO^PSTM^0210 ! Dependency: Apply fixes to BNETLIBS and run MAKE. ! Reference: Case #383269 ! 05AUG2004 OwallaD ! Symptom: Banknet Release 04.2 Mandates. ! Problem: None. ! Fix: Modified the code to support Banknet Release 04.2 ! Mandates. ! New proc: SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM ! Modified procs: SEM^FRMT^XRESP^TO^PSTM^0210 ! SEM^FRMT^XRQST^TO^PSTM^0200 ! UTIL^COLLAPSE^SEM ! UTIL^EXPAND^SEM ! UTIL^ILF^ADD ! UTIL^SWI^TKN^INIT ! UTIL^SWI^TKN^UPDT ! Dependency: BA10SC04 subvolume. New files: ILB0404M, ILB0404R, and ! ILB0404S. Apply fixes to BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, and DDLPSTKN and re-MAKE. Run ILF ! conversion program ILB0404. Replace BNETLOGM, BNETMAN, ! and BNETUPDT. ! Reference: WO #040505-02 #REPLACE 00540m03 PSTM^FRMT^0200^TO^XRQST string .tkn^id1[ 0:1 ]; #ADD 00540q02 PSTM^FRMT^0200^TO^XRQST int .pos^data1^tkn( pos^data1^tkn^def ); int pos^data1^tkn^lgth; #ADD 00700:00 PSTM^FRMT^0200^TO^XRQST movd( tkn^id1, pos^data1^tkn^id^d ); if base24^rel^g >= 5 then begin ! ! Determine if this is a recurring payment transaction. ! ! Note: Pre 6.0 device handlers use the PS51 token to identify ! recurring payment transactions while 6.0 ones use the POS ! Data1 token ! if ( hiswtkn^get^tkn( pstm, tkn^id1, @pos^data1^tkn, pos^data1^tkn^lgth ) and pos^data1^tkn.recur^pmnt^ind = "R" ) or ( hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) and ps51^get^tkn.moto^flg = "2" ) then begin movd ( sem.ntl^pos^data.cond^cde.byte[ 3 ], "4" ); end; end; #DELETE 00700:01/00700q0B PSTM^FRMT^0200^TO^XRQST #ADD 02956k00 SEM^FRMT^SDF^PRIKEY ?section sem^frmt^unmatchd^xrvsl^to^pstm ?page "sem^frmt^unmatchd^xrvsl^to^pstm" !##################################################################### !# # !# sem^frmt^unmatchd^xrvsl^to^pstm # !# # !# This procedure formats a BASE24-pos reversal message from a # !# Banknet reversal message. # !# # !# INPUT PARAMETERS: # !# rvsl - pointer to a Banknet external reversal # !# # !# OUTPUT PARAMETERS: # !# pstm - pointer to a BASE24-pos reversal # !# # !##################################################################### proc sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm ); int .rvsl( sem^def ); int .pstm( pstm^def ); begin int .pbit^map := wordaddr( @rvsl.pbit^map ); int .sbit^map := wordaddr( @rvsl.sbit^map ); movd( pstm.typ, reversal^d ); movd( pstm.originator, interchange^orig^d ); call sem^frmt^amt^to^pstm^amt( rvsl, pstm ); if rvsl.advice^cde.reason^cde = "400" or rvsl.advice^cde.reason^cde = "401" or rvsl.advice^cde.reason^cde = "454" then begin movd ( pstm.rvsl^cde, rvsl^auth^not^avail^d ); end else if rvsl.advice^cde.reason^cde = "452" or rvsl.advice^cde.reason^cde = "453" then begin movd ( pstm.rvsl^cde, rvsl^customer^cancel^d ); end else begin movd ( pstm.rvsl^cde, rvsl^hardware^error^d ); end; if orig^data^bit^d then begin ! ! Move original data portion of the SEM to the PSTM. ! move( pstm.orig^data.msg^typ, rvsl.orig.msg^typ ); movl( pstm.orig^data.trn^tim, rvsl.orig.dat^tim.byte[ 4 ], 6 ); movl( pstm.orig^data.trn^dat, rvsl.orig.dat^tim.byte[ 0 ], 4 ); move( pstm.orig^data.tran^seq^num, rvsl.orig.trace ); movl( pstm.orig^data.b24^post^dat, pstm.post^dat.mm, 4 ); end else begin movd( pstm.orig^data.msg^typ, sem^auth^request^d ); movl( pstm.orig^data.trn^tim, rvsl.tran^dat^tim.byte[ 4 ], 6 ); movl( pstm.orig^data.trn^dat, rvsl.tran^dat^tim.byte[ 0 ], 4 ); mov^( pstm.orig^data.tran^seq^num, blanks ); move( pstm.orig^data.tran^seq^num, rvsl.trace^num ); movl( pstm.orig^data.b24^post^dat, pstm.post^dat.mm, 4 ); end; return; end; ! of proc sem^frmt^unmatchd^xrvsl^to^pstm #ADD 03133d09 SEM^FRMT^XRESP^TO^PSTM^0210 wlform( noroom^pmrch^pstm, "NO ROOM TO ADD POS MERCHANT TOKEN TO PSTM:" ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^add^pmrch^tkn, "UNABLE TO ADD POS MERCHANT TOKEN TO PSTM: " ','"PAN: \\\\\\\\\\\\\\\\\\\ SEQ NUM: \\\\\\\\\\\\" ','" REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) #ADD 03133Q0I SEM^FRMT^XRESP^TO^PSTM^0210 struct .pos^mrch^tkn( pos^mrch^tkn^def ); #ADD 03138m00 SEM^FRMT^XRESP^TO^PSTM^0210 int pos^mrch^tkn^lgth := 0; #ADD 03208=06 SEM^FRMT^XRESP^TO^PSTM^0210 set( pos^data1^tkn.online^lmt, 0f ); #DELETE 03208=09/03208=0B SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 03208=0C SEM^FRMT^XRESP^TO^PSTM^0210 movd( tkn^id, pos^data1^tkn^id^d ); #REPLACE 03208=0E SEM^FRMT^XRESP^TO^PSTM^0210 pos^data1^tkn^lgth := $len( pos^data1^tkn ); #REPLACE 03208=0G SEM^FRMT^XRESP^TO^PSTM^0210 tkn^lgth := 0; #REPLACE 03208=0I/03208=0P SEM^FRMT^XRESP^TO^PSTM^0210 if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; #REPLACE 03208=0R/03208=0b SEM^FRMT^XRESP^TO^PSTM^0210 tkn^result := tkn^add^info( pstm, lgth, max^msg^lgth^l, tkn^id, pos^data1^tkn, pos^data1^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); #ADD 03208=0c SEM^FRMT^XRESP^TO^PSTM^0210 if tkn^result then begin #ADD 03208=14 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if tkn^result #DELETE 03208=15 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208d2D SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag = "76" then begin init( pos^mrch^tkn, " ", wlen( pos^mrch^tkn ) ); movl( pos^mrch^tkn.mc^elec^accpt^ind, sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data, $len( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76. tag^data ) ); if pos^mrch^tkn.e^comm^goods^ind <> [ $len( pos^mrch^tkn ) * [ " " ] ] then begin tkn^id ':=' pos^mrch^tkn^id^d; pos^mrch^tkn^lgth := $len( pos^mrch^tkn ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^mrch^tkn, pos^mrch^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3180, ! routing code !, @noroom^pmrch^pstm, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3185, ! routing code !, @err^add^pmrch^tkn, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3185 ); end; end; ! of if tkn^result end; ! of if . . .e^comm^goods^ind <> spaces end; ! of if . . .sub^fld^76.tag = "76" #ADD 03509Z0G SEM^FRMT^XRQST^TO^PSTM^0200 wlform( noroom^pmrch^pstm, "NO ROOM TO ADD POS MERCHANT TOKEN TO PSTM:" ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^add^pmrch^tkn, "UNABLE TO ADD POS MERCHANT TOKEN TO PSTM: " ','"PAN: \\\\\\\\\\\\\\\\\\\ SEQ NUM: \\\\\\\\\\\\" ','" REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) wlform( noroom^data1^pstm, "NO ROOM TO ADD POS DATA1 TOKEN TO PSTM: " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ','"REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^add^data1^tkn, "UNABLE TO ADD POS DATA1 TOKEN TO PSTM:" ','" PAN: \\\\\\\\\\\\\\\\\\\ SEQ NUM: \\\\\\\\\\\\ " ','"REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) #ADD 03509Q0M SEM^FRMT^XRQST^TO^PSTM^0200 struct .pos^data1^tkn( pos^data1^tkn^def ); struct .pos^mrch^tkn( pos^mrch^tkn^def ); #ADD 03511W02 SEM^FRMT^XRQST^TO^PSTM^0200 int pos^data1^tkn^lgth := 0; int pos^mrch^tkn^lgth := 0; #ADD 03542Z22 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag= "76" then begin init( pos^mrch^tkn, " ", wlen( pos^mrch^tkn ) ); movl( pos^mrch^tkn.mc^elec^accpt^ind, sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data, $len( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag^data ) ); if pos^mrch^tkn.e^comm^goods^ind <> [ $len( pos^mrch^tkn ) * [ " " ] ] then begin tkn^id ':=' pos^mrch^tkn^id^d; pos^mrch^tkn^lgth := $len( pos^mrch^tkn ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^mrch^tkn, pos^mrch^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3190, ! routing code !, @noroom^pmrch^pstm, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3195, ! routing code !, @err^add^pmrch^tkn, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2290 ); end; end; ! of if tkn^result end; ! of if pos^mrch^tkn.e^comm^goods^ind <> spaces end; ! of if . . .sub^fld^76.tag= "76" ! ! If this is a recurring payment transaction, add the POS ! Data1 token. ! if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and sem.addl^data.info.tran^cat^cde = "T" then begin init( pos^data1^tkn, " ", wlen( pos^data1^tkn ) ); set( pos^data1^tkn.online^lmt, 0f ); movd( pos^data1^tkn.recur^pmnt^ind, "R" ); movd( tkn^id, pos^data1^tkn^id^d ); pos^data1^tkn^lgth := $len( pos^data1^tkn ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data1^tkn, pos^data1^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3205, ! routing code !, @noroom^data1^pstm, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3210, ! routing code !, @err^add^data1^tkn, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2300 ); end; end; ! of if tkn^result end; ! of if sem.ntl^pos^data.cond^cde. . . #ADD 03615J0J SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.avs^rqst.cde = "51" and pstm.tran.tran^cde.tc = "00" and sem.tran^amt = "000000000000" then begin ! ! Card Verification transaction. ! movd( pstm.tran.tran^cde.tc, "16" ); movd( pstm.tran.tran^cde.t, "0" ); movd( pstm.tran.tran^cde.aa, "00" ); movd( pstm.tran.tran^cde.c, "0" ); end; #ADD 05555v24 UTIL^COLLAPSE^SEM ! ! On-behalf Services. ! if hdr.addl^data.info.on^behalf^svc^sub^fld^71. tag = "71" then begin call ascii^integer( hdr.addl^data.info. on^behalf^svc^sub^fld^71.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. on^behalf^svc^sub^fld^71.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! Issuer Chip Authentication Data. ! if hdr.addl^data.info.iss^chip^auth^sub^fld^72. tag = "72" then begin call ascii^integer( hdr.addl^data.info. iss^chip^auth^sub^fld^72.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. iss^chip^auth^sub^fld^72.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! MasterCard Electronic Acceptance Indicator. ! if hdr.addl^data.info. mc^elec^accpt^ind^sub^fld^76. tag = "76" then begin call ascii^integer( hdr.addl^data.info. mc^elec^accpt^ind^sub^fld^76. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 06095 UTIL^EXPAND^SEM int cnt := 0; int num^idx := 0; #ADD 06098 UTIL^EXPAND^SEM string .on^behalf^ptr; #ADD 06170v0A UTIL^EXPAND^SEM if ptr[ length ] = "71" then begin ! ! On-behalf Services. ! movl( sem^ptr.addl^data.info. on^behalf^svc^sub^fld^71. tag, ptr[ length ], 4 ); num^idx := tag^length / 4; @on^behalf^ptr := @ptr[ length '+' 4 ]; while cnt <= num^idx - 1 do begin movl( sem^ptr.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ cnt ], on^behalf^ptr, 4 ); @on^behalf^ptr := @on^behalf^ptr '+' 4; cnt := cnt + 1; end; length := length + tag^length + 4; end else if ptr[ length ] = "72" then begin ! ! Issuer Chip Authentication Data. ! movl( sem^ptr.addl^data.info. iss^chip^auth^sub^fld^72. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else if ptr[ length ] = "76" then begin ! ! MasterCard Electronic Acceptance ! Indicator. ! movl( sem^ptr.addl^data.info. mc^elec^accpt^ind^sub^fld^76. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 06667 UTIL^ILF^ADD wlform( no^setl^dat, "Mandatory data element 15, settlement " ','"date, not present in \\\\ message. Record logged " ','"to current ILF File \f, PAN: \\\\\\\\\\\\\\\\\\\, " ','"TRACE NUM: \\\\\\\\, REF NUM: \\\\\\\\\ " ) #ADD 06808 UTIL^ILF^ADD begin set( fnum, pct.ilf[ indx ].fcb.filenum ); call fileinfo( fnum, ! error !, filename ); if dat = "000000" then begin call log^message^( 3200, ! routing code !, @no^setl^dat, net.myname, evt_msg_severity_err_l, @sem.typ, @filename, @sem.pan.num, @sem.trace^num, @sem.banknet^data.ref^num ); end; end #DELETE 06809 UTIL^ILF^ADD #REPLACE 10230o01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "05"; #ADD 10230o05 UTIL^SWI^TKN^INIT if sem.addl^data.info.on^behalf^svc^sub^fld^71.tag = "71" then begin move( bnet^tkn^buf.on^behalf^svc, sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data.svc ); move( bnet^tkn^buf.on^behalf^rslt^1, sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data.rslt^1 ); end; #ADD 10230m13 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.on^behalf^svc <> [ $len( bnet^tkn^buf.on^behalf^svc ) * [ " " ] ] then begin move( bnet^tkn.on^behalf^svc, bnet^tkn^buf.on^behalf^svc ); end; if bnet^tkn^buf.on^behalf^rslt^1 <> [ $len( bnet^tkn^buf.on^behalf^rslt^1 ) * [ " " ] ] then begin move( bnet^tkn.on^behalf^rslt^1, bnet^tkn^buf.on^behalf^rslt^1 ); end; #ENDSCN = SW08460 !*CMP2.13 08/05/04 BNETS 6067 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6067 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6067 * ******************************************************************************** #SCN = SW08461 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6067 #NEWVERSION = 6068 #REPLACE 00001t0E !# Copyright by ACI Worldwide Inc. 1988 - 2004 #! #ADD 00026\0E ! 05AUG2004 OwallaD ! Symptom: When the check digits returned from TSS following a ! successful PIN key translation do not match the check ! digits in the request message, the new key is retained ! in the ISEC record within the TSS database. ! Problem: When the Interface performs a successful PIN key ! translation via TSS, the ISEC record is updated to ! reflect the new key. However, when the check digits ! returned from TSS do not match the check digits in the ! request message, the PIN key translate needs to be ! reversed. The interface does not reverse the PIN key ! under these circumstances. ! Fix: Modified the interface to restore the previous key so ! that it is used as the current key in the ISEC under ! the circumstances described above. ! Modified proc: SEM^KEY^CHNG^RQST ! Dependency: Apply fix to BNETS and run MAKE. Replace BNETLOGM. ! Reference: WO #030713-33 ! 05AUG2004 OwallaD ! Symptom: Banknet Release 04.2 Mandates. ! Problem: None. ! Fix: Modified the code to support Banknet Release 04.2 ! Mandates. ! Modified procs: ACI^COPYRIGHT ! BNET^SEM^XRESP^FAILED ! CMD^WARMBOOT^STORE^GLOBALS ! CMD^WARMBOOT^RETRIEVE^GLOBALS ! INIT^PARAMPROC ! SEM^ADVICE^RESPONSE ! SEM^CHARGEBACK ! SEM^CHARGEBACK^RESPONSE ! SEM^REQUEST ! SEM^RESPONSE ! SEM^REVERSAL^ADVICE ! Dependency: BA10SC04 subvolume. New files: ILB0404M, ILB0404R, and ! ILB0404S. Apply fixes to BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, and DDLPSTKN and re-MAKE. Run ILF ! conversion program ILB0404. Replace BNETLOGM, BNETMAN, ! and BNETUPDT. ! Reference: WO #040505-02 #REPLACE 00483%01 ACI^COPYRIGHT "Copyrighted by ACI Worldwide Inc. 2004"; #ADD 00873 BNET^SEM^XRESP^FAILED int .pbit^map := wordaddr( @sem.pbit^map ); #ADD 00874T00 BNET^SEM^XRESP^FAILED string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 00874T01 BNET^SEM^XRESP^FAILED #ADD 00914W00 BNET^SEM^XRESP^FAILED if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 00914W01 BNET^SEM^XRESP^FAILED #DELETE 00914T04 BNET^SEM^XRESP^FAILED #ADD 02599R15 CMD^WARMBOOT^STORE^GLOBALS define store^array^d( x ) = begin movl( temp.x, x, $occurs( temp.x ) ); init( x, " ", $occurs( x ) ); end#; #ADD 02599&01 CMD^WARMBOOT^STORE^GLOBALS store^d( deny^failed^on^behalf^g ); store^d( deny^mc^e^comm^txn^g ); store^d( frwd^unmatched^rvsls^g ); store^array^d( on^behalf^apprv^rslt^cdes^g ); #ADD 02599p06 CMD^WARMBOOT^STORE^GLOBALS deny^failed^on^behalf^g := true; deny^mc^e^comm^txn^g := true; frwd^unmatched^rvsls^g := false; on^behalf^apprv^rslt^cdes^g ':=' [ "V", 20 * [ " " ] ]; #ADD 02599T4U CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^file^d( on^behalf^apprv^rslt^cdes^g ); #ADD 02599&07 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( deny^mc^e^comm^txn^g ); retrieve^d( frwd^unmatched^rvsls^g ); retrieve^d( deny^failed^on^behalf^g ); #ADD 03941%02 INIT^PARAMPROC wlform( num^cde^excd, "Only 20 entries allowed in param" ','" ON-BEHALF-APPRV-RSLT-CDES. All values from \ to " ','"the end will not be processed as approvals." ) #ADD 03945&01 INIT^PARAMPROC "P", "DENY-FAILED-ON-BEHALF ", "P", "DENY-MC-E-COMM-TXN ", "P", "FRWD-UNMATCHED-RVSLS ", "P", "ON-BEHALF-APPRV-RSLT-CDES ", #ADD 03973 INIT^PARAMPROC int lgth := 0; #ADD 03996p0N INIT^PARAMPROC ! ! DENY-FAILED-ON-BEHALF ! if not ferror then begin if lconf.param^msg.ptxt = "N" then begin deny^failed^on^behalf^g := false; end else begin deny^failed^on^behalf^g := true; end; end; ! ! DENY-MC-E-COMM-TXN ! if not ferror then begin if lconf.param^msg.ptxt = "N" then begin deny^mc^e^comm^txn^g := false; end else begin deny^mc^e^comm^txn^g := true; end; end; ! ! FRWD-UNMATCHED-RVSLS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin frwd^unmatched^rvsls^g := true; end else begin frwd^unmatched^rvsls^g := false; end; end; ! ! ON-BEHALF-APPRV-RSLT-CDES ! if not ferror then begin if lconf.param^msg.ptxt <> [ $len( lconf.param^msg.ptxt ) * [ " " ] ] then begin lgth := $occurs( on^behalf^apprv^rslt^cdes^g ); on^behalf^apprv^rslt^cdes^g ':=' [ $occurs( on^behalf^apprv^rslt^cdes^g ) * [ " " ] ]; lgth := lgth - 1; if lconf.param^msg.plgth > lgth then begin ! ! Maximum number of On-behalf Codes exceeded. ! call log^message^( 3175, ! routing code !, @num^cde^excd, net.myname, evt_msg_severity_err_l, @lconf.param^msg.ptxt.byte[ 20 ], item^name^len^l ); movl( on^behalf^apprv^rslt^cdes^g, lconf.param^msg.ptxt, lgth ); end else begin movl( on^behalf^apprv^rslt^cdes^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; end; ! of if lconf.param^msg.ptxt <> spaces end; ! of if not ferror #ADD 05796 SEM^ADVICE^RESPONSE int .pbit^map := wordaddr( @sem.pbit^map ); string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 05797 SEM^ADVICE^RESPONSE #ADD 05801 SEM^ADVICE^RESPONSE if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 05802 /05803 SEM^ADVICE^RESPONSE #ADD 05857 SEM^CHARGEBACK int .pbit^map := wordaddr( @sem.pbit^map ); string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 05858 SEM^CHARGEBACK #ADD 05862 SEM^CHARGEBACK if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 05863 /05864 SEM^CHARGEBACK #ADD 05917 SEM^CHARGEBACK^RESPONSE int .pbit^map := wordaddr( @sem.pbit^map ); string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 05918 SEM^CHARGEBACK^RESPONSE #ADD 05922 SEM^CHARGEBACK^RESPONSE if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 05923 /05924 SEM^CHARGEBACK^RESPONSE #ADD 06101k0Q SEM^KEY^CHNG^RQST wlform( bkout^fail, "Attempt to restore previous key failed" ) wlform( bkout^pass, "Previous Key Restored in TSS database" ) #ADD 06101k0X SEM^KEY^CHNG^RQST int dup^key^flg; #ADD 06101p00 SEM^KEY^CHNG^RQST string key^typ[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 06101y02 SEM^KEY^CHNG^RQST dup^key^flg, #DELETE 06101t0A SEM^KEY^CHNG^RQST #ADD 06101k21 SEM^KEY^CHNG^RQST if sdcb.sec^dev^typ = sec_dev_typ_tss_l and dup^key^flg then begin ! ! The call failed because TSS returned a "Duplicate ! Key" response code. No other action is necessary ! because the TSS database already contains the ! repeated key and its associated check digit. ! movd( sem.resp^cde, resp^no^error^sem^d ); end else begin call log^message^( 1366, ! routing code !, @fail, net.myname, evt_msg_severity_err_l ); movd( sem.resp^cde, resp^system^error^sem^d ); end; end; if sem.addl^data.key^info.key^chk^dgt <> chk^dgt for chk^dgt^lgth^l then begin call log^message^( 1367, ! routing code !, @sync, net.myname, evt_msg_severity_err_l ); movd( sem.resp^cde, resp^system^error^sem^d ); if sdcb.sec^dev^typ = sec_dev_typ_tss_l then begin ! ! Restore the previous key so that it is used as the ! current key in the TSS database. This is done by ! backing out the new (current) key that was just ! added to the TSS database. Set the key^typ to "01" ! (PIN Encryption Key). ! key^typ ':=' "01"; if hiswsec^key^reverse( sdcb, key^typ, key_dir_s, pct.secure.exchng^key, 1 ) then begin call log^message^( 3215, ! routing code !, @bkout^pass, net.myname, evt_msg_severity_info_l ); end else begin call log^message^( 3220, ! routing code !, @bkout^fail, net.myname, evt_msg_severity_crit_l ); end; end; ! of if sdcb.sec^dev^typ end ! of if sem.addl^data.key^info.key^chk^dgt #DELETE 06101k22/06101k2D SEM^KEY^CHNG^RQST #ADD 06595 SEM^REQUEST string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 06596 SEM^REQUEST #ADD 06596B00 SEM^REQUEST int frmt^err := 0; int idx := 0; int max^num^cdes := 0; #ADD 06596B01 SEM^REQUEST int .pstm( pstm^def ) := @susp.intrn^msg; #ADD 06603 SEM^REQUEST if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 06604 /06605 SEM^REQUEST #ADD 06612B09 SEM^REQUEST if addl^data^bit^d then begin if sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag = "76" and ( sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "M" or sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "C" ) and deny^mc^e^comm^txn^g = true then begin call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; if deny^failed^on^behalf^g then begin if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag = "71" and ( sem.addl^data.info.on^behalf^svc^sub^fld^71.tag^data. svc = "02" or sem.addl^data.info.on^behalf^svc^sub^fld^71.tag^data. svc = "03" ) and ( sem.addl^data.info.on^behalf^svc^sub^fld^71.tag^data. rslt^1 <> [ $len ( sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data. rslt^1 ) * [ " " ] ] ) then begin max^num^cdes := $occurs( on^behalf^apprv^rslt^cdes^g ) - 1; idx := -1; while ( idx := idx + 1 ) < max^num^cdes and ( on^behalf^apprv^rslt^cdes^g[ idx ] <> sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data.rslt^1 ) and on^behalf^apprv^rslt^cdes^g[ idx ] <> " " do; if on^behalf^apprv^rslt^cdes^g[ idx ] = " " then begin if pct.pos.dest <> [ $len( pct.pos.dest ) * [ " " ] ] then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end; movd( pstm.typ, "9900" ); movd( pstm.responder, interface^orig^d ); movd( pstm.tran.resp^cde, "074" ); call util^send^pstm( pstm, pct.pos.dest ); end; ! of if pct.pos.dest call sem^request^deny( susp, sta^x, resp^system^error^sem^l, sub^system^error^l ); return; end; ! of if on^behalf^apprv^rslt^cdes^g. . . end; ! of if sem.addl^data. . . end; ! of if deny^failed^on^behalf^g end; ! of if addl^data^bit^d #ADD 06816 SEM^RESPONSE string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 06817 SEM^RESPONSE #ADD 06822 SEM^RESPONSE if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 06823 /06824 SEM^RESPONSE #ADD 07242j02 SEM^REVERSAL^ADVICE int .pbit^map := wordaddr( @rvsl.pbit^map ); #ADD 07243 SEM^REVERSAL^ADVICE string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #DELETE 07244 SEM^REVERSAL^ADVICE #ADD 07248 SEM^REVERSAL^ADVICE if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( rvsl.setl^dat, dat ); call util^ilf^dat( dat ); end; #DELETE 07249 /07250 SEM^REVERSAL^ADVICE #ADD 07259j01 SEM^REVERSAL^ADVICE if frwd^unmatched^rvsls^g = false then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, rvsl, $len( sem^def ), sub^rvsl^not^found^l ); return; end ! of if frwd^unmatched^rvsls^g = false else begin @pstm := @base24^msg; if rcode := sem^frmt^xrqst^to^pstm^0200( rvsl, pstm, sta^x ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, rvsl, $len( sem^def ), sub^format^error^l ); return; end ! if rcode = error else begin call sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm ); if base24^rel^g >= 6 then begin ! ! Determine the destination for the BASE24-pos ! reversal using the Acquirer Routing Token or the ! APCFEMT record. ! if rcode := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth_dest, log_auth_dest_resp, fatal_flg, emt_g[ apcfemt_idx_l ]. fname ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, rvsl, $len( sem^def ), sub^fail^pre^auth^l ); return; end else begin call util^send^pstm( pstm, auth_dest ); if log_auth_dest_resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end; end ! of if base24^rel^g >= 6 else begin call util^send^pstm( pstm, pct.pos.dest ); end; ! of base24^rel^g < 6 call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, rvsl, $len( sem^def ), sub^rvsl^not^found^l ); return; end; ! of if rcode = no error end; ! of if frwd^unmatched^rvsls^g = true #ENDSCN = SW08461 !*CMP2.13 08/10/04 BNETLIBS6083 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6083 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6083 * ******************************************************************************** #SCN = SW08469 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6083 #NEWVERSION = 6084 #DELETE 0002620C #DELETE 00026}0B #DELETE 00026{0D/00026#0E #DELETE 00026x0E #DELETE 00026u0o #DELETE 00026t2A #DELETE 00026s0D #DELETE 00026r0T #DELETE 00026q0O #DELETE 00026p0F #DELETE 00026o1A #DELETE 00026n0B #DELETE 00026m8O #DELETE 00026l0I #DELETE 00026h0O #DELETE 00026g2E #DELETE 00026f14 #DELETE 00026d1D #DELETE 00026b0F #DELETE 00026a09 #DELETE 00026Z3O #DELETE 00026Y0B #DELETE 00026W1A #DELETE 00026W1B #DELETE 00026W1C #DELETE 00026W1D #ADD 00026W1D ! 10AUG2004 frederr ! ! Symptom: The external response code (field 39) of 'N7' (VISA ! decline for CVV2 failure), is not supported by the ! interface. ! Problem: An 'N7' response code is not listed in the supported ! BankNet response codes. But if BankNet is being used ! to gateway VISA transactions to VISA and VISA sends the ! interchange an 'N7' response code, BankNet will forward ! this on to the acquirer. So, 'N7' does need to be ! supported by the interface. ! Fix: Modified the code to support an external response code ! of 'N7'. ! Modified procs: sem^frmt^resp^cde^to^pstm ! Dependency: Apply fix to BNETLIBS, run MAKE. ! Reference: Case #382211. #REPLACE 02779 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 32, #ADD 02821 SEM^FRMT^RESP^CDE^TO^PSTM "N7",! VISA Decline-CVV2 failure ! "074",! Unable to process #ENDSCN = SW08469 !*CMP2.13 08/26/04 BNETLIBS6084 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6084 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6084 * ******************************************************************************** #SCN = SW08495 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6084 #NEWVERSION = 6085 #ADD 00026817 ! 25AUG2004 OwallaD ! Symptom: Invalid PSTM transaction code check when identifying AVS ! Only transactions. ! Problem: The PSTM transaction code will be set to "10" at the ! point where the code determines if the transaction is an ! AVS Only transaction. Currently, the code checks for a ! PSTM transaction code of "00." ! Fix: Modified the code to check for a PSTM transction code of ! "10" when identifying AVS Only tranactions. ! Modified proc: SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #384561 #REPLACE 03615702 SEM^FRMT^XRQST^TO^PSTM^0200 pstm.tran.tran^cde.tc = "10" and #ENDSCN = SW08495 !*CMP2.13 10/04/04 BNETG 6030 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6030 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6030 * ******************************************************************************** #SCN = SW08553 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6030 #NEWVERSION = 6031 #ADD 00025d0T ! 04OCT2004 engelk ! Symptom: MasterCard approvals are being converted to BASE24 ! denials. ! Problem: MasterCard response code 85, was not included in the ! list of MasterCard response codes to be treated as an ! approval. ! Fix: Added 85 to the sem^approved^d define. ! Dependency: Apply fixes to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #385803. #REPLACE 00229 /00229 OFFSET 0 ( x.resp^cde = "08" ) or ( x.resp^cde = "85" )#, #ENDSCN = SW08553 !*CMP2.15 10/05/04 BNETLIBS6085 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6085 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6085 * ******************************************************************************** #SCN = SW08554 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0002690D ! 04OCT2004 engelk ! Symptom: MasterCard approvals are being converted to BASE24 ! denials. ! Problem: MasterCard response code 85, not declined, was not ! specifically mapped to an internal approved response ! code, so it defaulted to an internal general decline ! of 050. ! Fix: Mapped a SEM response code of 85 to an internal ! response code of 001, approved without balances. This ! response code will programmatically be changed to 000, ! approved with balances, if balances are available. ! Modified procs: sem^frmt^resp^cde^to^pstm ! Dependency: Apply fixes to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #385803. #REPLACE 02779801 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 33, #ADD 02817 SEM^FRMT^RESP^CDE^TO^PSTM "85",! Not Declined ! "001",! Approved w/o bal #ENDSCN = SW08554 !@CMP2.24 11/01/04 BNETG 6031 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6031 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6031 * ******************************************************************************** #SCN = SW08594 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6031 #NEWVERSION = 6032 #ADD 00026X00 ! 15OCT2004 SharmaR ! Symptom: ICC Application PSN ! Problem: None ! Fix: Sourced in PROD_ID_CONSTANTS from BADDLTAL and ! TKN^MAIN^CONVERT from BATKNCVE. ! Dependency: Apply fixes to BNETEMVM, BNETEMVS, BNETG, BNETM and ! run MAKE. ! Refer to BA60UD08.SCNICCA for a complete listing of ! dependencies. ! Reference: WO #040214-07 #ADD 00026Z00 ?nolist, source =basrc_baddltal( ? acct_typ_constants ? acq_rte_tkn ? alt^merch^id^tkn ? apcf_ ? apcf_prikey ? authn^data^tkn ? cmd ? crdhldr^serial^num^tkn ? emv^discr^tkn ? emv^rqst^tkn ? emv^resp^tkn ? emv^stat^tkn ? emv^script^tkn ? evt_msg_severity_constants ? extmem_constants ? fcb ? file_format_constants ? fname_lgth_constants ? iavs^data^tkn ? icf ? icfbase ? icfebase_, ? ichg^compliance^tkn ? ilf, ? ilf_ ? init_constants ? ipcf_ ? ipcf_prikey ? key6_ ? keyf ? lconf^key ? lconf ? mrch^serial^num^tkn ? msg_cat_constants ? msg_typ_constants ? orig^crncy^60^tkn ? pan_ ? pos^data1^tkn ? pos^mrch^tkn ? pos_dflt_chk_id_constants ? pos_msg_typ_constants ? posicf ? posicfe_ ? prod_id_constants ? ps50^tkn ? ps51^tkn ? ps2000^tkn ? pt^srv^data^tkn ? proc_cde ? prfl ? pstm ? pstm_ ? purchase^tkn ? sdcb ? sdcb_ ? sec_dev_typ_constants ? seg_constants ? stf ? swi^tkn ? swiicf ? swiicfe_ ? sym_name ? track1^tkn ? trans_stain_xid_tkn ? txn_alwd_constants ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ) #DELETE 00026Z01/00026Z15 #ADD 00026O2P ! prod_id_constants, #ADD 01366L48 ?nolist, source =basrc_batkncve( ? tkn^main^convert ? ) ?list ! tkn^main^convert ! ) #ENDSCN = SW08594 !@CMP2.24 11/01/04 BNETM 6002 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETM BNETM 6002 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETM BNETM 6002 * ******************************************************************************** #SCN = SW08595 , FILEID = BNETM #VOLUME = $ROOK.SW60BNET #FILE = BNETM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6002 #NEWVERSION = 6003 #ADD 0088B08 # 15OCT2004 SharmaR # Symptom: ICC Application PSN # Problem: None # Fix: Added BASRC_BATKNCVE to the dependency list # Dependency: Apply fixes to BNETEMVM, BNETEMVS, BNETG, BNETM and # run MAKE. # Refer to BA60UD08.SCNICCA for a complete listing of # dependencies. # Reference: WO #040214-07 #ADD 0133 $(basrc_batkncve) \ #ADD 0201 $(basrc_batkncve) \ #ENDSCN = SW08595 !@CMP2.24 11/08/04 BNETLIBS6086 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6086 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6086 * ******************************************************************************** #SCN = SW08624 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6086 #NEWVERSION = 6087 #ADD A000260F ! 08NOV2004 frederr ! Symptom: Field 61.11, pos card data terminal entry capability, ! is being sent with a value of '6', key entry only, for ! all e-commerce transactions sent to MasterCard. ! Problem: The interface is hardcoding the value of 61.11 to a ! '6' for all e-commerce transactions sent to MasterCard. ! Fix: Deleted the line of code that hardcoded 61.11 to a '6' ! for e-commerce transactions. This will allow the field ! to be populated the way it is for all transactions. ! Modified procs: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes BNETLIBS. Run MAKE. ! Reference: Case #387074. #DELETE 00700e03 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW08624 !@CMP2.24 11/16/04 BNETLIBS6087 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6087 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6087 * ******************************************************************************** #SCN = SW08649 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6087 #NEWVERSION = 6088 #ADD B000260D ! 16NOV2004 engelk ! Symptom: Transactions are being denied back to RTAU with an ! invalid response code of 30. ! Problem: The code uses the literal resp^format^error^sem^l (30) ! instead of the literal resp^format^error^pos^l (69) ! to identify a format error. ! Fix: Changed the code to return resp^format^error^pos^l. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #386633. #REPLACE 00700&0U PSTM^FRMT^0200^TO^XRQST return resp^format^error^pos^l; #ENDSCN = SW08649 !@CMP2.24 12/14/04 BNETLIBS6088 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6088 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6088 * ******************************************************************************** #SCN = SW09080 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6088 #NEWVERSION = 6089 #ADD C000260B ! 14DEC2004 frederr ! Symptom: MasterCard is not accepting 0620 messages from the ! interface due to a bad field 100 (receiving institution ! id). ! Problem: The interface is populating field 100 in 0620 messages ! with the acquirer's institution id found in either field ! 32 (acquiring institution id) or field 33 (forwarding ! institution id). With the ICA expansion, field 32 and ! 33 are now 6 bytes in length. MasterCard requires that ! field 100 only contain a 5 digit number, specifically ! the last 5 digits of field 32 or 33. ! Fix: Modified the interface to check the length of the ! acquiring institution id before moving it into field ! 100 on 0620 messages to MasterCard. If the acquiring ! institution id is 5 digits long then send the entire ! 5 digits to MasterCard. If it is 6 digits long then ! only send the last 5 digits to MasterCard. ! Modified proc: util^send^reject. ! Dependency: Apply fixes BNETLIBS. Run MAKE. ! Reference: Case #386284. #REPLACE 09387g01/09388g02 UTIL^SEND^REJECT if rcv^inst = "05" then begin ! ! MasterCard sent 5 bytes for the acquirer's institution ! id. All 5 (including the length which is included in ! rcv^inst) needs to be sent in the 0620. ! movl( sem.rcv^inst^id, rcv^inst, $len( sem.rcv^inst^id ) ); end else begin ! ! MasterCard sent 6 bytes for the acquirer's institution ! id. They only want the last 5 back in the 0620. ! movd( sem.rcv^inst^id.lgth, "05" ); movl( sem.rcv^inst^id.cde, rcv^inst[ 3 ], 5 ); end; #ENDSCN = SW09080 !@CMP2.24 01/12/05 BNETLIBS6089 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6089 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6089 * ******************************************************************************** #SCN = SW09136 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6089 #NEWVERSION = 6090 #ADD D000260K ! 12JAN2005 wielerk ! Symptom: Field 48 (UCAF data) may not be passed correctly. ! Problem: Token processing requires tokens to have even lengths. ! UCAF data can be odd length and padding with spaces can ! cause authentication to fail. ! Fix: Modified the interface to pass UCAF data for the length ! of significant data by removing trailing spaces. ! Modified proc: pstm^frmt^sem^addl^data ! Dependency: Apply fixes BNETLIBS. Run MAKE. ! Reference: Case #389247. #ADD 01541600 PSTM^FRMT^SEM^ADDL^DATA ! ! significant data must be passed with ! no pad bytes. data can be odd length ! data^lgth := $len( authn^data^tkn. authn^ind^data ); while authn^data^tkn.authn^ind^data. byte[ data^lgth - 1 ] = " " and data^lgth > 0 do begin data^lgth := data^lgth - 1; end; #DELETE 01541601/01541602 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW09136 !@CMP2.24 01/26/05 BNETDDLS6018 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6018 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6018 * ******************************************************************************** #SCN = SW09159 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6018 #NEWVERSION = 6019 #ADD 00262R0J * 26JAN2005 owallad * Symptom: Banknet Release 05.1 Mandates. * Problem: None. * Fix: 1. Modified sections BNRLF, FRQST, and PATH-RQST to * support three new fields for Stand-In Account File * Listings. The fields include an issuer-defined purge * date, card sequence number, and card expiration date. * 2. Updated the definition of SE 71 of DE 48 in the SEM * to include descriptions of two new values used for * identifying the on-behalf service performed on * transactions. * Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, BNETS, * RQBNRLFS, SCRNBRLF, and SVBNRLFS and run MAKE. Replace * BNETMAN and BNETUPDT. * Reference: WO #040918-04 #ADD 00635 FRQST * purge date for account listings submitted to the Account File * (YYYYMMDD format) 06 purge-dat pic x(8). * three-position card sequence number of the listed card 06 crd-seq-num pic x(3). * six-position expiration date of the listed card, stated in * (YYYYMM format) 06 crd-exp-dat pic x(6). #REPLACE 00636 /00637 FRQST * FILLER added to fill out the remaining 935 bytes. ! 06 filler2 pic x(935). #ADD 01157R09 SEM * 05 - MasterCard SecureCode AAV Verification Service * 06 - MasterCard SecureCode Dynamic AAV Verification in Stand-In #ADD 02431 ICF-BNET 06 purge-dat pic x(8). 06 crd-seq-num pic x(3). 06 crd-exp-dat pic x(6). #REPLACE 02432 ICF-BNET 06 fill2 pic x(26). #ADD 02530 BNRLF 04 purge-dat pic x(8). 04 crd-seq-num pic x(3). 04 crd-exp-dat pic x(6). #REPLACE 02566P01 BNRLF 04 filler1 pic x(2). #ENDSCN = SW09159 !@CMP2.24 01/26/05 BNETG 6032 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6032 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6032 * ******************************************************************************** #SCN = SW09161 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6032 #NEWVERSION = 6033 #ADD 00026f0B ! 26JAN2005 owallad ! Symptom: Banknet Release 05.1 Mandates. ! Problem: None. ! Fix: Removed the definition of global variable ! CVV2^RSLT^OPT^G because the corresponding LCONF ! parameter is no longer used by the interface. ! Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, BNETS, ! RQBNRLFS, SCRNBRLF, and SVBNRLFS and run MAKE. Replace ! BNETMAN and BNETUPDT. ! Reference: WO #040918-04 #DELETE 00448a01 #DELETE 01366a01 #ENDSCN = SW09161 !@CMP2.24 01/26/05 BNETLIBS6090 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6090 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6090 * ******************************************************************************** #SCN = SW09162 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD D000260L ! 26JAN2005 owallad ! Symptom: Banknet Release 05.1 Mandates. ! Problem: None. ! Fix: 1. Added support for three new fields in the Banknet ! file request message. The fields include an ! issuer-defined purge date, card sequence number, and ! card expiration date. ! 2. Modified the code to support UCAF data in the ! Authorization/01XX messages when the transaction is a ! phone order. ! 3. Modified the code to map BASE24-pos response code ! "99" (Bad PBF) to external response code "62" ! (Restricted Card) instead of external response code "96" ! (System Error). ! 4. Modified the processing of DE 61 to be consistent ! with that of the EPS-Net Interface. ! 5. Modified the code to send the CVC2 value outbound ! from the interface regardless of how Track2 data is ! entered. ! 6. Removed usage of global variable CVV2^RSLT^OPT^G ! because the corresponding LCONF parameter is no longer ! used by the interface. ! Modified procs: PATH^FRMT^FILE^RQST ! PSTM^FRMT^0200^TO^XRQST ! PSTM^FRMT^RESP^CDE^TO^SEM ! PSTM^FRMT^SEM^ADDL^DATA ! SEM^FRMT^XRESP^TO^PSTM^0210 ! SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, BNETS, ! RQBNRLFS, SCRNBRLF, and SVBNRLFS and run MAKE. Replace ! BNETMAN and BNETUPDT. ! Reference: WO #040918-04 #ADD 00463 PATH^FRMT^FILE^RQST lgth := $offset( sem.file^rec.mcc102.filler2 ) - $offset( sem.file^rec.mcc102.pan ); call integer^ascii^( sem.file^rec.lgth, lgth ); #DELETE 00464 PATH^FRMT^FILE^RQST #ADD 00494 PATH^FRMT^FILE^RQST move( sem.file^rec.mcc102.crd^seq^num, path.frqst.mcc102.crd^seq^num ); move( sem.file^rec.mcc102.crd^exp^dat, path.frqst.mcc102.crd^exp^dat ); if path.frqst.mcc102.purge^dat <> [ $len (path.frqst.mcc102.purge^dat ) * [ " " ] ] then begin move( sem.file^rec.mcc102.purge^dat, path.frqst.mcc102.purge^dat ); end; #ADD 00659;07 PSTM^FRMT^0200^TO^XRQST end else if pstm.tran.ovrrde^flg = "3" then begin ! ! Off premises of card acceptor facility, merchant ! terminal, remote location. ! movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "1" ); end; tkn^id ':=' ps51^tkn^id^d; If pstm.pt^srv^cond^cde = "15" or sem.pos^entry^mde = "81" then begin ! ! Electronic order, home PC. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "5" ); end else if pstm.pt^srv^cond^cde = "01" then begin ! ! Cardholder not present, unspecified. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "1" ); end else if pstm.pt^srv^cond^cde = "07" or ( pstm.pt^srv^cond^cde = "08" and hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) and ps51^get^tkn.authn^coll^ind = "2" ) then begin ! ! Cardholder not present, telephone/ARU order. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); end else if pstm.pt^srv^cond^cde = "08" then begin ! ! Cardholder not present, mail/facsimile order. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "2" ); end; #DELETE 00659;08/00659(06 PSTM^FRMT^0200^TO^XRQST #DELETE 00659X1J/00659X1K PSTM^FRMT^0200^TO^XRQST #REPLACE 00659<02/00659<02 OFFSET 0 PSTM^FRMT^0200^TO^XRQST pstm.pt^srv^cond^cde = "15" or pstm.pt^srv^cond^cde = "01" or sem.pos^entry^mde = "81" then #ADD 00659X20 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "10" then begin ! ! Customer identity verified. ! movd( sem.ntl^pos^data.cond^cde.byte[ 7 ], "2" ); end; if pstm.pt^srv^entry^mde = "02" then begin ! ! Magnetic stripe reader. ! movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "2" ); end; if pstm.pt^srv^entry^mde = "01" then begin ! ! Key entry only. ! movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "6" ); end; #DELETE 00659;0L/00659;0R PSTM^FRMT^0200^TO^XRQST #ADD 0070070N PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "1" ); #ADD 00700&0E PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then begin ! ! Telephone/ARU order. ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" then begin ! ! Key entry only. ! return resp^format^error^pos^l; end; end else if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "5" then begin ! ! Electronic order, home PC, internet. ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" then begin ! ! Key entry only. ! return resp^format^error^pos^l; end; end else begin return resp^format^error^pos^l; end; end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42 #DELETE 00700&0F/00700&0V PSTM^FRMT^0200^TO^XRQST #REPLACE 01325 PSTM^FRMT^RESP^CDE^TO^SEM "099",! bad PBF ! "62",! Restricted card ! #ADD 01425W01 PSTM^FRMT^SEM^ADDL^DATA int phn^order^txn := false; int ps51^tkn^found := false; int .pt^srv^data^tkn( pt^srv^data^tkn^def ); int pt^srv^data^tkn^lgth; #REPLACE 01541l00 PSTM^FRMT^SEM^ADDL^DATA ps51^tkn^found := true; #DELETE 01541m0E/01541m0F PSTM^FRMT^SEM^ADDL^DATA #REPLACE 01541m0G PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.cvd^fld <> blanks for #ADD 01541W2Z PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 and sem.addl^data.info.ecom^sec^sub^fld^42.tag <> "42" then begin tkn^id ':=' pt^srv^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pt^srv^data^tkn, pt^srv^data^tkn^lgth ) then begin ! ! Point Of Service Data Token present. ! if pt^srv^data^tkn.crdhldr^present^ind = "3" then begin ! ! Cardholder not present, telephone/ARU order. ! phn^order^txn := true; end; end else begin ! ! Point Of Service Data Token not present. ! if pstm.pt^srv^cond^cde = "07" then begin ! ! Telephone device request. ! phn^order^txn := true; end; end; ! of if hiswtkn^get^tkn if pstm.pt^srv^cond^cde = "08" and ps51^tkn^found and ps51^get^tkn.authn^coll^ind = "2" then begin ! ! MOTO/UCAF data collection is supported by the merchant ! and UCAF data was populated. ! phn^order^txn := true; end; if phn^order^txn then begin ! ! Phone order transactions must have DE 22 subfield 1 set ! to "00" or "01". ! if sem.pos^entry^mde <> "01" then begin movd( sem.pos^entry^mde, "00" ); end; movd( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec, "91" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.tag, "42" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.lgth, "07" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.subfld^id, "01" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.data^lgth, "03" ); if ps51^tkn^found and ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [ " " ] ] then begin move( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); end else begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "0" ); end; call ascii^integer( sem.addl^data.info. ecom^sec^sub^fld^42.lgth, $len( sem.addl^data.info. ecom^sec^sub^fld^42.lgth), sub^lgth ); lgth := lgth + sub^lgth + 4; if ps51^tkn^found then begin if ps51^get^tkn.authn^coll^ind = "2" then begin tkn^id ':=' authn^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @authn^data^tkn, authn^data^tkn^lgth ) then begin movd( sem.addl^data.info.ucaf^sub^fld^43.tag, "43" ); ! ! If the length of the token's Authentication ! Indicator Data is less than or equal to 32, ! move the token's UCAF data into the SE 43's ! TAG^DATA field for that length. Otherwise, ! move the data for the the maximum of 32 ! bytes. Set SE 43's length field to ! accordingly. ! data^lgth := $len( authn^data^tkn.authn^ind^data ); while ( data^lgth > 0 ) and ( authn^data^tkn. authn^ind^data. byte[ data^lgth - 1 ] = " " ) do begin data^lgth := data^lgth - 1; end; if data^lgth <= 32 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43.lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data, data^lgth ); end else begin movd( sem.addl^data.info.ucaf^sub^fld^43. lgth, "32" ); move( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43.lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end else begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "1" ); end; end; ! of if ps51^get^tkn.authn^coll^ind end; ! of if ps51^tkn^found end; ! of if phn^order^txn end; ! of if base24^rel^g #ADD 03138m01 SEM^FRMT^XRESP^TO^PSTM^0210 int crd^read^txn^flg := true; int cvd2^rslt^present^flg := false; int trk1^tkn^prsn := false; int track1^get^lgth; int .track1^get^tkn( track1^tkn^def ); string crd^vrfy^flg2 := " "; #ADD 03208d02 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' track1^tkn^id^d; if base24^rel^g >= 5 and hiswtkn^get^tkn( pstm, tkn^id, @track1^get^tkn, track1^get^lgth ) then begin trk1^tkn^prsn := true; end; ! ! The external response message contains a CVD1 or CVD2 ! result code. ! if ( pstm.tran.track2.byte[ 0 ] <> "m" and pstm.tran.track2.byte[ 0 ] <> "M" ) or trk1^tkn^prsn then begin ! ! This is a card-read transaction. Map the CVD1 ! result to the CRD-VRFY-FLG field in the PS50 Token. ! if sem.addl^data.info.cvc^sub^fld^87. tag^data = "Y" then begin ! ! This is a CVD1 result, no CVD2 result is ! present. ! movd( card^vrfy^flg, "D" ); movd( crd^vrfy^flg2, "N" ); end else begin ! ! This is a CVD2 result, so CVD1 must be valid. ! movd( card^vrfy^flg, "Y" ); cvd2^rslt^present^flg := true; end; end ! Card-read transaction else begin ! ! This is a manually-entered transaction containing a ! CVD2 result. ! crd^read^txn^flg := false; cvd2^rslt^present^flg := true; end; if cvd2^rslt^present^flg then begin ! ! Map the CVD2 result to the CRD-VRFY-FLG2 field in ! the POS Data1 Token. ! #REPLACE 03208m01/03208m02 SEM^FRMT^XRESP^TO^PSTM^0210 case sem.addl^data.info.cvc^sub^fld^87.tag^data of begin #DELETE 03208m03/03208m0D SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 03208m0F/03208m0L SEM^FRMT^XRESP^TO^PSTM^0210 "M" -> begin ! ! ! CVC2 match ! ! ! movd( crd^vrfy^flg2, "Y" ); end; #REPLACE 03208m0N/03208m0T SEM^FRMT^XRESP^TO^PSTM^0210 "N" -> begin ! ! ! Invalid CVC2 ! ! ! movd( crd^vrfy^flg2, "C" ); end; #REPLACE 03208m0V/03208m11 SEM^FRMT^XRESP^TO^PSTM^0210 "P" -> begin ! ! ! CVC2 not processed ! ! ! movd( crd^vrfy^flg2, "N" ); end; #REPLACE 03208m13/03208m1O SEM^FRMT^XRESP^TO^PSTM^0210 "U" -> begin ! ! ! Issuer unregistered for CVC2 processing ! ! ! movd( crd^vrfy^flg2, "U" ); end; "S" -> begin ! ! ! Acquirer indicates CVC2 missing, CVC2 on ! ! card ! ! movd( crd^vrfy^flg2, "O" ); end; otherwise -> begin ! ! ! Unknown value passed ! ! ! movd( crd^vrfy^flg2, "N" ); end; ! of otherwise ! end; ! of case ! #REPLACE 03208d06/03208d0S SEM^FRMT^XRESP^TO^PSTM^0210 if sem.pan.num = "4" and ! visa ! ( sem.pan.lgth = "13" or sem.pan.lgth = "16" ) then begin if sem.addl^data.info.cvc^sub^fld^87. tag^data = "M" then movd( crd^vrfy^flg2, "Y" ) else if sem.addl^data.info.cvc^sub^fld^87. tag^data = "N" then movd( crd^vrfy^flg2, "C" ) else if sem.addl^data.info.cvc^sub^fld^87. tag^data = "P" then movd( crd^vrfy^flg2, "N" ) else if sem.addl^data.info.cvc^sub^fld^87. tag^data = "S" then movd( crd^vrfy^flg2, "O" ) else if sem.addl^data.info.cvc^sub^fld^87. tag^data = "U" then movd( crd^vrfy^flg2, " " ) end; ! of if visa ! end; ! of if cvd2^rslt^present^flg #ADD 03208=00 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.cvc^sub^fld^87.tag = "87" and ( rqst.addl^data.info.visa^cvv2^sub^fld^92.tag = "92" and rqst.addl^data.info.visa^cvv2^sub^fld^92. prsn^ind = "1" and rqst.addl^data.info.visa^cvv2^sub^fld^92.tag^data <> [ $len( rqst.addl^data.info.visa^cvv2^sub^fld^92. tag^data ) * [ " " ] ] ) then begin ! ! Map the CVD2 result to the CRD-VRFY-FLG2 field in the ! POS Data1 Token. ! #DELETE 03208=01/03208=05 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 03208=08 SEM^FRMT^XRESP^TO^PSTM^0210 move( pos^data1^tkn.crd^vrfy^flg2, crd^vrfy^flg2 ); #REPLACE 03208=16 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if DE 48 SE 87 present ! #DELETE 03208=17/03208=1B SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 03208=1C SEM^FRMT^XRESP^TO^PSTM^0210 tkn^lgth := 0; #REPLACE 03208=1E/03208=1s SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.cvc^sub^fld^87.tag = "87" and sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag = "84" then begin if not crd^read^txn^flg then begin ! ! If this is a card-read transaction, map the CVD1 ! result within CRD^VRFY^FLG to the CRD-VRFY-FLG ! field in the PS50 Token. If this is a manually- ! entered transaction, map the CVD2 result within ! CRD^VRFY^FLG2 to the CRD-VRFY-FLG field in the ! PS50 Token. ! card^vrfy^flg := crd^vrfy^flg2; end; call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, card^vrfy^flg ); end ! of if tag = "87" and "84" ! else if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then begin if not crd^read^txn^flg then begin ! ! If this is a card-read transaction, map the CVD1 ! result within CRD^VRFY^FLG to the CRD-VRFY-FLG ! field in the PS50 Token. If this is a manually- ! entered transaction, map the CVD2 result within ! CRD^VRFY^FLG2 to the CRD-VRFY-FLG field in the ! PS50 Token. ! card^vrfy^flg := crd^vrfy^flg2; end; call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, ! err^flg !, ! rte^grp !, card^vrfy^flg ); end ! of if tag = "87" ! else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag = "84" then begin call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, lgth, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, ! card^vrfy^flg ! ); end; ! of if tag = "84" ! #DELETE 03208=1t SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03586X00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[3] = "2" then !03586X01 #DELETE 03586X01 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03586X03/03586X04 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 03594Q01/03594Q01 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 movd ( pstm.pt^srv^cond^cde, "10" ) else if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then begin ! ! Cardholder not present, phone/ARU order. ! movd( pstm.pt^srv^cond^cde, "07" ); end; #ADD 03594X25 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71.tag = "71" then begin if sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data.svc = "05" or sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data.svc = "06" then begin if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data.rslt^1 = "I" then begin ! ! Failed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "1" ); end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data.rslt^1 = "U" then begin ! ! Not validated due to erroneous data. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "0" ); end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data.rslt^1 = "V" then begin ! ! Passed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "2" ); end; end; end; ! of if sem.addl^data. . .tag = "71" if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" then begin ! ! Cardholder not present, phone/ARU order. ! if sem.addl^data.info.ecom^sec^sub^fld^42 = "42" and sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec <> [ $len( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec ) * [ " " ] ] and sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec <> [ $len( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec ) * [ "0" ] ] then begin if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" then begin move( ps51^tkn^data.authn^coll^ind, sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind ); end; end; end; ! of if sem.ntl^pos^data.cond^cde #ADD 03594t17 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then begin ! ! Telephone/ARU order. ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" then begin ! ! Key entry only. ! movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; end else if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "5" then begin ! ! Electronic order, home PC, internet. ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" then begin ! ! Key entry only. ! movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; end else begin movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42 #DELETE 03594t18/03594t1H SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE D0938700/D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT if rcv^inst = "05" then #ADD D093870L UTIL^SEND^REJECT begin #ADD D093870L UTIL^SEND^REJECT ! ! #ADD D093870L UTIL^SEND^REJECT ! MasterCard sent 5 bytes for the acquirer's institution ! #ADD D093870L UTIL^SEND^REJECT ! id. All 5 (including the length which is included in ! #ADD D093870L UTIL^SEND^REJECT ! rcv^inst) needs to be sent in the 0620. ! #ADD D093870L UTIL^SEND^REJECT ! ! #ADD D093870L UTIL^SEND^REJECT movl( sem.rcv^inst^id, rcv^inst, $len( sem.rcv^inst^id ) ); #ADD D093870L UTIL^SEND^REJECT end #ADD D093870L UTIL^SEND^REJECT else #ADD D093870L UTIL^SEND^REJECT begin #ADD D093870L UTIL^SEND^REJECT ! ! #ADD D093870L UTIL^SEND^REJECT ! MasterCard sent 6 bytes for the acquirer's institution ! #ADD D093870L UTIL^SEND^REJECT ! id. They only want the last 5 back in the 0620. ! #ADD D093870L UTIL^SEND^REJECT ! ! #ADD D093870L UTIL^SEND^REJECT movd( sem.rcv^inst^id.lgth, "05" ); #ADD D093870L UTIL^SEND^REJECT movl( sem.rcv^inst^id.cde, rcv^inst[ 3 ], 5 ); #ADD D093870L UTIL^SEND^REJECT end; #ADD D093870L UTIL^SEND^REJECT #ADD D093870L UTIL^SEND^REJECT #ENDSCN = SW09162 !@CMP2.24 01/26/05 BNETS 6068 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6068 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6068 * ******************************************************************************** #SCN = SW09164 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00026]0g ! 26JAN2005 owallad ! Symptom: Banknet Release 05.1 Mandates. ! Problem: None. ! Fix: 1. Added support for two more values in SE 71 of DE 48. ! These values are used for identifying the on-behalf ! service performed on transactions. ! 2. Added support for three new fields in the BNRLF. The ! fields include an issuer-defined purge date, card ! sequence number, and card expiration date. ! 3. Removed support for LCONF parameter ! CVV2-RESULT-OPTION along with its corresponding global ! varaible CVV2^RSLT^OPT^G. ! Modified procs: CMD^WARMBOOT^STORE^GLOBALS ! CMD^WARMBOOT^RETRIEVE^GLOBALS ! INIT^PARAMPROC ! SEM^FILE^REQUEST^RESPONSE ! SEM^REQUEST ! Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, BNETS, ! RQBNRLFS, SCRNBRLF, and SVBNRLFS and run MAKE. Replace ! BNETMAN and BNETUPDT. ! Reference: WO #040918-04 #DELETE 02599&01 CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599&04 CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599&07 CMD^WARMBOOT^RETRIEVE^GLOBALS #DELETE 03945&01 INIT^PARAMPROC #DELETE 03996&01/03996&0K INIT^PARAMPROC #ADD 06064 SEM^FILE^REQUEST^RESPONSE move( bnrlf.mcc.crd^seq^num, frqst.file^rec.mcc102.crd^seq^num ); move( bnrlf.mcc.crd^exp^dat, frqst.file^rec.mcc102.crd^exp^dat ); move( bnrlf.mcc.purge^dat, frqst.file^rec.mcc102.purge^dat ); #REPLACE 06612]0P/06612]0P OFFSET 0 SEM^REQUEST svc = "03" or sem.addl^data.info.on^behalf^svc^sub^fld^71.tag^data. svc = "05" or sem.addl^data.info.on^behalf^svc^sub^fld^71.tag^data. svc = "06" ) and #ENDSCN = SW09164 !@CMP2.24 01/26/05 RQBNRLFS6014 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6014 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6014 * ******************************************************************************** #SCN = SW09165 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6014 #NEWVERSION = 6015 #ADD 00018N0K * 26JAN2005 owallad * Symptom: Banknet Release 05.1 Mandates. * Problem: None. * Fix: Added code to validate data in new screen fields * CARD SEQUENCE NUMBER, PURGE DATE, and CARD * EXPIRATION DATE. * Modified sections: 480-DATA-CHECK * DATA DIVISION * Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, * BNETS, RQBNRLFS, SCRNBRLF, and SVBNRLFS and run * MAKE. Replace BNETMAN and BNETUPDT. * Reference: WO #040918-04 #ADD 00061 DATA DIVISION 01 WS-DATE-CHECK-3. 05 YEAR-3 PIC 9(4). 88 VALID-YEAR-3 VALUE 2000 THRU 2025. 05 MONTH-3 PIC 9(2). 88 VALID-MONTH-3 VALUE 1 THRU 12. 05 DAY-3 PIC 9(2). 88 VALID-DAY-3 VALUE 1 THRU 31. #ADD 00575 480-DATA-CHECK * * Validate Card Sequence Number. * IF WS-OVERLAY = 2 IF CRD-SEQ-NUM OF MCC102 OF PATH-RQST = SPACES MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-SEQ-NUM-2 IF MOVE-MESSAGE MOVE "CARD SEQUENCE NUMBER IS REQUIRED" TO ERR-TXT SET NEW-CURSOR AT B-CRD-SEQ-NUM-2 MOVE "N" TO FLAG-MOVE. IF WS-OVERLAY = 2 IF CRD-SEQ-NUM OF MCC102 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-SEQ-NUM-2 IF MOVE-MESSAGE MOVE "CARD SEQUENCE NUMBER MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-SEQ-NUM-2 MOVE "N" TO FLAG-MOVE. #ADD 00613 480-DATA-CHECK * * Validate Purge Date. * IF WS-OVERLAY = 2 IF PURGE-DAT OF MCC102 OF PATH-RQST NOT NUMERIC AND PURGE-DAT OF MCC102 OF PATH-RQST NOT = SPACES MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-2 IF MOVE-MESSAGE MOVE "PURGE DATE MUST BE NUMERIC OR SPACES" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-2 MOVE "N" TO FLAG-MOVE. IF WS-OVERLAY = 2 IF PURGE-DAT OF MCC102 OF PATH-RQST NUMERIC MOVE PURGE-DAT OF MCC102 OF PATH-RQST TO WS-DATE-CHECK-3 IF NOT VALID-YEAR-3 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-2 IF MOVE-MESSAGE MOVE "INVALID YEAR, MUST BE YYYYMMDD FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-2 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH-3 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-2 IF MOVE-MESSAGE MOVE "INVALID MONTH, MUST BE YYYYMMDD FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-2 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY-3 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-2 IF MOVE-MESSAGE MOVE "INVALID DAY, MUST BE YYYYMMDD FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-2 MOVE "N" TO FLAG-MOVE. #ADD 00625 480-DATA-CHECK * * Validate Card Expiration Date. * IF WS-OVERLAY = 2 IF CRD-EXP-DAT OF MCC102 OF PATH-RQST = SPACES MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-2 IF MOVE-MESSAGE MOVE "CARD EXPIRATION DATE IS REQUIRED" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-2 MOVE "N" TO FLAG-MOVE. IF WS-OVERLAY = 2 IF CRD-EXP-DAT OF MCC102 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-2 IF MOVE-MESSAGE MOVE "CARD EXPIRATION DATE MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-2 MOVE "N" TO FLAG-MOVE. IF WS-OVERLAY = 2 IF CRD-EXP-DAT OF MCC102 OF PATH-RQST NUMERIC MOVE CRD-EXP-DAT OF MCC102 OF PATH-RQST TO WS-DATE-CHECK-3 IF NOT VALID-YEAR-3 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-2 IF MOVE-MESSAGE MOVE "INVALID YEAR, MUST BE YYYYMM FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-2 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH-3 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-2 IF MOVE-MESSAGE MOVE "INVALID MONTH, MUST BE YYYYMM FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-2 MOVE "N" TO FLAG-MOVE. #ENDSCN = SW09165 !@CMP2.24 01/26/05 SVBNRLFS6007 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6007 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6007 * ******************************************************************************** #SCN = SW09167 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00005G0Q * 26JAN2005 owallad * Symptom: Banknet Release 05.1 Mandates. * Problem: None. * Fix: Added support for new screen fields CARD SEQUENCE * NUMBER, PURGE DATE, and CARD EXPIRATION DATE. * Modified section: DATA DIVISION * Dependency: Apply fix to BNETDDLS, BNETEMVS, BNETLIBS, BNETG, * BNETS, RQBNRLFS, SCRNBRLF, and SVBNRLFS and run * MAKE. Replace BNETMAN and BNETUPDT. * Reference: WO #040918-04 #ADD 00214B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00214D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00267B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00267D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00320B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00320D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00373B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00373D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00426B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00426D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00479B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00479D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00532B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00532D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00585B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00585D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00638B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00638D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ADD 00691B00 DATA DIVISION 03 WS-PURGE-DAT PIC X(8). 03 WS-CRD-SEQ-NUM PIC X(3). 03 WS-CRD-EXP-DAT PIC X(6). #REPLACE 00691D01 DATA DIVISION 03 WS-FILLER1 PIC X(52). #ENDSCN = SW09167 !@CMP2.24 02/16/05 BNETLIBS6091 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6091 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6091 * ******************************************************************************** #SCN = SW09192 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F000260W ! 15FEB2005 engelk ! Symptom: The interface is not populating subelement 76, ! MasterCard Electronic Acceptance Indicator, of DE48, ! additional data, if that data was available in the CI ! token (POS Merchant token). ! Problem: The interface was not coded to pass the MasterCard ! Electronic Acceptance Indicator information on if it ! was received in a PSTM request. The interface assumed ! that MasterCard would return that information in a ! response. ! Fix: Added code to populate subelement 76 of DE48 in SEM ! requests based upon the POS Merchant token's MasterCard ! electronic acceptance indicator if the POS Merchant ! token is present. Added code to update the POS ! merchant token with DE48 subelement 76 if the token is ! already present in the PSTM request and its value in ! the MasterCard response is different from that in the ! token. ! Procs modified: pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #390975 #REPLACE 01491Z08/01491Z09 PSTM^FRMT^SEM^ADDL^DATA .pos^mrch^tkn( pos^mrch^tkn^def ), pos^mrch^tkn^lgth, #ADD F015412o PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 and sem.typ = sem^auth^request^d then begin movd( tkn^id, pos^mrch^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn, pos^mrch^tkn^lgth ) then begin if pos^mrch^tkn.mc^elec^accpt^ind = "C" or pos^mrch^tkn.mc^elec^accpt^ind = "E" or pos^mrch^tkn.mc^elec^accpt^ind = "M" or pos^mrch^tkn.mc^elec^accpt^ind = "U" then begin movd( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag, "76" ); movd( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.lgth, "01" ); move( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag^data, pos^mrch^tkn.mc^elec^accpt^ind ); lgth := lgth + 5; end; ! valid MC electonic acceptance indicator end; ! if POS merchant token (CI) found end; ! if base24^rel^g >= 5 #REPLACE 03135=02 SEM^FRMT^XRESP^TO^PSTM^0210 .pos^mrch^tkn^ptr( pos^mrch^tkn^def ), #REPLACE 0320870n/0320870p SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of base24^rel^g >= 5 ! if base24^rel^g >= 5 and sem.typ = sem^auth^response^d and sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag = "76" then begin movd( tkn^id, pos^mrch^tkn^id^d ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^mrch^tkn^ptr, pos^mrch^tkn^lgth, ! display format !, pos^userdata ); if tkn^result = compl^no^err^l and pos^mrch^tkn^ptr.mc^elec^accpt^ind <> sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data then begin ! ! If token already exists, update as necessary. ! movl( pos^mrch^tkn^ptr.mc^elec^accpt^ind, sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data, $len( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76. tag^data ) ); end ! need up update CI token else if tkn^result = tkn^does^not^exist^l and sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data <> " " then begin ! ! If token not present and data is available, add it ! init( pos^mrch^tkn, " ", wlen( pos^mrch^tkn ) ); movl( pos^mrch^tkn.mc^elec^accpt^ind, sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data, $len( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76. tag^data ) ); pos^mrch^tkn^lgth := $len( pos^mrch^tkn ); tkn^lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^mrch^tkn, pos^mrch^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3180, ! routing code !, @noroom^pmrch^pstm, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3185, ! routing code !, @err^add^pmrch^tkn, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3185 ); end; end; ! of if tkn^result end; ! if need to add CI token end; ! if base24^rel^g >= 5 and DE48 subfield 76 present if base24^rel^g < 5 then #DELETE 0320870q/03208Q2G SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 03208Q3I SEM^FRMT^XRESP^TO^PSTM^0210 end; ! if base24^rel^g < 5 ! #ENDSCN = SW09192 !@CMP2.24 02/18/05 BNETDDLS6019 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6019 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6019 * ******************************************************************************** #SCN = SW09214 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6019 #NEWVERSION = 6020 #ADD 00262S0G * 17FEB2005 owallad * Symptom: Access to data fields following three new fields added * within the BNRLF file structure may be disrupted. The * new fields were added as a result of the release 05.1 * mandates. * Problem: The insertion of the three new fields altered the layout * of data in the BNRLF. This could cause problems if need * arose to access/use data fields following the three new * fields in the BNRLF file structure. * Fix: Moved the three new fields to the end of the BNRLF file * structure so that preexisting fields remain * uninterrupted. * Dependency: Apply fix to BNETDDLS and run MAKE. * Reference: Case #391169 #DELETE 02530S01/02530S03 BNRLF #ADD 02566 BNRLF 04 purge-dat pic x(8). 04 crd-seq-num pic x(3). 04 crd-exp-dat pic x(6). #ENDSCN = SW09214 !@CMP2.24 02/24/05 BNETS 6069 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6069 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6069 * ******************************************************************************** #SCN = SW09222 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00026^0L ! 24FEB2005 engelk ! Symptom: Not all transactions from acquirers who are not ! participating in MasterCard Electronic are being denied ! when configured by the DENY-MC-E-COMM-TXN LCONF param ! to deny them. ! Problem: When the check on DE-48 subfield 76, MasterCard ! Electronic Acceptance Indicator, was added to deny ! transactions from acquirers who were not participating ! in this program, it neglected to include a check for ! a value of "U", Unidentified acquirer. In this case, ! it is not known if the acquirer is a MasterCard ! Electronic participant. ! Fix: Changed the code so that only requests from acquirers ! known to be MasterCard Electronic participants are ! sent on if the interface is configured to deny ! transactions from acquirers who are not participants. ! Procs modified: sem^request ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #391681 #REPLACE 06612]08/06612]08 OFFSET 0 SEM^REQUEST tag^data = "C" or sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "U" ) and #ENDSCN = SW09222 !@CMP2.24 03/03/05 BNETLIBS6092 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6092 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6092 * ******************************************************************************** #SCN = SW09224 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G000260M ! 01MAR2005 engelk ! Symptom: Issuer E-commerce transactions are declined by the ! interface indicating a problem with field 48. ! Problem: Edits added as part of the April mandates for phone ! order transactions incorrectly declined all ! transactions for which UCAF data collection was not ! supported by the merchant if subfield 4, POS ! Cardholder Presence, of DE-61, Point of Service ! Data was other than "3" (cardholder not present, ! phone/ARU order) or "5"(Electronic order; home PC, ! Internet). ! Fix: Removed the above edit as it was incorrect and any ! edits on phone order transactions should be done by ! MasterCard before they are sent on to the issuer. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #391882. #DELETE F035941F/F035941x SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW09224 !@CMP2.24 03/15/05 BNETS 6070 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6070 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6070 * ******************************************************************************** #SCN = SW09248 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00026`0J ! 15MAR2005 wielerk ! Symptom: Either the process dumps after adding the B8 token ! (transaction profile) to the acquired request, or the ! B8 token is not sent back to Base24. ! Problem: If the B8 token does not exist, the process will add it. ! If the processing code is not supported, the length of ! the newly added B8 token is not added to the PSTM ! length. ! Fix: Modified the code to add the length of the newly added ! B8 token to the SUSP internal message length. ! Procs modified: pstm^0200^request ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #392309. #ADD 04788|0N PSTM^0200^REQUEST susp.intrn^msg^lgth := susp.intrn^msg^lgth + tkn_lgth; #ENDSCN = SW09248 !@CMP2.24 03/29/05 BNETS 6071 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6071 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6071 * ******************************************************************************** #SCN = SW09258 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00026~0E ! 29MAR2005 frederr ! Symptom: MasterCard is rejecting request messages due to invalid ! data in DE 120 (Record Data). ! Problem: MasterCard defines DE 120 differently based upon the AVS ! Service Indicator set at logon time. The interface is ! only supporting an AVS Service Indicator of 1. If an ! AVS Service Indicator of 0, 2 or 3 is used, the ! interface is still populating DE 120 as it should for ! AVS Service Indicator of 1. This is causing the ! MasterCard reject. ! Fix: Modified the interface to support AVS Service Indicators ! of 0, 1, 2 and 3 for DE 120. ! Procs modified: pstm^0200^request ! pstm^0220^force^post. ! Dependency: Apply fix to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #392174. #REPLACE 04715 PSTM^0200^REQUEST int avs^typ := -1; #ADD 04751 PSTM^0200^REQUEST if not util^get^bniif( fiid^l, pstm.term^fiid, susp.prikey.term^id, logon^acq, !logon^iss!, logon^cr, logon^db, !service^typ!, !traffic^typ!, !security!, !prefix!, !prefix^lgth!, avs^typ ) then #DELETE 04752 /04753 PSTM^0200^REQUEST #ADD 04808R01 PSTM^0200^REQUEST sem, susp.prikey, avs^typ ) then #DELETE 04808R02 PSTM^0200^REQUEST #ADD 04984 PSTM^0220^FORCE^POST int avs^typ := -1; #ADD 04999R01 PSTM^0220^FORCE^POST susp.prikey.term^id, !logon^acq!, !logon^iss!, !logon^cr!, !logon^db!, !service^typ!, !traffic^typ!, !security!, !prefix!, !prefix^lgth!, avs^typ ) then #DELETE 04999R02 PSTM^0220^FORCE^POST #ADD 05011R01 PSTM^0220^FORCE^POST susp.prikey, avs^typ ) then #DELETE 05011R02 PSTM^0220^FORCE^POST #ENDSCN = SW09258 !@CMP2.24 03/29/05 BNETLIBS6093 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6093 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6093 * ******************************************************************************** #SCN = SW09259 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H000260I ! 29MAR2005 frederr ! Symptom: MasterCard is rejecting request messages due to invalid ! data in DE 120 (Record Data). ! Problem: MasterCard defines DE 120 differently based upon the AVS ! Service Indicator set at logon time. The interface is ! only supporting an AVS Service Indicator of 1. If an ! AVS Service Indicator of 0, 2 or 3 is used, the ! interface is still populating DE 120 as it should for ! AVS Service Indicator of 1. This is causing the ! MasterCard reject. ! Fix: Modified the interface to support AVS Service Indicators ! of 0, 1, 2 and 3 for DE 120. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! util^get^bniif. ! Dependency: Apply fix to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #392174. #ADD 00521 PATH^FRMT^FILE^RQST !# AVS^TYP : AVS type for this FIID. # #ADD 00526 PSTM^FRMT^0200^TO^XRQST int proc pstm^frmt^0200^to^xrqst( pstm, sem, prikey, avs^typ ) extensible; #DELETE 00527 PSTM^FRMT^0200^TO^XRQST #ADD 00530 PSTM^FRMT^0200^TO^XRQST int .avs^typ; #REPLACE 00712J04/00712J04 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if pstm.addr^typ = "98" and avs^typ > 0 then #ADD 00712J06 PSTM^FRMT^0200^TO^XRQST if avs^typ = 1 or avs^typ = 2 then begin movd( sem.crdhldr^addr.addr^tag, "01" ); end else begin movd( sem.crdhldr^addr.addr^tag, "03" ); end; #DELETE 00712J07 PSTM^FRMT^0200^TO^XRQST #DELETE 00712J0B/00712t00 PSTM^FRMT^0200^TO^XRQST #DELETE 00712t09/00712t0N PSTM^FRMT^0200^TO^XRQST #ADD 00712t0P PSTM^FRMT^0200^TO^XRQST ! ! For AVS type 1, the length of the subfield should always be ! 49 for VISA cards, 29 for all other card types. ! if avs^typ = 1 then begin if sem.pan.num = "4" and ( sem.pan.lgth = "13" or sem.pan.lgth = "16" ) then begin lgth := 49; end else begin lgth := 29; end; end else ! ! For AVS types 2 and 3, the length of the subfield should ! always be 14. ! begin lgth := 14; end; #DELETE 00712Q09 PSTM^FRMT^0200^TO^XRQST #ADD 00829 PSTM^FRMT^0210^TO^XRESP !# AVS^TYP : AVS type associated with this FIID # #ADD 00834 PSTM^FRMT^0220^TO^XADV int proc pstm^frmt^0220^to^xadv( pstm, sem, prikey, avs^typ ) extensible; #DELETE 00835 PSTM^FRMT^0220^TO^XADV #ADD 00838 PSTM^FRMT^0220^TO^XADV int .avs^typ; #ADD 00843 PSTM^FRMT^0220^TO^XADV if response := pstm^frmt^0200^to^xrqst( pstm, sem, prikey, avs^typ ) then #DELETE 00844 PSTM^FRMT^0220^TO^XADV #ADD 06342 UTIL^GENERATE^APPROVAL^CODE !# AVS^TYP : AVS type associated with this FIID # #ADD 06346 UTIL^GET^BNIIF prefix, prefix^lgth, avs^typ ) variable; #DELETE 06347 UTIL^GET^BNIIF #ADD 06359 UTIL^GET^BNIIF int .avs^typ; #ADD 06396 UTIL^GET^BNIIF if $param( avs^typ ) then mov^ ( avs^typ, bniif^tbl.avs^typ ); #DELETE 06396N00 UTIL^GET^BNIIF #ENDSCN = SW09259 !@CMP2.24 04/21/05 BNETLIBS6094 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6094 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6094 * ******************************************************************************** #SCN = SW09298 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD I000260H ! 20APR2005 wielerk ! Symptom: Interface is not populating pstm.tran.amt^1 in reversals ! sent into Base24. ! Problem: If the new LCONF param FRWD-UNMATCHED-RVSLS is set to ! "Y" and a reversal is received from Mastercard that ! does not find an original on the ILF, amount 1 does not ! get set. ! Fix: Modified the interface to populate pstm.tran.amt^1 with ! the value in bit 4 (transaction amount). Removed the ! call to format amounts from the unmatched formatting ! procedure. ! Procs modified: sem^frmt^amt^to^pstm^amt ! sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #393486. #ADD 02040 SUB^CONVERT^AMT ! ! All reversals from Mastercard are full reversals, the ! amount in bit 4 matches the original request. This code ! is here to make sure unmatched reversals have a value in ! pstm.tran.amt^1 ! #REPLACE 02041 SUB^CONVERT^AMT if tran^amt^bit^d then #REPLACE 02045N01/02045N03 SUB^CONVERT^AMT if not ascii^fixed^( sem.tran^amt, tran^amt ) then begin set ( pstm.tran.amt^1, 0f ); return false; end; #REPLACE 02050 SUB^CONVERT^AMT pstm.tran.amt^1 := tran^amt; #ADD 02052N00 SUB^CONVERT^AMT if not ascii^fixed^( sem.tran^amt, #REPLACE 02052N01/02052N03 SUB^CONVERT^AMT pstm.tran.amt^1 ) then begin set ( pstm.tran.amt^1, 0f ); return false; end; #REPLACE 02057 SUB^CONVERT^AMT set ( pstm.tran.amt^1, 0f ); #DELETE 0295670U SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ENDSCN = SW09298 !@CMP2.24 04/22/05 BNETS 6072 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6072 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6072 * ******************************************************************************** #SCN = SW09299 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00026(0G ! 21APR2005 engelk ! Symptom: SEM advice messages were being sent to RTAU as PSTM ! 0200 requests. ! Problem: The advice format routine calls the request format ! routine. If there is an error in the request format ! routine, the code returns from the advice format ! routine. At this point the internal message type is ! set to 0200 for a request as it has not been replaced ! with 0220 by the advice format routine. An ILF record ! is added with substate 2, format error, but the advice ! routine is not exited. Instead, the partially ! formatted message is manipulated and sent to RTAU as ! a request. ! Fix: Added a return statement to the pos advice procedure ! when the advice format routine returns an error. This ! way processing is not continued when a format error is ! encountered and no request is sent to RTAU. ! Procs modified: sem^advice^pos ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #394135 #ADD 05757j0E SEM^ADVICE^POS return; #ENDSCN = SW09299 !@CMP2.24 04/26/05 BNETLIBS6095 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6095 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6095 * ******************************************************************************** #SCN = SW09308 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J000260F ! 25APR2005 engelk ! Symptom: Acquired recurring payment transactions are denied by ! the interface with a response code of "069", format ! error. ! Problem: As of the April Mandates, MasterCard is allowing UCAF ! data in phone orders. This data was previously ! allowed only in e-commerce transactions. The Release ! 5.1 spec from MasterCard indicated that phone orders ! should now have a UCAF indicator set to a valid value. ! However, the check applied to all transactions ! with/without UCAF data. ! Fix: Removed UCAF indicator check. UCAF data fields are ! populated by the interface only for e-commerce and ! phone order transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #393568 ! 25APR2005 engelk ! Symptom: Acquired MOTO transactions have invalid values in ! DE-61, point of service data, position 1 (POS ! terminal Attendance Indicator) and position 3 (POS ! Terminal Location Indicator). ! Problem: Code changes made as part of the April 2005 mandates ! removed code for setting these positions within DE-61 ! for MOTO transactions. ! Fix: Restored the code for setting these positions within ! DE-61. Position 1 will be initialized to 2, no ! terminal used (voice/ARU authorization). Position 3 ! will be initialized to 3, no terminal used (voice/ARU ! authorization). In addition position 4, POS cardholder ! presence, is initialized to "3", no terminal used ! (voice/ARU order) and position 11, POS card data ! terminal input capability, is initialized to "1", no ! terminal used. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #393585 #ADD 00659l09 PSTM^FRMT^0200^TO^XRQST if pstm.term^typ = "99" or ! voice authorization pstm.tran.tran^cde = "13" or ! mail/phone order pstm.pt^srv^cond^cde = "08" then ! mail/phone order begin ! ! No terminal used (Voice/ARU Authorization) ! movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "1" ); end; #DELETE F0070009/F007000F PSTM^FRMT^0200^TO^XRQST #REPLACE F007000G/F007000g PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then begin ! ! ! Telephone/ARU order. ! ! ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" then begin ! ! ! Level 6 CAT: Electronic Commerce ! ! ! return resp^format^error^pos^l; end; end; ! Telephone/ARU order ! if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "5" then begin ! ! ! Electronic order, home PC, internet. ! ! ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" then begin ! ! ! Not Level 6 CAT: Electronic Commerce ! ! ! return resp^format^error^pos^l; end; end; ! Electronic commerce ! #DELETE F007000h/F007000l PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW09308 !@CMP2.24 04/29/05 BNETLIBS6096 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6096 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6096 * ******************************************************************************** #SCN = SW09327 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K000260d ! 26APR2005 owallad ! Symptom: BNRLF screen fields CARD SEQUENCE NUMBER and CARD ! EXPIRATION DATE are required in 0302 messages outbound ! to the interchange. ! Problem: Not all customers participate in the MasterCard program ! requiring these fields. ! Fix: Modified the code to treat these fields as optional ! rather than mandatory. ! Modified proc: PATH^FRMT^FILE^RQST ! Dependency: Apply fix to BNETLIBS and RQBNRLFS and run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: Case #393071 #REPLACE F0046301 PATH^FRMT^FILE^RQST lgth := $offset( sem.file^rec.mcc102.purge^dat ) - #ADD F0049400 PATH^FRMT^FILE^RQST if path.frqst.mcc102.crd^seq^num <> [ $len (path.frqst.mcc102.crd^seq^num ) * [ " " ] ] then begin move( sem.file^rec.mcc102.crd^seq^num, path.frqst.mcc102.crd^seq^num ); lgth := lgth + $len( sem.file^rec.mcc102.crd^seq^num ); end; if path.frqst.mcc102.crd^exp^dat <> [ $len (path.frqst.mcc102.crd^exp^dat ) * [ " " ] ] then begin move( sem.file^rec.mcc102.crd^exp^dat, path.frqst.mcc102.crd^exp^dat ); lgth := lgth + $len( sem.file^rec.mcc102.crd^exp^dat ); end; #DELETE F0049401/F0049405 PATH^FRMT^FILE^RQST #ADD F004940C PATH^FRMT^FILE^RQST lgth := lgth + $len( sem.file^rec.mcc102.purge^dat ); #ADD F004940F PATH^FRMT^FILE^RQST call integer^ascii^( sem.file^rec.lgth, lgth ); #ENDSCN = SW09327 !@CMP2.24 04/29/05 RQBNRLFS6015 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6015 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6015 * ******************************************************************************** #SCN = SW09328 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6015 #NEWVERSION = 6016 #ADD 00018O0D * 26APR2005 owallad * Symptom: Screen fields CARD SEQUENCE NUMBER, and CARD * EXPIRATION DATE are required in 0302 messages * outbound to the interchange. * Problem: Not all customers participate in the MasterCard * program requiring these fields. * Fix: Modified the code to treat these fields as * optional rather than mandatory. * Modified paragraph: 480-DATA-CHECK * Dependency: Apply fix to BNETLIBS and RQBNRLFS and run MAKE. * Replace BNETMAN and BNETUPDT. * Reference: Case #393071 #ADD 00575O03 480-DATA-CHECK IF WS-OVERLAY = 2 IF CRD-SEQ-NUM OF MCC102 OF PATH-RQST NOT = SPACES AND CRD-SEQ-NUM OF MCC102 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-SEQ-NUM-2 IF MOVE-MESSAGE MOVE "CARD SEQUENCE NUMBER MUST BE SPACES OR NUMER - "IC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-SEQ-NUM-2 MOVE "N" TO FLAG-MOVE. #DELETE 00575O04/00575O0U 480-DATA-CHECK #ADD 00625O04 480-DATA-CHECK IF WS-OVERLAY = 2 IF CRD-EXP-DAT OF MCC102 OF PATH-RQST NOT = SPACES AND CRD-EXP-DAT OF MCC102 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-2 IF MOVE-MESSAGE MOVE "CARD EXPIRATION DATE MUST BE SPACES OR NUMER - "IC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-2 MOVE "N" TO FLAG-MOVE. #DELETE 00625O05/00625O0H 480-DATA-CHECK #DELETE 00625O0K/00625O0W 480-DATA-CHECK #ENDSCN = SW09328 !@CMP2.24 05/04/05 BNETS 6073 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6073 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6073 * ******************************************************************************** #SCN = SW09332 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00026)0K ! 03MAY2005 wielerk ! Symptom: Interface does not deny transactions if alternate ! routing is not configured. ! Problem: Timeouts and format failures will send 0210 messages ! back to RTAU but other processing failures pass through ! the alternate routing selection logic in the interface ! and result in a 0200 being sent back to RTAU. RTAU ! will log a 0210 as no alternate schemes have been set up ! but the PTLF record looks like a RTAU denial. ! Fix: Modified the code to mark a message as a 0210 if the ! alternate routing is not configured in the message. ! Procs modified: pstm^0200^route ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #392355. #ADD 04882d08 PSTM^0200^ROUTE if ( pstm.rte.alt1 = blanks for $len( pstm.rte.alt1 ) or pstm.rte.alt1 = zeroes for $len( pstm.rte.alt1 ) ) or ( pstm.router2^name <> blanks for $len( pstm.router2^name ) and pstm.router2^name <> zeroes for $len( pstm.router2^name ) )then begin ! ! this logic is meant to deny transactions that are not ! configured for alternate routing. alt1 not set, means only 1 ! RTAU involved, router2 name set means more than 1 RTAU ! involved. ! if pstm.auth^ind2 = "0" or pstm.auth^ind2 = " " then begin movd( pstm.typ, response^d ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem length !, substate ); end; end else #ENDSCN = SW09332 !@CMP2.24 05/11/05 BNETG 6033 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6033 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6033 * ******************************************************************************** #SCN = SW09348 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6033 #NEWVERSION = 6034 #ADD 00026g0A ! 10MAY2005 wielerk ! Symptom: Interface fails to expand bit 55 (emv data) in 0120 ! message. ! Problem: Mastercard sends a tag with value 5F34 in field 55 and ! this value was not allowed by the interface. ! Fix: Added a define, tag^pan^seq^no^d, for field 55 data. ! Dependency: Apply fixes to BNETG, BNETDDLS and BNETEMVS. Run MAKE. ! Reference: Case #391964. #ADD 01366O2Q tag^pan^seq^no^d = [ %h5F, %h34 ]#, #ENDSCN = SW09348 !@CMP2.24 05/11/05 BNETDDLS6020 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6020 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6020 * ******************************************************************************** #SCN = SW09349 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6020 #NEWVERSION = 6021 #ADD 00262T0E * 10MAY2005 wielerk * Symptom: Interface fails to expand bit 55 (emv data) in 0120 * message. * Problem: Mastercard sends a tag with value 5F34 in field 55 and * this value was not allowed by the interface. * Fix: Added the subfield for tag 5F34, pan sequence number. * Dependency: Apply fixes to BNETG, BNETDDLS and BNETEMVS. Run MAKE. * Reference: Case #391964. #ADD 01225GE4 SEM * ! * Primary Account Number (PAN) Sequence Number. This value ! * identifies and differentiates cards with the same PAN. ! * Optional in the 0100 Authorization Request Message ! 06 pan-seq-no. * tag = 5F34 ! 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. #ENDSCN = SW09349 !@CMP2.24 05/18/05 BNETLIBS6097 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6097 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6097 * ******************************************************************************** #SCN = SW09366 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L000260D ! 17MAY2005 frederr ! Symptom: The interface is sending bad data in field 61.11 (POS ! Card Data Terminal Input Capability). ! Problem: The interface is not setting field 61.11 correctly in ! some scenarios. ! Fix: Modified the code to correctly populate field 61.11. ! Modified proc: pstm^frmt^0200^to^xrqst. ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #394797. #REPLACE F006591E PSTM^FRMT^0200^TO^XRQST ! Magnetic stripe/key entry reader ! #REPLACE F006591G PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "7" ); #DELETE F006591I/F006591Q PSTM^FRMT^0200^TO^XRQST #REPLACE 00700e01/00700e01 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if sem.pos^entry^mde = "81" or pstm.pt^srv^cond^cde = "15" then ! ! Electronic commerce or home terminal ! #ADD 00700e04 PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "6" ); #ENDSCN = SW09366 !@CMP2.24 05/20/05 BNETLIBS6098 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6098 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6098 * ******************************************************************************** #SCN = SW09387 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M0002609 ! 20MAY2005 wielerk ! Symptom: Field 120 (file-rec) is not correctly formatted in ! 0620 messages. ! Problem: The interface is placing the reject message in the ! collapsed message and overwriting 2 bytes of the ! length subfield of bit 120 making the length incorrect. ! Fix: Modified the code to correctly place the reject message ! after the 3 byte length in the collapsed message. ! Modified proc: util^send^reject ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #393536. #REPLACE 09384 UTIL^SEND^REJECT offset := 65; #ENDSCN = SW09387 !@CMP2.24 08/11/05 BNETDDLS6021 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6021 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6021 * ******************************************************************************** #SCN = SW09463 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6021 #NEWVERSION = 6022 #ADD 00262U08 * 11AUG2005 gruberg * Symptom: Banknet Release 05.2 Mandates * Problem: None * Fix: Added support for subelements 63 and 95 in data element * 48, data element 73, and data element 112 within the * SEM. Increased the size of the external message area * in the SAF-BNET and SUSP-BNET definitions. * Dependency: BA10SC04 subvolume. New files: ILB0605M, ILB0605R, and * ILB0605S. Apply fixes to BNETDDLS, BNETG, BNETLIBS and * BNETS. Run MAKE. Run ILF conversion ILB0605. Replace * BNETLOGM, BNETMAN and BNETUPDT. * Reference: WO #050426-01 #ADD 01157I08 SEM * * Trace ID * Subfield tag = 63 * Positions 1-9: Banknet Reference Number The contents of DE 63 * SE 2 in the original 0110 message; left-justified * with trailing spaces. * Positions 10-15: Date, Settlement The four-digit Settlement Date * in DE 15 of the original 0110 message; MMDD format * followed by two spaces. * 06 trc-id-sub-fld-63. 08 tag pic 99. 08 lgth pic 99. 08 bnet-ref-num pic x(9). 08 dat-setl pic x(6). * * MasterCard Promotion Code * Subfield tag = 95 * Contains the promotion code to identify unique use of a MasterCard * card for a specific program or service established between issuers * and merchants. * 06 mc-prmtn-cde-sub-fld-95. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(6). #REPLACE 01157I09 SEM 04 user-fld pic x(40). #ADD 01322 SEM * * Date, Action * bit map position = 73 * Specifies the date of a future action (year, month, and day). In * addition, a message originator may use it as a static time such as * a birthdate. * 02 act-dat pic 9(6). #ADD 01376 SEM * * additional data, national use * bit map position = 112 * Reserved for national organizations to define data unique to * specific networks or specific programs and services. * 02 adnl-data-natl. 04 lgth pic 999. 04 info pic x(100). #REPLACE 02694 SAF-BNET 02 rec-data type character 1752. #REPLACE 02719G01 SAF-BNET 02 extrn-msg type binary 16 occurs 1430 times. #ENDSCN = SW09463 !@CMP2.24 08/11/05 BNETG 6034 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6034 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6034 * ******************************************************************************** #SCN = SW09464 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6034 #NEWVERSION = 6035 #ADD 00026h09 ! 11AUG2005 owallad ! Symptom: BankNet ISO Switch Common Data Token Support. ! Problem: None. ! Fix: Sourced in section SWI^CMN^DATA^TKN from file BADDLTAL. ! Dependency: Apply fixes to BATKNID, BATKNCVS, COBTKN, DDLBATKN, ! BNETG and BNETLIBS and run MAKE. Replace BNETLOGM. ! Reference: WO #041014-01 ! 11AUG2005 owallad ! Symptom: Banknet Issuer Discretionary Data Suppression ! Enhancements. ! Problem: None. ! Fix: 1. Added variable SUPPRS^ISS^DISCR^DATA^G that will be ! set via LCONF parameter SUPPRS-ISS-DISCR-DATA. When set ! to true, the interface will not log disretionary data to ! the ILF. ! 2. Added variable SUPPRS^ISS^CVD2^DATA^G that will be ! set via LCONF parameter SUPPRS-ISS-CVD2-DATA. When set ! to true, the interface will not log CVD2 data to the ! ILF. ! 3. Added variable SUPPRS^ISS^AVS^DATA^G that will be ! set via LCONF parameter SUPPRS-ISS-AVS-DATA. When set ! to true, the interface will not log AVS data to the ILF. ! Dependency: Apply fixes to BNETG, BNETLIBS, and BNETS and run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #050305-03 ! 11AUG2005 gruberg ! Symptom: Banknet Release 05.2 Mandates ! Problem: None ! Fix: Added source statements, global defines and literals ! required to support the mandates. ! Dependency: BA10SC04 subvolume. New files: ILB0605M, ILB0605R, and ! ILB0605S. Apply fixes to BNETDDLS, BNETG, BNETLIBS and ! BNETS. Run MAKE. Run ILF conversion ILB0605. Replace ! BNETLOGM, BNETMAN and BNETUPDT. ! Reference: WO #050426-01 #ADD 00026f0R ? evt^msg^severity^constants #ADD 00026f19 ? swi^cmn^data^tkn #ADD 00026O22 ! evt^msg^severtiy^constants, #ADD 00026O32 ! swi^cmn^data^tkn #ADD 00078 ! Banknet Account Types define bnet^dflt^acct^d = "00"#; define bnet^sav^acct^d = "10"#; define bnet^chk^acct^d = "20"#; define bnet^cr^acct^d = "30"#; ! Banknet Amount Types define bnet^amt^typ^ledg^bal^d = "01"#; define bnet^amt^typ^avail^bal^d = "02"#; define bnet^amt^typ^cb^d = "40"#; #REPLACE 00100I00/00100I01 sem^acq^rvsl^rqst^d = "0400"#, sem^acq^rvsl^resp^d = "0410"#, #ADD 00118 sem^purch^cb^d = "09"#, #ADD 00145E01 rvsl^sys^err^d = "19"#, rvsl^suspect^d = "20"#, #ADD 00162 pos^purch^cb^d( x ) = ( x.tran.tran^cde = "18" ) #, #ADD 00226 ! ! Banknet Response Codes ! define resp^apprvd^sem^d = "00"#; define resp^honor^with^id^sem^d = "08"#; define resp^frmt^err^sem^d = "30"#; define resp^tran^not^supp^sem^d = "57"#; #ADD 00494X07 int supprs^iss^avs^data^g := false; int supprs^iss^cvd2^data^g := false; int supprs^iss^discr^data^g := false; #ADD 00612 adnl^data^ntl^bit^d = sbit^map[2].<15> #, !bit 112 #ADD 00615G01 mbr^def^bit^d = sbit^map[3].<11> #, !bit 124 #REPLACE 01010 73, 0, sem^field( act^dat ), #REPLACE 01049 112, 3, sem^field( adnl^data^natl ), #ADD 01366X03 int supprs^iss^avs^data^g; int supprs^iss^cvd2^data^g; int supprs^iss^discr^data^g; #ENDSCN = SW09464 !@CMP2.24 08/11/05 BNETLIBS6099 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6099 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6099 * ******************************************************************************** #SCN = SW09465 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD M000260A ! 11AUG2005 owallad ! Symptom: BankNet ISO Switch Common Data Token Support. ! Problem: None. ! Fix: Added support for Switch Common Data Token. ! New proc: UTIL^ADD^SWI^CMN^DATA^TKN ! Modified procs: SEM^FRMT^XRESP^TO^PSTM^0210 ! SEM^FRMT^XRQST^TO^PSTM^0200 ! SEM^FRMT^XRVSL^TO^PSTM^0420 ! Dependency: Apply fixes to BATKNID, BATKNCVS, COBTKN, DDLBATKN, ! BNETG and BNETLIBS and run MAKE. Replace BNETLOGM. ! Reference: WO #041014-01 ! 11AUG2005 owallad ! Symptom: Banknet Issuer Discretionary Data Suppression ! Enhancements. ! Problem: None. ! Fix: Modified the code to support Issuer Discretionary Data ! Suppression Enhancements ! Modified procs: UTIL^ILF^ADD ! UTIL^ILF^UPDT ! Dependency: Apply fixes to BNETG, BNETLIBS, and BNETS and run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #050305-03 ! 11AUG2005 gruberg ! Symptom: Banknet Release 05.2 Mandates ! Problem: None ! Fix: Added support for inbound and outbound Acquirer ! Reversal Request/0400 messages and Acquirer Reversal ! Response/0410 messages. Added support for inbound and ! outbound Purchase with Cash Back transactions. Added ! data integrity checks to require that the txn-amt in ! DE 4 contains all zeroes in balance inquiries, that ! positions 14-16 of DE 61 contains a valid country code, ! and that if the country code in DE 61 is "840" that the ! zip code in DE 61 is not blanks, zeroes, or nines. ! Added proc: pstm^frmt^0420^to^acq^xrvsl ! Modified procs: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^tran^to^sem^proc^cde ! sem^frmt^amt^to^pstm^amt ! sem^frmt^prikey ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xack ! util^^collapse ! util^^expand ! util^collapse^sem ! util^expand^sem ! Dependency: BA10SC04 subvolume. New files: ILB0605M, ILB0605R, and ! ILB0605S. Apply fixes to BNETDDLS, BNETG, BNETLIBS and ! BNETS. Run MAKE. Run ILF conversion ILB0605. Replace ! BNETLOGM, BNETMAN and BNETUPDT. ! Reference: WO #050426-01 #ADD 00572 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^bal^inq^d and sem.tran^amt <> zeroes for $len( sem.tran^amt ) then begin ! ! If DE 3 contains the value "30" (Balance Inquiry), DE 4 ! must contain the value zeroes. ! return resp^format^error^pos^l; end; #ADD 00702S02 PSTM^FRMT^0200^TO^XRQST if not conv^cntry^cde( ! crncy^cde !, sem.ntl^pos^data.cntry^cde, pstm.term^cntry^cde, ! dec^places !, ! crncy^cde^alpha !, ! cntry^cde^alpha^in !, temp^mode, temp^len ) then begin temp^mode := num^to^alpha; if conv^cntry^cde( ! crncy^cde !, pct.dflt.cntry^cde, ! cntry^abbr2 !, ! dec^places !, ! crncy^cde^alpha !, ! cntry^cde^alpha^in !, temp^mode, ! cntry^cde^lgth^in ! ) then begin move( sem.ntl^pos^data.cntry^cde, pct.dflt.cntry^cde ); end else begin return resp^format^error^pos^l; end; ! of if conv^cntry^cde end; ! of if not conv^cntry^cde #DELETE 00702S03/00706 PSTM^FRMT^0200^TO^XRQST #ADD 00707z0H PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cntry^cde = "840" then begin ! ! If the country code subfield of DE 61 contains the value ! "840", the postal code subfield of DE 61 must not contain ! all blanks, zeroes, or nines. ! if sem.ntl^pos^data.postal^cde = [ $len( sem.ntl^pos^data.postal^cde ) * [ " " ] ] or sem.ntl^pos^data.postal^cde = [ $len( sem.ntl^pos^data.postal^cde ) * [ "0" ] ] or sem.ntl^pos^data.postal^cde = [ $len( sem.ntl^pos^data.postal^cde ) * [ "9" ] ] then begin return resp^format^error^pos^l; end; end; ! of if sem.ntl^pos^cond^cde.cntry^cde = "840" #ADD 00766 PSTM^FRMT^0210^TO^XRESP action^date^bit^d := 0; replace^amt^bit^d := 0; #ADD 00966 PSTM^FRMT^0402^TO^SEM ?section pstm^frmt^0420^to^acq^xrvsl ?page "pstm^frmt^0420^to^acq^xrvsl" !##################################################################### !# # !# pstm^frmt^0420^to^acq^xrvsl # !# # !# This procedure formats an external 0400/Acquirer Reversal # !# Request message from the original 0110/Authorization Request # !# Response message that was logged to the ILF and from the # !# internal BASE24-pos 0420 Reversal message. # !# # !# INPUT PARAMETERS : # !# pstm - Pointer to the internal BASE24-pos # !# 0420/Reversal message. # !# # !# OUTPUT PARAMETERS: # !# sem - Pointer to the external Banknet 0400/Acquirer # !# Reversal Request message # !# # !# RETURN: # !# true - Formatting successful # !# false - Formatting error # !# # !##################################################################### int proc pstm^frmt^0420^to^acq^xrvsl( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin int de48^lgth; int .ilf^sem[ 0:wlen( sem^def ) - 1 ]; int .orig^sem( sem^def ) := @ilf^sem; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); setl^amt^bit^d := 0; crd^iss^amt^bit^d := 0; conv^rate^setl^bit^d := 0; conv^rate^crd^iss^bit^d := 0; setl^dat^bit^d := 0; conv^dat^bit^d := 0; addl^resp^bit^d := 0; setl^crncy^cde^bit^d := 0; iss^crncy^cde^bit^d := 0; emv^data^bit^d := 0; inf^data^bit^d := 0; acct^id1^bit^d := 0; acct^id2^bit^d := 0; file^rec^bit^d := 0; mbr^def^bit^d := 0; ! ! Set bits for fields that are required for the 0400 that may ! have been turned off in the 0110. Data for these fields is ! moved into the 0110 from the suspended 0100 before it is logged ! to the ILF in procedure sem^frmt^xresp^to^pstm^0210. ! local^tim^bit^d := 1; local^dat^bit^d := 1; exp^dat^bit^d := 1; merch^typ^bit^d := 1; pos^entry^mde^bit^d := 1; crd^acpt^id^cde^bit^d := 1; crd^acpt^bit^d := 1; if sem.proc^cde = sem^purch^cb^d then begin addl^amt^bit^d := 1; end; ntl^pos^data^bit^d := 1; if not sbit^map^bit^d then begin sbit^map^bit^d := 1; mov^( sem.sbit^map, nulls ); end; movd( sem.typ, sem^acq^rvsl^rqst^d ); call util^gmt^ascii( sem.tran^dat^tim ); call util^increment^trace( sem.trace^num, $len( sem.trace^num ) ); ! ! Format DE 48 for the reversal using the relevant DE 48 data ! retrieved from the ILF and add SE 63. ! @orig^sem := @ilf^sem; movl( orig^sem, sem, wlen( sem^def ) ); sem.addl^data ':=' [ " " ] & sem.addl^data for $len( sem.addl^data ) - 1; de48^lgth := 0; move( sem.addl^data.info.tran^cat^cde, orig^sem.addl^data.info.tran^cat^cde ); de48^lgth := de48^lgth + $len( sem.addl^data.info.tran^cat^cde ); ! ! Format SE 63 ! movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movl( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, sem.banknet^data.ntwk^id^cde, $len( sem.banknet^data.ntwk^id^cde ) ); movl( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num.byte[ 3 ], sem.banknet^data.ref^num, 6 ); movl( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.setl^dat, $len( sem.setl^dat ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.trc^id^sub^fld^63 ); ! ! Move in the other DE 48 subelements from the original ILF ! external message that are valid in an 0400 message ! if orig^sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin movl( sem.addl^data.info.ecom^sec^sub^fld^42, orig^sem.addl^data.info.ecom^sec^sub^fld^42, $len( sem.addl^data.info.ecom^sec^sub^fld^42 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.ecom^sec^sub^fld^42 ); end; if orig^sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin movl( sem.addl^data.info.ucaf^sub^fld^43, orig^sem.addl^data.info.ucaf^sub^fld^43, $len( sem.addl^data.info.ucaf^sub^fld^43 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.ucaf^sub^fld^43 ); end; if orig^sem.addl^data.info. visa^ecom^xid^sub^fld^44.tag = "44" then begin movl( sem.addl^data.info.visa^ecom^xid^sub^fld^44, orig^sem.addl^data.info.visa^ecom^xid^sub^fld^44, $len( sem.addl^data.info.visa^ecom^xid^sub^fld^44 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info. visa^ecom^xid^sub^fld^44 ); end; if orig^sem.addl^data.info.visa^cmrcl^sub^fld^94 = "94" then begin movl( sem.addl^data.info.visa^cmrcl^sub^fld^94, orig^sem.addl^data.info.visa^cmrcl^sub^fld^94, $len( sem.addl^data.info.visa^cmrcl^sub^fld^94 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.visa^cmrcl^sub^fld^94 ); end; if orig^sem.addl^data.info.mc^prmtn^cde^sub^fld^95 = "95" then begin movl( sem.addl^data.info.mc^prmtn^cde^sub^fld^95, orig^sem.addl^data.info.mc^prmtn^cde^sub^fld^95, $len( sem.addl^data.info.mc^prmtn^cde^sub^fld^95 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); end; if de48^lgth > 0 then begin ! ! Set the overall length field of DE 48 based on the ! subelements included and turn the bit on ! call integer^ascii^( sem.addl^data.lgth, de48^lgth ); addl^data^bit^d := 1; end; ! ! Set the original data in bit 90 ! orig^data^bit^d := 1; mov^( sem.orig, zeroes ); movd( sem.orig.msg^typ, sem^auth^request^d ); move( sem.orig.trace, sem.trace^num ); move( sem.orig.dat^tim, sem.tran^dat^tim ); call hiswutil^justify^field( sem.orig.acq^inst^id, $len( sem.orig.acq^inst^id ), sem.acq^inst.cde, $len( sem.acq^inst.cde ), right^justify^l ); if fwd^inst^bit^d then begin call hiswutil^justify^field( sem.orig.fwd^inst^id, $len( sem.orig.fwd^inst^id ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; call pstm^frmt^amt^to^sem^amt( pstm, sem ); if sem.replace^amts <> zeroes for $len( sem.replace^amts ) then begin ! ! Only a reversal for the full transaction amount will be ! supported by the network. ! return false; end; return true; end; ! of proc pstm^frmt^0420^to^acq^xrvsl #ADD 01131W06 SUB^CONVERT^AMT if pos^purch^cb^d( pstm ) then begin addl^amt^bit^d := 1; call integer^ascii^( sem.addl^amt.lgth, $len( sem.addl^amt.info ) ); if pstm.tran.tran^cde.aa = b24^savings^d then begin movd( sem.addl^amt.info[ 0 ].acct^typ, bnet^sav^acct^d ); end else if pstm.tran.tran^cde.aa = b24^checking^d then begin movd( sem.addl^amt.info[ 0 ].acct^typ, bnet^chk^acct^d ); end else begin movd( sem.addl^amt.info[ 0 ].acct^typ, bnet^dflt^acct^d ); end; movd( sem.addl^amt.info[ 0 ].amt^typ, bnet^amt^typ^cb^d ); move( sem.addl^amt.info[ 0 ].crncy^cde, pstm.orig^crncy^cde ); movd( sem.addl^amt.info[ 0 ].typ^amt, "D" ); if not fixed^ascii^( sem.addl^amt.info[ 0 ].amt, pstm.tran.amt^2 ) then begin return false; end; end; ! of if purchase w/cash back #ADD 01176 SUB^CONVERT^AMT if not pos^purch^cb^d( pstm ) then begin if pstm.tran.amt^2 > 0f then begin pstm^amt := pstm.tran.amt^2; if not sub^convert^amt( pstm^amt ) or not fixed^ascii^( sem.replace^amts.tran^amt, pstm^amt ) then begin return false; end; end; ! of if pstm.tran.amt^2 > 0f end; ! of if not purchase w/cash back #DELETE 01177 /01184 SUB^CONVERT^AMT #ADD 01583 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE "09", "18", ! purchase with cash back #REPLACE 01611S00 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE ( sem.proc^cde <> sem^purch^cb^d ) and #ADD 02030 SUB^CONVERT^AMT if sem.typ = sem^auth^request^d and sem.proc^cde = sem^purch^cb^d then begin if addl^amt^bit^d then begin pstm.tran.amt^2 := 0f; if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $occurs( sem.addl^amt.info ); end else begin cnt := 0; end; for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ = bnet^amt^typ^cb^d then ! ! Map cashback amount to PSTM.TRAN.AMT^2 ! begin call ascii^fixed^( sem.addl^amt.info[ i ].amt, tran^amt ); if sem.addl^amt.info[ i ].crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; end; ! of if currency codes do not match pstm.tran.amt^2 := tran^amt; end; ! of amt^typ = amount cash back end; ! of for i := 0 to ( cnt - 1 ) do end; ! of if addl^amt^bit^d end; ! of if sem.typ = sem^auth^rqst^d and ! sem.proc^cde = sem^purch^cb^d #REPLACE 02039 /02039 OFFSET 0 SUB^CONVERT^AMT if sem.typ = sem^rvsl^adv^d or sem.typ = sem^acq^rvsl^rqst^d then #ADD 02562 SEM^FRMT^PRIKEY if ( ( sem.typ = sem^rvsl^adv^d ) and ( sem.advice^cde.reason^cde <> "400" ) and ( sem.advice^cde.reason^cde <> "401" ) ) or sem.typ = sem^acq^rvsl^rqst^d then begin if orig^data^bit^d then begin move( prikey.seq^num, sem.orig.trace ); move( prikey.tran^dat^tim, sem.orig.dat^tim ); end; end; #DELETE 02563 /02570 SEM^FRMT^PRIKEY #REPLACE 02618\01 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN literal b24^pos^number^tran^types^l = 14, #ADD 02636 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN "09", "18", ! purch w/cash back #ADD 02698 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ! ! Map the type of card for purchase with cash back transactions ! if pos^purch^cb^d( pstm ) and pstm.tran.tran^cde.t = " " or pstm.tran.tran^cde.t = "0" then begin if pstm.tran.tran^cde.aa = b24^checking^d or pstm.tran.tran^cde.aa = b24^savings^d then begin movd( pstm.tran.tran^cde.t, "2" ); end else if pstm.tran.tran^cde.aa = b24^credit^card^d then begin movd( pstm.tran.tran^cde.t, "1" ); end else begin movd( pstm.tran.tran^cde.t, "0" ); end; end; ! of map the card type #ADD 0295670V SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if advice^cde^bit^d then begin ! ! Map the pstm.rvsl^cde from the value in bit 60 ! if rvsl.advice^cde.reason^cde = "400" or rvsl.advice^cde.reason^cde = "401" or rvsl.advice^cde.reason^cde = "454" then begin movd( pstm.rvsl^cde, rvsl^auth^not^avail^d ); end else if rvsl.advice^cde.reason^cde = "452" or rvsl.advice^cde.reason^cde = "453" then begin movd( pstm.rvsl^cde, rvsl^customer^cancel^d ); end else begin movd( pstm.rvsl^cde, rvsl^hardware^error^d ); end; end else begin ! ! Bit 60 not present ! movd( pstm.rvsl^cde, rvsl^sys^err^d ); end; #DELETE 0295670W/0295670l SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ADD 03040 SEM^FRMT^XADV^TO^SEM^XACK emv^data^bit^d := 0; #ADD 03206 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.proc^cde = sem^purch^cb^d then begin ! ! Restore additional amounts in DE 54 for purchase with cash ! back trans as it may be needed for a possible subsequent ! reversal. ! move( sem.addl^amt, rqst.addl^amt ); end; #ADD 03208Z0F SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Add the Switch Common Data token. ! tkn^id ':=' swi^cmn^data^tkn^id^d; call util^add^swi^cmn^data^tkn( sem, pstm, tkn^id, ofst, pos^userdata ); #ADD 03542Q0T SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.cvc^sub^fld^88.tag = "88" then begin movl( compliance^tkn.monitoring^stat, sem.addl^data.info.cvc^sub^fld^88.tag^data, $len( sem.addl^data.info.cvc^sub^fld^88. tag^data ) ); end; if sem.addl^data.info.cvc^sub^fld^89.tag = "89" then begin movl( compliance^tkn.err^ind, sem.addl^data.info.cvc^sub^fld^89.tag^data, $len( sem.addl^data.info.cvc^sub^fld^89. tag^data ) ); end; #DELETE 03542Q0U/03542Q0Z SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03542Q2K SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.cvc^sub^fld^88.tag = "88" then begin movl( user^data.info.byte[ ofst ], sem.addl^data.info.cvc^sub^fld^88.tag^data, $len( sem.addl^data.info.cvc^sub^fld^88. tag^data ) ); ofst := ofst + $len( sem.addl^data.info.cvc^sub^fld^88. tag^data ); end; if sem.addl^data.info.cvc^sub^fld^89.tag = "89" then begin movl( user^data.info.byte[ ofst ], sem.addl^data.info.cvc^sub^fld^89.tag^data, $len( sem.addl^data.info.cvc^sub^fld^89. tag^data ) ); ofst := ofst + $len( sem.addl^data.info.cvc^sub^fld^89. tag^data ); end; #DELETE 03542Q2L/03542Q2U SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03542Z2I SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add the Switch Common Data token. ! tkn^id ':=' swi^cmn^data^tkn^id^d; call util^add^swi^cmn^data^tkn( sem, pstm, tkn^id, ofst, pos^userdata ); #ADD 03594t00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" then begin move( ps51^tkn^data.authn^coll^ind, sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind ); end; end; ! of if tag = "42" #DELETE 03594t01/03594t0B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03594t0K SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" and sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin if ( ( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" ) and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * ["0"] ] ) ) or ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * [" "] ] or sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * ["0"] ] ) ) then begin movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; end; ! of if SE 42 and SE 43 present #DELETE 03594t0L/03594t16 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03594t1P SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" and sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" and ( sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * ["0"] ] ) then begin movd( authn^data^tkn.authn^ind^flg, "01" ); movl( authn^data^tkn.authn^ind^data, sem.addl^data.info.ucaf^sub^fld^43.tag^data, temp^lgth ); end; end; ! of if SE 42 and SE 43 present #DELETE 03594t1Q/03594t23 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 03883 SEM^FRMT^XRVSL^TO^PSTM^0420 if advice^cde^bit^d then begin ! ! Map the pstm.rvsl^cde from the value in bit 60 ! if ( rvsl.advice^cde.reason^cde = "400" ) or ( rvsl.advice^cde.reason^cde = "401" ) or ( rvsl.advice^cde.reason^cde = "454" ) then begin movd( pstm.rvsl^cde, rvsl^auth^not^avail^d ); end else if ( rvsl.advice^cde.reason^cde = "452" ) or ( rvsl.advice^cde.reason^cde = "453" ) then begin movd( pstm.rvsl^cde, rvsl^customer^cancel^d ); end else begin movd( pstm.rvsl^cde, rvsl^hardware^error^d ); end; end else begin ! ! Bit 60 not present ! movd( pstm.rvsl^cde, rvsl^sys^err^d ); end; #DELETE 03884 /03893S01 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 03906Z0F SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Add the Switch Common Data token. ! tkn^id ':=' swi^cmn^data^tkn^id^d; call util^add^swi^cmn^data^tkn( sem, pstm, tkn^id, ofst, pos^userdata ); #ADD 03934 SEM^FRMT^XRVSL^TO^SEM^XACK if ack.typ = sem^acq^rvsl^rqst^d then begin movd( ack.typ, sem^acq^rvsl^resp^d ); local^tim^bit^d := 0; local^dat^bit^d := 0; exp^dat^bit^d := 0; merch^typ^bit^d := 0; pos^entry^mde^bit^d := 0; crd^seq^num^bit^d := 0; auth^id^resp^bit^d := 0; crd^acpt^id^cde^bit^d := 0; crd^acpt^bit^d := 0; addl^amt^bit^d := 0; ntl^pos^data^bit^d := 0; action^date^bit^d := 0; acct^id1^bit^d := 0; acct^id2^bit^d := 0; mbr^def^bit^d := 0; end else begin movd( ack.typ, sem^rvsl^adv^resp^d ); local^tim^bit^d := 0; local^dat^bit^d := 0; exp^dat^bit^d := 0; merch^typ^bit^d := 0; pos^entry^mde^bit^d := 0; crd^acpt^bit^d := 0; auth^id^resp^bit^d := 0; addl^amt^bit^d := 0; advice^cde^bit^d := 0; ntl^pos^data^bit^d := 0; orig^data^bit^d := 0; end; #DELETE 03935 /03947 SEM^FRMT^XRVSL^TO^SEM^XACK #ADD 04762 UTIL^^COLLAPSE "0400", "3", "0410", "3", #ADD 04897 UTIL^^EXPAND "0400", "3", "0410", "3", #ADD 05006 UTIL^^EXPAND ?section util^add^swi^cmn^data^tkn ?page "util^add^swi^cmn^data^tkn" !##################################################################### !# # !# util^add^swi^cmn^data^tkn # !# # !# This proc adds the Switch Common Data token (BY) to the internal # !# message (PSTM). # !# # !# INPUT PARAMETERS: # !# sem - External message # !# sim - PSTM # !# tkn^id - Token ID = 'BY' # !# ofst - Offset to the token buffer in the PSTM # !# pos^userdata - POS user data flag # !# # !# OUTPUT PARAMETERS: # !# none # !# # !##################################################################### proc util^add^swi^cmn^data^tkn( sem, pstm, tkn^id, ofst, pos^userdata ); int .pstm( pstm^def ); int .sem( sem^def ); string .tkn^id; int ofst; int pos^userdata; begin wlform( noroom^err, "UNABLE TO ADD SWITCH COMMON DATA TOKEN TO PSTM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( add^err, "UNABLE TO ADD SWITCH COMMON DATA TOKEN TO PSTM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\" ',' " REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) wlform( get^err, "ERROR WHILE RETRIEVING SWITCH COMMON DATA TOKEN " ',' "FROM PSTM: PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\ " ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) int dspy := false; int get^tkn^rslt := 0; int pan^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^buf^lgth := 0; int .tkn^buf^ptr( swi^cmn^data^tkn^def ); int tkn^lgth := 0; int tkn^rslt := 0; string seq^num[ 0:11 ] := [ 12 * [ " " ] ]; string track2[ 0:39 ] := [ 40 * [ " " ] ]; string pan[ 0:27 ] := [ 28 * [ " " ] ]; struct .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); ! ! Initialize the Switch Common Data token buffer. ! init( swi^cmn^data^tkn, " ", wlen( swi^cmn^data^tkn ) ); ! ! Determine if the token is in the PSTM. ! get^tkn^rslt := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @tkn^buf^ptr, tkn^buf^lgth, ! ascii format flag !, pos^userdata ); if get^tkn^rslt then begin ! ! Either the Switch Common Data token exists or a problem ! occurred during the attempt to retrieve it. ! if get^tkn^rslt = tkn^does^not^exist^l then begin ! ! Switch Common Data token not in PSTM. Add it. ! move( swi^cmn^data^tkn.stan, sem.trace^num ); ! DE 11 if ref^num^bit^d then ! DE 37 begin move( swi^cmn^data^tkn.retrvl^ref^num, sem.ref^num ); end; if resp^cde^bit^d then ! DE 39 begin move( swi^cmn^data^tkn.resp^cde, sem.resp^cde ); end; if ntl^pos^data^bit^d then ! DE 61 begin if sem.ntl^pos^data.cond^cde.byte[ 2 ] = "0" then begin ! ! on premise. ! movd( swi^cmn^data^tkn.on^off^prem^ind, "0" ); end else if sem.ntl^pos^data.cond^cde.byte[ 2 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 2 ] = "2" then begin ! ! off premise. ! movd( swi^cmn^data^tkn.on^off^prem^ind, "1" ); end; end; if banknet^data^bit^d then ! DE 63 begin move( swi^cmn^data^tkn.netwk^id, sem.banknet^data.ntwk^id^cde ); end; tkn^rslt := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, swi^cmn^data^tkn, $len( swi^cmn^data^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^rslt then begin ! ! Retrieve the sequence number and PAN for logging. ! movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); if not pan^bit^d and track2 <> [ $occurs( track2 ) * [ " " ] ] and track2 <> [ $occurs( track2 ) * [ "0" ] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; if tkn^rslt = over^max^limit^l then begin call log^message^( 3225, ! routing code !, @noroom^err, net.myname, evt_msg_severity_err_l, @pan, @seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3230, ! routing code !, @add^err, net.myname, evt_msg_severity_crit_l, @pan, @seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^rslt ); call abend^( 3230 ); end; end; ! of if tkn^rslt end ! of if get^tkn^rslt = tkn^does^not^exist^l else begin ! ! An error occurred while attempting to retrieve the ! token. ! call log^message^( 3235, ! routing code !, @get^err, net.myname, evt_msg_severity_crit_l, @pan, @seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^rslt ); end; ! of if get^tkn^rslt <> tkn^does^not^exist^l end ! of if get^tkn^rslt else begin ! ! Switch Common Data token in PSTM. Update it. ! move( tkn^buf^ptr.stan, sem.trace^num ); ! DE 11 if ref^num^bit^d then ! DE 37 begin move( tkn^buf^ptr.retrvl^ref^num, sem.ref^num ); end; if resp^cde^bit^d then ! DE 39 begin move( tkn^buf^ptr.resp^cde, sem.resp^cde ); end; if ntl^pos^data^bit^d then ! DE 61 begin if sem.ntl^pos^data.cond^cde.byte[ 2 ] = "0" then begin ! ! on premise. ! movd( tkn^buf^ptr.on^off^prem^ind, "0" ); end else if sem.ntl^pos^data.cond^cde.byte[ 2 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 2 ] = "2" then begin ! ! off premise. ! movd( tkn^buf^ptr.on^off^prem^ind, "1" ); end; end; if banknet^data^bit^d then ! DE 63 begin move( tkn^buf^ptr.netwk^id, sem.banknet^data.ntwk^id^cde ); end; end; ! of if not get^tkn^rslt end; ! of proc util^add^swi^cmn^data^tkn #ADD 05555v22 UTIL^COLLAPSE^SEM ! ! Trace ID ! if hdr.addl^data.info.trc^id^sub^fld^63. tag = "63" then begin ! ! Convert the length ! call ascii^integer( hdr.addl^data.info. trc^id^sub^fld^63.lgth, 2, tag^length ); ! ! Move the tag, tag length and tag data to ! the pointer ! movl( ptr, hdr.addl^data.info. trc^id^sub^fld^63.tag, ( tag^length + 4 ) ); ! ! Convert the data moved to the pointer to ! EBCDIC for transmission ! call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); ! ! Move the pointer past the data moved in ! @ptr := @ptr[ tag^length + 4 ]; end; ! of SE 63, Trace ID #ADD 05555d1K UTIL^COLLAPSE^SEM ! ! MasterCard Promotion Code ! if hdr.addl^data.info.mc^prmtn^cde^sub^fld^95. tag = "95" then begin ! ! Convert the length ! call ascii^integer( hdr.addl^data.info. mc^prmtn^cde^sub^fld^95.lgth, 2, tag^length ); ! ! Move the tag, tag length and tag data to ! the pointer ! movl( ptr, hdr.addl^data.info. mc^prmtn^cde^sub^fld^95.tag, ( tag^length + 4 ) ); ! ! Convert the data moved to the pointer to ! EBCDIC for transmission ! call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); ! ! Move the pointer past the data moved in ! @ptr := @ptr[ tag^length + 4 ]; end; ! of SE 95, MasterCard Promotion Code #ADD 06170v0A UTIL^EXPAND^SEM if ptr[ length ] = "63" then begin ! ! Trace ID ! movl( sem^ptr.addl^data.info. trc^id^sub^fld^63.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 06170d0I UTIL^EXPAND^SEM if ptr[ length ] = "95" then begin ! ! MasterCard Promotion Code ! movl( sem^ptr.addl^data.info. mc^prmtn^cde^sub^fld^95.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 06735y0l UTIL^ILF^ADD if prikey.orig^b24 = "0" then begin call hiswilf_supprs_discr_data( supprs^iss^discr^data^g, supprs^iss^cvd2^data^g, supprs^iss^avs^data^g, ! ilf !, sem.track1, $len( sem.track1 ), sem.track2, $len( sem.track2 ), sem.addl^data.info.cvc2^sub^fld^92, $len( sem.addl^data.info.cvc2^sub^fld^92 ), sem.crdhldr^addr, $len( sem.crdhldr^addr ) ); if sem.addl^data.info.visa^cvv2^sub^fld^92 <> [ $len ( sem.addl^data.info.visa^cvv2^sub^fld^92 ) * [ " " ] ] then begin call hiswilf_supprs_discr_data( ! supprs^iss^discr^data^g !, supprs^iss^cvd2^data^g, ! supprs^iss^avs^data^g !, ! ilf !, ! sem^trk1 !, ! sem^trk1^lgth !, ! sem^trk2 !, ! sem^trk2^lgth !, sem.addl^data.info.visa^cvv2^sub^fld^92, $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) ); end; ! of if sem.addl^data.info.visa^cvv2 . . . end; ! of if prikey.orig^b24 = "0" #ADD 06789y0E UTIL^ILF^ADD if $param( base24^msg ) and prikey.orig^b24 = "0" then begin ! ! Suppress discretionary data in the internal message and ! token sections of the ILF as indicated in the associated ! globals. ! call hiswilf_supprs_discr_data( supprs^iss^discr^data^g, supprs^iss^cvd2^data^g, ! supprs^iss^avs^data^g !, ilf ); end; ! of if $param( base24^msg ) #ADD 08181y0k UTIL^ILF^UPDT if orig_b24 = "0" then begin ! ! Suppress track discretionary data, card ! verification data, and address verification data as ! indicated in the associated globals ! call hiswilf_supprs_discr_data( supprs^iss^discr^data^g, supprs^iss^cvd2^data^g, supprs^iss^avs^data^g, ! ilf !, sem.track1, $len( sem.track1 ), sem.track2, $len( sem.track2 ), sem.addl^data.info.cvc2^sub^fld^92, $len( sem.addl^data.info.cvc2^sub^fld^92 ), sem.crdhldr^addr, $len( sem.crdhldr^addr ) ); ! ! The Banknet Interface has a separate field for ! Visa CVV2 request data. If it is present, call the ! utility again to suppress this field before ! logging. ! if sem.addl^data.info.visa^cvv2^sub^fld^92 <> [ $len ( sem.addl^data.info.visa^cvv2^sub^fld^92 ) * [ " " ] ] then begin call hiswilf_supprs_discr_data( ! supprs^iss^discr^data^g !, supprs^iss^cvd2^data^g, ! supprs^iss^avs^data^g !, ! ilf !, ! sem^trk1 !, ! sem^trk1^lgth !, ! sem^trk2 !, ! sem^trk2^lgth !, sem.addl^data.info.visa^cvv2^sub^fld^92, $len( sem.addl^data.info. visa^cvv2^sub^fld^92 ) ); end; ! of if sem.addl^data.info.visa^cvv2 . . . end; ! of if prikey.orig^b24 = "0" #ADD 08184y0D UTIL^ILF^UPDT if $param( base24^msg ) and orig_b24 = "0" then begin ! ! Suppress discretionary data in the internal message and ! token sections of the ILF as indicated in the associated ! globals. ! call hiswilf_supprs_discr_data( supprs^iss^discr^data^g, supprs^iss^cvd2^data^g, ! supprs^iss^avs^data^g !, ilf ); end; ! of if $param( base24^msg ) #ENDSCN = SW09465 !@CMP2.24 08/11/05 BNETS 6074 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6074 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6074 * ******************************************************************************** #SCN = SW09468 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00026{0F ! 11AUG2005 owallad ! Symptom: Banknet Issuer Discretionary Data Suppression ! Enhancements. ! Problem: None. ! Fix: Modified the code to support Issuer Discretionary Data ! Suppression Enhancements ! Modified procs: CMD^WARMBOOT^STORE^GLOBALS ! CMD^WARMBOOT^RETRIEVE^GLOBALS ! INIT^PARAMPROC ! Dependency: Apply fixes to BNETG, BNETLIBS, and BNETS and run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #050305-03 ! 11AUG2005 gruberg ! Symptom: Banknet Release 05.2 Mandates ! Problem: None ! Fix: Added support for inbound and outbound Acquirer ! Reversal Request/0400 messages and Acquirer Reversal ! Response/0410 messages. Added support for inbound and ! outbound Purchase with Cash Back transactions. Added ! data integrity checks to require that the txn-amt in ! DE 4 contains all zeroes in balance inquiries, that ! positions 14-16 of DE 61 contains a valid country code, ! and that if the country code in DE 61 is "840" that the ! zip code in DE 61 is not blanks, zeroes, or nines. ! Modified event message 1330 to correctly display the ! pstm tran code. ! Added procs: sem^acq^rvsl^resp ! sem^acq^rvsl^rqst ! Modified procs: bnet^^station^failed^message ! bnet^sem^xrvsl^failed ! pstm^0200^request ! pstm^0420^reversal ! sem^^input^from^station ! tim^out^00^outbound ! Dependency: BA10SC04 subvolume. New files: ILB0605M, ILB0605R, and ! ILB0605S. Apply fixes to BNETDDLS, BNETG, BNETLIBS and ! BNETS. Run MAKE. Run ILF conversion ILB0605. Replace ! BNETLOGM, BNETMAN and BNETUPDT. ! Reference: WO #050426-01 #ADD 00538 BNET^^STATION^FAILED^MESSAGE "0400", !acquirer reversal "0410", !acquirer reversal response #ADD 00613 BNET^^STATION^FAILED^MESSAGE !0400! call bnet^sem^xrvsl^failed( sem, msg ); !0410! call log^message^( 0185, ! routing code !, @mtyp, net.myname, evt^msg^severity^info^l, @sem.typ ); #REPLACE 00998 /00998 OFFSET 0 BNET^SEM^XRVSL^FAILED int .pstm( pstm^def ) := @susp.intrn^msg; int substate; #ADD 01000 BNET^SEM^XRVSL^FAILED if sem.typ = sem^acq^rvsl^rqst^d then begin if msg^failure then begin substate := sub^rqst^down^l; end else begin substate := sub^msg^reject^l; end; call sem^frmt^prikey( sem, susp.prikey, true ); if util^suspend^tran^delete( susp, $len( susp^bnet^def ), type^outbound^l, msg ) then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, susp.extrn^msg, $len(sem^def), substate ); end; ! of if util^suspend^tran^delete end; ! of if sem.typ = sem^acq^rvsl^rqst^d #ADD 02599w03 CMD^WARMBOOT^STORE^GLOBALS store^d( supprs^iss^avs^data^g ); store^d( supprs^iss^cvd2^data^g ); store^d( supprs^iss^discr^data^g ); #ADD 02599w08 CMD^WARMBOOT^STORE^GLOBALS set( supprs^iss^avs^data^g, false ); set( supprs^iss^cvd2^data^g, false ); set( supprs^iss^discr^data^g, false ); #ADD 02599w0D CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( supprs^iss^discr^data^g ); retrieve^d( supprs^iss^cvd2^data^g ); retrieve^d( supprs^iss^avs^data^g ); #ADD 03945w03 INIT^PARAMPROC "P", "SWI-ISS-AVS-DATA-SUPPRS ", "P", "SWI-ISS-CVD2-DATA-SUPPRS ", "P", "SWI-ISS-DISCR-DATA-SUPPRS ", #ADD 03996w0u INIT^PARAMPROC ! ! SWI-ISS-AVS-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs^iss^avs^data^g := true; end else begin supprs^iss^avs^data^g := false; end; end; ! ! SW-ISS-CVD2-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs^iss^cvd2^data^g := true; end else begin supprs^iss^cvd2^data^g := false; end; end; ! ! SW-ISS-DISCR-DATA-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin supprs^iss^discr^data^g := true; end else begin supprs^iss^discr^data^g := false; end; end; #REPLACE 04711 PSTM^0200^REQUEST "T - PSTM TYPE 0200 Request Received ( Tran Code: \\\\\\ ) " ) #REPLACE 05199 PSTM^0420^REVERSAL struct .susp( susp^bnet^def ); #ADD 05201 PSTM^0420^REVERSAL int err; int fatal^flg := true; int logon^acq := -1; int logon^cr := -1; int logon^db := -1; int pstm^lgth; int service := debit^l; int sta^x := -1; int tkn^lgth; int .user^data := @pstm; #REPLACE 05210 /05210 OFFSET 0 PSTM^0420^REVERSAL call util^get^bniif( fiid^l, pstm.term^fiid, prikey.term^id, logon^acq, ! logon issuer !, logon^cr, logon^db, ! service type !, ! traffic type !, ! security !, ! prefix !, ! prefix length !, ! avs type ! ); #ADD 05222 PSTM^0420^REVERSAL if sem.typ = sem^auth^response^d and pstm.rvsl^cde <> rvsl^hardware^error^d and pstm.rvsl^cde <> rvsl^suspect^d then begin init( susp, " ", wlen( susp^bnet^def ) ); susp.rec^typ := pos^l; susp.intrn^msg^lgth := msg^length; if pct.options.auth^only or pstm.tran.tran^cde = "11" or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" then begin ! ! Format an 0400/Acquirer Reversal Request from the ! internal 0420 Reversal ! service := credit^l; end; if base24^rel^g >= 6 then begin err := hiswpstm_txn_alwd_iss( pstm, pct.pos.iss^txn^prfl, msg^sym^source, emt_g[ ipcfemt_idx_l ].seg_id, pstm.num^services, ipcf_emt_rec_g, fatal^flg, emt_g[ ipcfemt_idx_l ].fname, tkn^lgth ); if err then begin if err = sys_frmt_err_l then begin ! ! System error ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem length !, sub^format^error^l ); return; end else if err = txn_cde_not_sppt_l then begin ! ! Tran not allowed to switch according to ! IPCFEMT ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem length !, sub^system^error^l ); return; end end ! of if hiswpstm_txn_alwd_iss returned an error else begin ! ! Adjust the susp internal message length to reflect ! the addition of the transaction allowed token ! pstm^lgth := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag = "1" then begin pstm^lgth := pstm^lgth + 2 + user^data[ wrds( pstm^lgth ) ]; end; susp.intrn^msg^lgth := pstm^lgth + tkn^lgth; end; end ! of if base24^rel^g >= 6 else if not hiswutil^pos^trans^allowed( pstm.tran.tran^cde, pct.pos.trans^allowed ) then begin ! ! Transaction not allowed to the switch according to the ! ICF ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem length !, sub^fail^pre^auth^l ); return; end; move( susp.prikey, ilf.prikey ); movl( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); if not pct.options.acq or not pct.pos.present then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem length !, sub^fail^pre^auth^l ); return; end; if not pstm^frmt^0420^to^acq^xrvsl( susp.intrn^msg, sem ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem length !, sub^format^error^l ); return; end; if ( ( service = credit^l ) and not logon^cr ) or ( ( service = debit^l ) and not logon^db ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^rqst^down^l ); return; end; if not logon^acq or ( not util^station^avail( sta^x, service ) ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^rqst^down^l ); return; end; if not util^^collapse( sem, csem, extlgth ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^system^error^l ); return; end; movl( susp.extrn^msg, sem.typ, $len( sem^def ) ); if not util^suspend^and^send^sem( csem, extlgth, susp, sta^x ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^system^error^l ); return; end; call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); return; end; ! of format an 0400/Acquirer Reversal Request #ADD 05292 SEM^^INPUT^FROM^STATION "0400", ! Acquirer reversal request "0410", ! Acquirer reversal response #ADD 05356 SEM^^INPUT^FROM^STATION !0400! call sem^acq^rvsl^rqst ( sem, msg, sta^x ); !0410! call sem^acq^rvsl^resp ( sem, msg, sta^x ); #ADD 05374j01 SEM^^INPUT^FROM^STATION ?section sem^acq^rvsl^resp ?page "sem^acq^rvsl^resp" !##################################################################### !# # !# sem^acq^rvsl^resp # !# # !# This procedure handles a 0410/Acquirer Reversal Response # !# message from the network. # !# # !# INPUT PARAMETERS: # !# sem - reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^acq^rvsl^resp( sem, msg, sta^x ); int .sem( sem^def ); int .msg; int sta^x; begin wlform( trace, "T - SEM Type \\\\ Acquirer Reversal Response Received," ',' " Response Code: \\" ) struct .ilf( ilf^def ); struct .susp( susp^bnet^def ); int .base24^msg[ 0:wlen( msg^def ) - 1 ]; int fnum; int ilf^found := false; int ilf^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def); string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; if trace^g.in^d then begin call log^message^( 1602, ! routing code !, @trace, net.myname, evt^msg^severity^info^l, @sem.typ, @sem.resp^cde ); end; if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; call sem^frmt^prikey( sem, susp.prikey, true ); ! ! Delete the timer and retrieve the record from suspense, if the ! transaction has not timed out. ! call util^suspend^tran^delete( susp, $len( susp^bnet^def ), type^outbound^l, msg ); if fnum := util^ilf^get( susp.prikey, $len( susp.prikey ), ilf, ilf^lgth, base24^msg ) then begin @pstm := @base24^msg; ilf^found := true; end; if not ilf^found then begin call util^ilf^add( dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, !pstm!, sem, $len( sem^def ), sub^rvsl^not^found^l ); return; end; ! of if no ILF record found ! ! Update the ILF record containing the PSTM 0420 Reversal and the ! SEM 0110/Authorization Request Response with the SEM ! 0410/Acquirer Reversal Request Response. ! if not util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, !pstm!, sem ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len(sem^def), sub^format^error^l ); end; ! of if not ILF update end; ! of proc sem^acq^rvsl^resp ?section sem^acq^rvsl^rqst ?page "sem^acq^rvsl^rqst" !##################################################################### !# # !# sem^acq^rvsl^rqst # !# # !# This procedure handles a 0400/Acquirer Reversal Request # !# message from the network. # !# # !# INPUT PARAMETERS: # !# rvsl - reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^acq^rvsl^rqst( rvsl, msg, sta^x ); int .rvsl( sem^def ); int .msg; int sta^x; begin wlform( trace, "T - SEM Type \\\\ Acquirer Reversal Request Received" ) struct .ack( sem^def ); struct .csem( sem^def ); struct .ilf( ilf^def ); struct .sem( sem^def ); int .auth^dest[ 0:7 ]; int .base24^msg[ 0:wlen( msg^def ) - 1 ]; int err; int extlgth; int fatal^flg; int fnum; int ilf^found; int ilf^lgth; int .pbit^map := wordaddr( @rvsl.pbit^map ); int .pstm( pstm^def); string ack^resp^cde[ 0:1 ]; string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; string log^auth^dest^resp; ?page "subproc frmt^and^send^acq^rvsl^resp of sem^acq^rvsl^rqst" !################################################################# !# # !# This subprocedure formats and sends an acquirer reversal # !# response # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc frmt^and^send^acq^rvsl^resp; begin call sem^frmt^xrvsl^to^sem^xack( rvsl, ack ); ack.resp^cde ':=' ack^resp^cde for $len( ack.resp^cde ); call util^^collapse( ack, csem, extlgth ); call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam ); end; ! of subproc frmt^and^send^acq^rvsl^resp ?page "sem^acq^rvsl^rqst" !################################################################# !# # !# This is the main body of PROC sem^acq^rvsl^rqst # !# # !################################################################# if trace^g.in^d then begin call log^message^( 1601, ! routing code !, @trace, net.myname, evt^msg^severity^info^l, @rvsl.typ ); end; ack^resp^cde ':=' "00"; err := false; fatal^flg := true; ilf^found := false; if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( rvsl.setl^dat, dat ); call util^ilf^dat( dat ); end; ilf.rec^typ := pos^l; call sem^frmt^prikey( rvsl, ilf.prikey ); if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, sem ) ) then begin ilf^found := true; @pstm := @base24^msg; end; if not ilf^found then begin if frwd^unmatched^rvsls^g = false then begin ! ! The interface is configured NOT to forward unmatched ! reversals. Format and send a denial 0410 Acquirer ! Reversal Response message to the network. Do not ! format and send an internal 0420 POS reversal message ! to BASE24-pos Router Authorization. Add a record to ! the ILF consisting of an external 0410 Acquirer ! Reversal Request Response with substate ! SUB^RVSL^NOT^FOUND^L, and drop the 0400 Acquirer ! Reversal Request message. ! ack^resp^cde ':=' resp^tran^not^supp^sem^d; call frmt^and^send^acq^rvsl^resp; call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, ack, $len( sem^def ), sub^rvsl^not^found^l ); return; end ! of if frwd^unmatched^rvsls^g = false else begin ! ! Forward unmatched reversals to Router Authorization. ! @pstm := @base24^msg; err := sem^frmt^xrqst^to^pstm^0200( rvsl, pstm, sta^x ); if err then begin ! ! An error occured during the formatting of the ! internal 0420 POS message. Format and send a ! denial 0410 Acquirer Reversal Response message to ! the network. Do not format and send an internal ! 0420 POS reversal message to BASE24-pos Router ! Authorization. Add a record to the ILF with ! substate SUB^FORMAT^ERROR^L, consisting of an ! external 0410 Acquirer Reversal Request Response, ! and drop the 0400 Acquirer Reversal Request ! message. ! ack^resp^cde ':=' resp^frmt^err^sem^d; call frmt^and^send^acq^rvsl^resp; call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, ack, $len( sem^def ), sub^format^error^l ); return; end; ! if error formatting internal message ! ! Internal 0420 PSTM formatted successfully ! call sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm ); ! ! Add the Acquirer Routing token to the PSTM and send ! the reversal. ! if base24^rel^g >= 6 then begin ! ! Determine the destination for the BASE24-pos ! reversal using the Acquirer Routing Token or the ! APCFEMT record. ! err := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth^dest, log^auth^dest^resp, fatal^flg, emt_g[ apcfemt_idx_l ].fname ); if err then begin ! ! The destination for the BASE24-pos reversal ! cannot be determined. Format and send a denial ! 0410 Acquirer Reversal Response message to the ! network. Do not format and send an internal ! 0420 POS reversal message to BASE24-pos Router ! Authorization. Add a record to the ILF with ! substate SUB^FAIL^PRE^AUTH^L, consisting of an ! external 0410 Acquirer Reversal Request ! Response, and drop the 0400 Acquirer Reversal ! Request message. ! ack^resp^cde ':=' resp^frmt^err^sem^d; call frmt^and^send^acq^rvsl^resp; call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! pstm !, ack, $len( sem^def ), sub^fail^pre^auth^l ); return; end; ! of destination not determined call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end ! of if base24^rel^g >= 6 else begin call util^send^pstm( pstm, pct.pos.dest ); end; ! of base24^rel^g < 6 call frmt^and^send^acq^rvsl^resp; call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, ack, $len( sem^def ), sub^rvsl^not^found^l ); return; end; ! of if frwd^unmatched^rvsls^g = true end; ! of if not ilf^found ! ! A record was found in the ILF. Format an internal 0420 POS ! message from the external 0400 Acquirer Reversal Request ! message and the original message retrieved from the ILF. ! if ( ilf.intrn^msg^savearea^lgth = 0 ) or poss^dup^d( pstm ) or pos^inquiry^d( pstm ) or not pos^approved^d( pstm ) then begin ! ! Format and send a denial 0410 Acquirer Reversal Response ! message to the network. Do not format and send an internal ! 0420 POS reversal message to BASE24-pos Router ! Authorization. Update the ILF record so that it consists ! of an external 0410 Acquirer Reversal Request Response, and ! drop the 0400 Acquirer Reversal Request message. ! ack^resp^cde ':=' resp^tran^not^supp^sem^d; call frmt^and^send^acq^rvsl^resp; if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^format^error^l, ! pstm !, ack ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, ack, $len( sem^def ), sub^format^error^l ); end; ! of if error updating the ILF return; end; ! ! The 0400 Acquirer Reversal Request message may be generated ! only when an issuer provided an Authorization Response/0110 ! message with DE 39 value of "00" or "08". ! if rvsl.orig.msg^typ <> sem^auth^request^d or sem.typ <> sem^auth^response^d or ( sem.resp^cde <> resp^apprvd^sem^d and sem.resp^cde <> resp^honor^with^id^sem^d ) then begin ! ! Format and send a denial 0410 Acquirer Reversal Response ! message to the network. Do not format and send an internal ! 0420 POS reversal message to BASE24-pos Router ! Authorization. Update the ILF record so that it consists ! of an external 0410 Acquirer Reversal Request Response, and ! drop the 0400 Acquirer Reversal Request message. ! ack^resp^cde ':=' resp^tran^not^supp^sem^d; call frmt^and^send^acq^rvsl^resp; if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^format^error^l, ! pstm !, ack ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, ack, $len( sem^def ), sub^format^error^l ); end; ! of error updating the ILF return; end; call sem^frmt^xrvsl^to^pstm^0420( rvsl, pstm, sem ); if base24^rel^g >= 6 then begin ! ! Add Acquirer Routing Token to the PSTM and send the ! reversal. ! err := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth^dest, log^auth^dest^resp, fatal^flg, emt_g[ apcfemt_idx_l ].fname ); if err then begin ! ! The destination for the BASE24-pos reversal cannot be ! determined. Format and send a denial 0410 Acquirer ! Reversal Response message to the network. Do not ! format and send an internal 0420 POS reversal message ! to BASE24-pos Router Authorization. Update the ILF ! record so that it consists of an external 0410 Acquirer ! Reversal Request Response, and drop the 0400 Acquirer ! Reversal Request message. ! ack^resp^cde ':=' resp^frmt^err^sem^d; call frmt^and^send^acq^rvsl^resp; if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^format^error^l, ! pstm !, ack ) then begin ! ! The call to util^ilf^updt failed. Expand the ! original pstm retrieved from the ILF, and log a ! record to the ILF consisting the PSTM 0210 ! retrieved from the ILF and the 0410 Acquirer ! Reversal Request Response. ! call util^ilf^expand^base24( ilf, base24^msg ); if not hiswilf^get^tkn( ilf, base24^msg, ilf^lgth, base24^rel^g ) then begin call abend^( 2011 ); end; call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, ack, $len( sem^def ), sub^fail^pre^auth^l ); end; ! of if error updating the ILF return; end; ! of destination cannot be determined call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end ! of base24^rel^g >= 6 else begin call util^send^pstm( pstm, pct.pos.dest ); end; ! of if base24^rel^g >= 6 call frmt^and^send^acq^rvsl^resp; if not util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm, ack ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, ack, $len( sem^def ), sub^format^error^l ); end; ! of error updating the ILF end; ! of proc sem^acq^rvsl^rqst #REPLACE 08008j02 TIM^OUT^00^OUTBOUND int .sem( sem^def ) := @susp.extrn^msg; #ADD 08023j00 TIM^OUT^00^OUTBOUND if sem.typ <> sem^acq^rvsl^rqst^d then begin ! ! When a timeout occurs on an outbound external 0400/Acquirer ! Reversal Request message, the interface will NOT format and ! send a denied response to BASE24-pos. Upon receipt of the ! late 0410/Acquirer Reversal Request Response message ! inbound to the interface from the network, the interface ! will retrieve the original PSTM 0210 Response/external 0110 ! Authorization Request Response record from the ILF and will ! update the record with the PSTM 0420 Reversal/external 0410 ! Acquirer Reversal Request Response. ! call pstm^0200^route( susp, resp^unable^to^process^pos^l, sub^timeout^l ); end; #DELETE 08023j01/08023j02 TIM^OUT^00^OUTBOUND #ENDSCN = SW09468 !@CMP2.24 08/31/05 BNETS 6075 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6075 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6075 * ******************************************************************************** #SCN = SW09519 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00026}0f ! 31AUG2005 frederr ! Symptom: MasterCard is being sent reversals for denied ! transactions. ! Problem: The interface is checking the PSTM off of the ILF to ! determine if a rejected message should be reversed. ! If the interface denies the original request due to ! a format issue, the PSTM may not be complete. This can ! cause a reversal for a denied transaction. ! Fix: Added code to check the external message as well as the ! internal message to determine if a rejected 0210 should ! be reversed. ! Modified procs: sem^response^nack^pos ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #397088. #ADD 07107 SEM^RESPONSE^NACK^POS if not sem^approved^d( resp ) or sem^inquiry^d( resp ) or poss^dup^d( resp ) then begin return; #REPLACE 07108 SEM^RESPONSE^NACK^POS end; #ENDSCN = SW09519 !@CMP2.24 09/07/05 BNETG 6035 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6035 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6035 * ******************************************************************************** #SCN = SW09523 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6035 #NEWVERSION = 6036 #ADD 00026i0c ! 06SEP2005 engelk ! Symptom: SEM approved advice transactions are not sent into ! BASE24. ! Problem: The define used to identify approved SEM transactions ! consisted of "OR" statements which were not enclosed ! within parentheses. Including them with other checks ! results in erroneous checks. The define to identify ! SEM adjustment transactions consisting of "OR" ! statements is also not enclosed within parentheses. ! Fix: Placed parentheses around the "OR" conditions in the ! define to identify SEM approved transactions. Made ! the same change to the define used to identify SEM ! adjustment transactions. ! Modified: sem^approved^d and sem^adjustment^d defines. ! Dependency: Apply fix to BNETG and run MAKE. ! Reference: Case #400360 and #400129 #ADD 00227 define sem^approved^d( x ) = ( x.resp^cde = "00" or x.resp^cde = "08" or x.resp^cde = "85" )#, sem^adjustment^d( x ) = ( x.proc^cde = "02" or x.proc^cde = "22" )#, #DELETE 00228 /00231 #ENDSCN = SW09523 !@CMP2.24 09/07/05 BNETLIBS60100FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60100 * ******************************************************************************** #SCN = SW09524 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O000260y ! 06SEP2005 engelk ! Symptom: DE-90 subelement 2 (original trace number - DE-11) and ! subelement 3 (original transmission date and time - ! DE-7) are not set correctly in reversal transactions. ! Problem: DE-90 was populated after these values (DE-7 and DE-11) ! had been updated in the reversal transaction. ! Fix: Moved the code to populate DE-90 prior to the code ! which updated DE-7 and DE-11 in the reversal ! transaction. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #400306. #ADD O0096611 PSTM^FRMT^0420^TO^ACQ^XRVSL ! ! Set the original data in bit 90 ! orig^data^bit^d := 1; mov^( sem.orig, zeroes ); movd( sem.orig.msg^typ, sem^auth^request^d ); move( sem.orig.trace, sem.trace^num ); move( sem.orig.dat^tim, sem.tran^dat^tim ); call hiswutil^justify^field( sem.orig.acq^inst^id, $len( sem.orig.acq^inst^id ), sem.acq^inst.cde, $len( sem.acq^inst.cde ), right^justify^l ); if fwd^inst^bit^d then begin call hiswutil^justify^field( sem.orig.fwd^inst^id, $len( sem.orig.fwd^inst^id ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #DELETE O0096638/O009663c PSTM^FRMT^0420^TO^ACQ^XRVSL #ENDSCN = SW09524 !@CMP2.24 09/26/05 BNETLIBS60101FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60101 * ******************************************************************************** #SCN = SW09571 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P000260C ! 26SEP2005 wielerk ! Symptom: Data element 48 in the external 0410 message outbound ! from the interface to the network does not contain ! the same value as in the the original 0400 Acquirer ! Reversal Request message. ! Problem: When processing both 0420 Reversal Advice and 0400 ! Acquirer Reversal Request messages inbound to the ! interface from the network, the interface is mapping ! data from the ILF to the external message 0420/0400 ! for bits 12, 13, 14, 18, 22, 26, 37, 41, 42, 43, 48, ! and 61. This processing is correct for the 0420 ! Reversal Advice. The external 0410 Acquirer Reversal ! Response message is formatted from the 0400 Acquirer ! Reversal Request message. For the 0410 message, bits ! 12, 13, 14, 18, 22, 26, 42, 43 and 61 are not supported, ! bits 37 and 41 must be the same value as in the ! orignal 0400, if present, and bit 48 must be the same ! value as in the original 0400 message. Therefore, the ! interface should not be mapping data from the ILF to the ! 0400 which is then used to format the 0410 outbound from ! the interface to the network. ! Fix: Modified the interface to only map data from the ILF to ! the external 0420". It will no longer map data from the ! ILF to the external 0400. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #401023. #ADD 03894k0C SEM^FRMT^XRVSL^TO^PSTM^0420 if rvsl.typ = sem^rvsl^adv^d then begin ! ! For an external 0420, RVSL will be used to update the ILF ! For an external 0400, RVSL needs to stay as it is so the ! 0410 can be echoed correctly. ! move( rvsl.local^tim, sem.local^tim ); move( rvsl.local^dat, sem.local^dat ); move( rvsl.exp^dat, sem.exp^dat ); move( rvsl.merch^typ, sem.merch^typ ); move( rvsl.pos^entry^mde, sem.pos^entry^mde ); move( rvsl.pin^cap^cde, sem.pin^cap^cde ); move( rvsl.ref^num, sem.ref^num ); move( rvsl.crd^acpt^term^id, sem.crd^acpt^term^id ); move( rvsl.crd^acpt^id^cde, sem.crd^acpt^id^cde ); move( rvsl.crd^acpt, sem.crd^acpt ); move( rvsl.addl^data, sem.addl^data ); move( rvsl.ntl^pos^data, sem.ntl^pos^data ); end; ! of external message type = 0420 #DELETE 03895 /03906 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW09571 !@CMP2.24 09/28/05 BNETLIBS60102FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60102 * ******************************************************************************** #SCN = SW09572 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q000260S ! 28SEP2005 frederr ! Symptom: Data element 48 is not being sent back in response ! messages when tag 82 (AVS Data) or tag 92 (CVC data) ! are the only tags sent in the request message. ! Problem: The interface is not checking for tag '82' or tag '92' ! when deciding if DE-48 should be sent back in the ! response message. ! Fix: Modified the interface to check for tag '82' and tag ! '92' when deciding if DE-48 should be sent back in the ! response message. ! Proc modified: sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #397087. #ADD 03663400 SEM^FRMT^XRQST^TO^SEM^XRESP if addl^data^bit^d and sem.addl^data.info.avs^rqst.tag = "82" and sem.addl^data.info.avs^rqst.cde <> " " and sem.addl^data.info.avs^rqst.cde <> "0" then begin ! ! If AVS request data was sent in the request, field 48, must ! be sent back in the response with all of the subelements ! it contained in the original message ! send^addl^data := true; end; #ADD 0366340p SEM^FRMT^XRQST^TO^SEM^XRESP if addl^data^bit^d and sem.addl^data.info.cvc2^sub^fld^92.tag = "92" and sem.addl^data.info.cvc2^sub^fld^92.tag^data <> " " and sem.addl^data.info.cvc2^sub^fld^92.tag^data <> "0" then begin ! ! If CVC2 data was sent in the request, field 48, must ! be sent back in the response with all of the subelements ! it contained in the original message ! send^addl^data := true; end; if addl^data^bit^d and sem.addl^data.info.visa^cvv2^sub^fld^92.tag = "92" and sem.addl^data.info.visa^cvv2^sub^fld^92.prsn^ind <> " " then begin ! ! If VISA CVV2 data was sent in the request, field 48, must ! be sent back in the response with all of the subelements ! it contained in the original message ! send^addl^data := true; end; #ENDSCN = SW09572 !@CMP2.24 10/05/05 BNETLIBS60103FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60103 * ******************************************************************************** #SCN = SW09586 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R000260E ! 05OCT2005 engelk ! Symptom: Tag 43 of subfield 48, Universal Card Authentication ! Field (UCAF), is not correctly formatted from the PSTM ! Authentication Data Token (CE). ! Problem: The authentication data field in the CE token is 200 ! bytes long, but the token is only included for the ! length of the data sent. The interface was, however, ! treating this token field as if 200 bytes were present ! when attempting to eliminate trailing spaces in the data ! sent to MasterCard. In most cases, this was in another ! token or beyond the end of the internal message. ! Fix: Added code to take advantage of the token length ! returned from the token get procedure when attempting ! to eliminate trailing spaces from the UCAF data. ! Procs modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #399293. #ADD E0154104 PSTM^FRMT^SEM^ADDL^DATA data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn.authn^ind^flg ) ) ); data^lgth := $min( data^lgth, $len( authn^data^tkn.authn^ind^data ) ); #DELETE E0154105/E0154106 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW09586 !#CMP2.26 11/16/05 BNETLIBS60104FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60104 * ******************************************************************************** #SCN = SW09669 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S000260I ! 15NOV2005 engelk ! Symptom: Tag 43 of field 48, Universal Card Authentication Field ! (UCAF), is not correctly formatted from the PSTM ! Authentication Data Token (CE). ! Problem: 1) The authentication data field in the CE token is 200 ! bytes long, but the token is only included for the ! length of the data sent. The interface was, however, ! treating this token field as if 200 bytes were present ! when attempting to eliminate trailing spaces in the data ! sent to MasterCard. In most cases, this was in another ! token or beyond the end of the internal message. This ! was corrected in one area when the authentication data ! moved from the token into the sem, but it was missed in ! another area. ! 2) When a SEM 0400 reversal was formatted from the SEM ! response found on the ILF, SE-43 (Universal Card ! Authentication Field) and SE-95 (MasterCard Promotion ! Code) of field 48 (Additional Data) were included for ! their maximum length, but these fields can be shorter ! than that maximum. ! Fix: 1) Added code to take advantage of the token length ! returned from the token get procedure when attempting ! to eliminate trailing spaces from the UCAF data. ! 2) Modified the SEM reversal formatting logic to use the ! lengths specified for SE-43 and SE-95 when computing the ! length of field 48. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #399293 #REPLACE O009660Y PSTM^FRMT^0420^TO^ACQ^XRVSL int sub^lgth := 0; #ADD O009662J PSTM^FRMT^0420^TO^ACQ^XRVSL call ascii^integer( orig^sem.addl^data.info. ucaf^sub^fld^43.lgth, $len( orig^sem.addl^data. info.ucaf^sub^fld^43.lgth ), sub^lgth ); sub^lgth := $max( 0, sub^lgth ); sub^lgth := $min( sub^lgth, $len( orig^sem.addl^data.info. ucaf^sub^fld^43.tag^data ) ); if sub^lgth > 0 then begin sub^lgth := sub^lgth + $len( orig^sem.addl^data.info. ucaf^sub^fld^43.tag ) + $len( orig^sem.addl^data.info. ucaf^sub^fld^43.lgth ); end; de48^lgth := de48^lgth + sub^lgth; #DELETE O009662K/O009662M PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD O009662q PSTM^FRMT^0420^TO^ACQ^XRVSL call ascii^integer( orig^sem.addl^data.info. mc^prmtn^cde^sub^fld^95.lgth, $len( orig^sem.addl^data.info. mc^prmtn^cde^sub^fld^95.lgth ), sub^lgth ); sub^lgth := $max( 0, sub^lgth ); sub^lgth := $min( sub^lgth, $len( orig^sem.addl^data.info. mc^prmtn^cde^sub^fld^95.tag^data ) ); if sub^lgth > 0 then begin sub^lgth := sub^lgth + $len( orig^sem.addl^data.info. mc^prmtn^cde^sub^fld^95.tag ) + $len( orig^sem.addl^data.info. mc^prmtn^cde^sub^fld^95.lgth ); end; #REPLACE O009662r PSTM^FRMT^0420^TO^ACQ^XRVSL de48^lgth := de48^lgth + sub^lgth; #DELETE O009662s/O009662t PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD F0154121 PSTM^FRMT^SEM^ADDL^DATA data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn.authn^ind^flg ) ) ); data^lgth := $min( data^lgth, $len( authn^data^tkn.authn^ind^data ) ); #DELETE F0154122/F0154124 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW09669 !#CMP2.26 12/07/05 BNETLIBS60105FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60105 * ******************************************************************************** #SCN = SW0A033 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T000260V ! 06DEC2005 engelk ! Symptom: The interface abends with a trap #2280 while processing ! a SEM POS response when attempting to add the POS data1 ! (CH) token. ! Problem: When a SEM response is formatted to a PSTM response, ! the CH token is added to the interface. No check is ! made for its presence. ! Fix: Added code to update the CH token if already present ! in the PSTM when a SEM response is formatted to a ! PSTM response. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run MAKE. Replace BNETLOGM. ! Reference: Case #403825. #REPLACE 0313370A/03133Q0H SEM^FRMT^XRESP^TO^PSTM^0210 wlform( get^err, "ERROR # RETRIEVING \\ TOKEN: PAN: \\\\\\\\\\\\\\\\\\\ " ','" SEQ: \\\\\\\\\\\\ REF: \\\\\\\\\ SETL DATE: \\\\ " ) #REPLACE G0313500 SEM^FRMT^XRESP^TO^PSTM^0210 .pos^data1^tkn^ptr( pos^data1^tkn^def ), #REPLACE 0320870U SEM^FRMT^XRESP^TO^PSTM^0210 intrn^msg^lmt^l, #REPLACE 0320870f SEM^FRMT^XRESP^TO^PSTM^0210 if tkn^result and tkn^result <> tkn^exist^l then #REPLACE 0320870j SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if tkn^result and tkn^result <> tkn^exist^l ! #ADD 0320870k SEM^FRMT^XRESP^TO^PSTM^0210 if tkn^result and tkn^result = tkn^exist^l then begin ! ! CH token exists in message -- update it ! movd( tkn^id, pos^data1^tkn^id^d ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @pos^data1^tkn^ptr, tkn^lgth, ! ascii format flag !, pos^userdata ); if tkn^result then begin call log^message^( 3240, ! routing code !, @get^err, net.myname, evt_msg_severity_crit_l, tkn^result, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); call abend^( 3240 ); end; ! if tkn^result on CH token get move( pos^data1^tkn^ptr.crd^vrfy^flg2, crd^vrfy^flg2 ); end; ! if CH add tkn^result = tkn^exist^l #DELETE 0320870l/F032082o SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0A033 !#CMP2.26 01/06/06 BNETS 6076 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6076 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6076 * ******************************************************************************** #SCN = SW0A108 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0002600E ! 06JAN2006 wielerk ! Symptom: Denied responses are sent back to RTAU when the station ! is down or the process is not logged on. ! Problem: A previous fix to send 0210 denials when alternate ! routing is not configured does not allow AST default ! actions to take place. If AST is configured and ! available, the interface should return a 0200 to RTAU. ! Fix: Added logic to exclude messages with AST records from ! returning denials to RTAU. ! Modified procs: pstm^0200^route ! Dependency: Apply fix to BNETS. Run MAKE. ! Reference: Case #400866. #ADD 04882{0C PSTM^0200^ROUTE if pstm.rte.ast^fnd <> "1" and ( pstm.auth^ind2 = "0" or pstm.auth^ind2 = " " ) then begin ! ! ast^fnd <> 1 means no AST record to provide default ! action for returned request. ! #DELETE 04882{0D/04882{0E PSTM^0200^ROUTE #ENDSCN = SW0A108 !#CMP2.26 02/06/06 BNETS 6077 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6077 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6077 * ******************************************************************************** #SCN = SW0A141 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0002610D ! 03FEB2006 engelk ! Symptom: Interface dumps with a trap 1000 after emitting EMS ! message #9516 while processing a PSTM 0420 reversal. ! Problem: The interface is not checking an ILF record retrieved ! for a reversal to ensure that a SEM is present before ! attempting an ILF update of that record which includes ! a SEM. ! Fix: Added code to ensure that a SEM was forwarded to the ! interchange before attempting to format and send a ! reversal for that transaction. If no SEM was previously ! sent, an ILF record is added with the internal reversal ! only. ! Procs modified: pstm^0420^reversal ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #406045 #ADD 05222 PSTM^0420^REVERSAL if ilf.extrn^msg^lgth = "0000" or ilf.extrn^msg^lgth = " " then begin ! ! no SEM sent to the switch for original tran - update ILF ! and exit without further processing ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^not^supported^l ); return; end; ! No SEM on ILF #ENDSCN = SW0A141 !#CMP2.26 02/13/06 BNETDDLS6022 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6022 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6022 * ******************************************************************************** #SCN = SW0A168 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6022 #NEWVERSION = 6023 #ADD 00262V0D * 13FEB2006 sanderj * Symptom: Banknet Release 06.1 Mandates * Problem: None * Fix: 1. Added support for subelements 61, 74 and 96 within * DE 48 of the SEM definition. * 2. Added new fields Process Indicator and Processing * Information, (SE 74 of DE 48) to the BNET switch token * definition. * 3. Added support for Recurring Payment Cancellation * Service Data and removed support for Address Service * Data within the PATH-RQST definition, the BNRLF * definition and in DE 120 of the FRQST definition. * Dependency: BA10SC04 subvolume. New files: BRL0206M, BRL0206S, * BRL0206R, ILB0206M, ILB0206R and ILB0206S. Apply fixes * to BNETDDLS, BNETEMVS, BNETG, BNETLIBS, BNETS, * RQBNRLFS, SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the * ILF conversion using ILB0206M. Run the ILF conversion * using ILB0206R. MAKE the BNRLF conversion using * BRL0206M. Run the BNRLF conversion using BRL0206R. * Replace BNETMAN and BNETUPDT. * Reference: WO #051110-01. #ADD 00636S04 FRQST * MCC105 is used for Recurring Payment Cancellation Service * file updates. #DELETE 00638 /00639 FRQST #ADD 00643 FRQST * * Reason for listing this card. Valid value is "A": * (recurring payment cancellation service). * 06 entry-rsn pic x. * * The issurer-defined purge date must be no more than 15 * months beyond the account list date in YYYYMMDD format. * 06 purge-dat pic x(8). * * Valid acquirer ICA. * 06 acq-id pic x(6). * * Must be unique per acquirer ICA. Must be a value other than * spaces. * 06 crd-accpt-id-cde pic x(15). * * Indicates a single transaction amount or the start of a * transaction amount range. This is optional and must be * right justified with leading zeros. * 06 low-txn-amt pic x(12). * * Indicates the end of a transaction amount range. This is * optional and must be right justified with leading zeros. * 06 high-txn-amt pic x(12). * * FILLER added to fill out the remaining 926 bytes. * 06 filler2 pic x(926). #DELETE 00644 /00655 FRQST #ADD 01157V0R SEM * * POS Data, Extended Condition Codes * Subfield tag = 61 * Indicates whether the merchant terminal supports a specific program * or service. * * Valid values position 1 * (Partial Approval Terminal Support Indicator): * 0 = Merchant terminal does not support receipt of partial approvals. * 1 = Merchant terminal supports receipt of partial approvals. * * Positions 2 thru 5 are reserved for future use and will be * zero-filled. * 06 ext-cond-cdes-sub-fld-61. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 partial-apprv-ind pic 9. 10 user-fld pic 9(4). * * Additional Procesing Information * Subfield tag = 74 * Contains information about a chip cryptogram validation issue. It * may have up to 10 occurences. * * Valid values postions 1-2 (Process Indicator): * 02 = MasterCard On-behalf Service - M/Chip Cryptogram Pre-validation * 03 = MasterCard On-behalf Service - M/Chip Cryptogram Validation in * Stand-in Aprocessing * 50 = Issuer Chip Validation * * Valid values position 3 (Processing Information): * I = Application Cryptogram invalid * U = Application Cryptogram could not be validated due to technical * error * F = Fromat error in DE 55 * G = Cryptogram in Application is valid but is not an ARQC * T = Application Cryptogram is valid but TVR/CVR was invalid * X = Issure provided incorrect subfield 2 value * 06 adnl-proc-info-sub-fld-74. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 mchip-pro-ind pic x(2). 10 mchip-proc-info pic x. * * Visa Market-Specific Data Identifier * Subfield tag = 96 * Contains the new value B (Bill Payment Transaction) that identifies * a Visa bill payment transaction. * 06 visa-mkt-spcfc-data-sub-fld-96. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9. #ADD 02433 ICF-BNET * MCC105 is used for Recurring Payment Cancellation Service * file updates. * #DELETE 02434 /02435 ICF-BNET #ADD 02439 ICF-BNET * * Reason for adding this card. Valid value is "A" * (recurring payment cancellation service). * 06 entry-rsn pic x. 06 purge-dat pic x(8). 06 acq-id pic x(6). 06 crd-accpt-id-cde pic x(15). 06 low-txn-amt pic x(12). 06 high-txn-amt pic x(12). #DELETE 02440 /02450 ICF-BNET #REPLACE 02451 ICF-BNET 06 filler2 pic x(27). #REPLACE 02506 BNRLF 02 bnrlf-txt pic x(220). #REPLACE 02514 BNRLF * "A" - recurring payment cancellation service ! #DELETE 02557 /02566 BNRLF #ADD 02566T00 BNRLF 04 low-txn-amt pic x(12). 04 high-txn-amt pic x(12). #ADD 02566S00 BNRLF 04 crd-accpt-id-cde pic x(15). 04 filler1 pic x(21). #DELETE 02566S01 BNRLF #REPLACE 02760R01 SAF-BNET * Switch token version (ver-id) will be "06". #ADD 02760R05 SAF-BNET 02 mchip-pro-ind pic x(2). 02 mchip-proc-info pic x. #DELETE 02760R06 SAF-BNET #ENDSCN = SW0A168 !#CMP2.26 02/13/06 BNETG 6036 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6036 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6036 * ******************************************************************************** #SCN = SW0A169 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6036 #NEWVERSION = 6037 #ADD 00026g0B ! 13FEB2006 sanderj ! Symptom: Banknet Release 06.1 Mandates ! Problem: None ! Fix: 1. Added '10' (approved response code) to the ! sem^approved^d define. ! 2. Added literal resp^timeout^pos^l. ! 3. Added defines to support chip enhancements. ! 4. Sourced in txn^subtyp^tkn from baddltal ! Dependency: BA10SC04 subvolume. New files: BRL0206M, BRL0206S, ! BRL0206R, ILB0206M, ILB0206R and ILB0206S. Apply fixes ! to BNETDDLS, BNETEMVS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the ! ILF conversion using ILB0206M. Run the ILF conversion ! using ILB0206R. MAKE the BNRLF conversion using ! BRL0206M. Run the BNRLF conversion using BRL0206R. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #051110-01. #ADD 00026f1D ? txn^subtyp^tkn #ADD 00026O36 ! txn^subtyp^tkn #ADD 00227j02 x.resp^cde = "10" or #ADD 00264I01 literal resp^timeout^pos^l = 113; ! Base24 POS Response Codes define pos^resp^ref^arqc^fail^d = "130"#; define pos^resp^ref^cvr^chk^fail^d = "131"#; define pos^resp^ref^tvr^chk^fail^d = "132"#; define pos^resp^dec^arqc^fail^d = "400"#; define pos^resp^dec^hsm^param^err^d = "401"#; define pos^resp^dec^hsm^fail^d = "402"#; define pos^resp^dec^keyi^not^found^d = "403"#; define pos^resp^dec^cvr^chk^fail^d = "405"#; define pos^resp^dec^tvr^chk^fail^d = "406"#; #ENDSCN = SW0A169 !#CMP2.26 02/14/06 BNETLIBS60106FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60106 * ******************************************************************************** #SCN = SW0A170 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD 00027k00 ! 13FEB2006 sanderj ! Symptom: Banknet Release 06.1 Mandates ! Problem: None ! Fix: 1. Added support for Acquirer Reversal Advice/0420 ! messages. ! 2. Added support for chip enhancements. ! 3. Added support for partial approvals. ! 4. Added support for Recurring Paymant Cancellation ! Service. ! 5. Added support for VISA Gateway enhancement. ! Procs modified: path^frmt^file^rqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^prikey ! sem^frmt^resp^cde^to^pstm ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: BA10SC04 subvolume. New files: BRL0206M, BRL0206S, ! BRL0206R, ILB0206M, ILB0206R and ILB0206S. Apply fixes ! to BNETDDLS, BNETEMVS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the ! ILF conversion using ILB0206M. Run the ILF conversion ! using ILB0206R. MAKE the BNRLF conversion using ! BRL0206M. Run the BNRLF conversion using BRL0206R. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #051110-01. #ADD 00505J02 PATH^FRMT^FILE^RQST if path.frqst.file^name = "MCC105" then begin ! ! Turn on the pan field in the external message ! pan^bit^d := 1; ! ! Determine the length of the pan ! scan path.frqst.mcc105.acct^num until " " -> @ptr; lgth := $min( $len( path.frqst.mcc105.acct^num ), ( @ptr '-' @path.frqst.mcc105.acct^num ) ); call integer^ascii( sem.pan.lgth, $len( sem.pan.lgth ), lgth); move( sem.pan.num, path.frqst.mcc105.acct^num ); file^rec^bit^d := 1; init( sem.file^rec.mcc105, " ", $len( sem.file^rec.mcc105 ) ); lgth := $offset( sem.file^rec.mcc105.high^txn^amt ) - $offset( sem.file^rec.mcc105.acct^num ); move( sem.file^rec.mcc105.acct^num, path.frqst.mcc105.acct^num ); move( sem.file^rec.mcc105.acq^id, path.frqst.mcc105.acq^id ); move( sem.file^rec.mcc105.crd^accpt^id^cde, path.frqst.mcc105.crd^accpt^id^cde ); if path.frqst.file^updt^cde = "1" or path.frqst.file^updt^cde = "2" then begin movd( sem.file^rec.mcc105.entry^rsn, "A" ); end; ! of if path.frqst.file^updt^cde = "1" or "2" if path.frqst.mcc105.purge^dat <> [ $len( path.frqst.mcc105.purge^dat ) * [ " " ] ] then begin move( sem.file^rec.mcc105.purge^dat, path.frqst.mcc105.purge^dat ); end; ! of if path.frqst.mcc105.purge^dat <> ... if path.frqst.mcc105.low^txn^amt <> [ $len( path.frqst.mcc105.low^txn^amt ) * [ " " ] ] then begin move( sem.file^rec.mcc105.low^txn^amt, path.frqst.mcc105.low^txn^amt ); lgth := lgth + $len( sem.file^rec.mcc105.low^txn^amt ); end; ! of if path.frqst.mcc105.low^txn^amt <> ... if path.frqst.mcc105.high^txn^amt <> [ $len( path.frqst.mcc105.high^txn^amt ) * [ " " ] ] then begin move( sem.file^rec.mcc105.high^txn^amt, path.frqst.mcc105.high^txn^amt ); lgth := lgth + $len( sem.file^rec.mcc105.high^txn^amt ); end; ! of if path.frqst.mcc105.high^txn^amt <> ... call integer^ascii^( sem.file^rec.lgth, lgth ); end; ! of if path.frqst.file^name = "MCC105" #DELETE 00505J03/00506J01 PATH^FRMT^FILE^RQST #ADD 00722 PSTM^FRMT^0200^TO^XRQST ?section pstm^frmt^0210^to^xresp ?page "pstm^frmt^0210^to^xresp" !##################################################################### !# # !# pstm^frmt^0210^to^xresp # !# # !# This procedure formats a PSTM 0210 to an external response # !# message. # !# # !# INPUT PARAMETERS: # !# pstm - BASE24-pos message. # !# sem - External message. # !# susp - Suspense record. # !# # !# OUTPUT PARAMETERS: # !# sem - External message. # !# # !##################################################################### int proc pstm^frmt^0210^to^xresp( pstm, sem, susp ); int .pstm( pstm^def ); int .sem( sem^def ); int .susp( susp^bnet^def ); #DELETE 00723 /00744 PSTM^FRMT^0210^TO^XRESP #REPLACE 00782S01 PSTM^FRMT^0210^TO^XRESP if not pstm^frmt^amt^to^sem^amt( pstm, sem, susp ) then #ADD 00864 PSTM^FRMT^0220^TO^XADV private^data^bit^d := 0; #DELETE 00865 /00874 PSTM^FRMT^0220^TO^XADV #ADD 00880 PSTM^FRMT^0220^TO^XADV advice^cde^bit^d := 1; #REPLACE 00882 PSTM^FRMT^0220^TO^XADV movd ( sem.advice^cde.reason^cde, "190" ); #ADD 01066 PSTM^FRMT^0420^TO^XRVSL ?section pstm^frmt^amt^to^sem^amt ?page "pstm^frmt^amt^to^sem^amt" !##################################################################### !# # !# pstm^frmt^amt^to^sem^amt # !# # !# This procedure formats an internal amount field to an external # !# amount field. # !# # !# INPUT PARAMETERS: # !# pstm - BASE24-pos message. # !# susp - Suspense record. # !# # !# OUTPUT PARAMETERS: # !# sem - External message. # !# # !##################################################################### int proc pstm^frmt^amt^to^sem^amt( pstm, sem, susp ) extensible; int .pstm( pstm^def ); int .sem( sem^def ); int .susp( susp^bnet^def ); #DELETE 01067 /01086 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 01091S01 PSTM^FRMT^AMT^TO^SEM^AMT int .pstm^( pstm^def ) := @susp.intrn^msg; #ADD 01140 SUB^CONVERT^AMT if $param( susp ) and pos^approved^d( pstm ) and pstm.tran.amt^1 < pstm^.tran.amt^1 and pstm.pre^auth^opt = "P" then begin movd( sem.resp^cde, "10" ); if curr^conv^iss^g then begin move ( sem.iss^crncy^cde, pct.crncy.out^cde ) end ! of if curr^conv^iss^g else begin move ( sem.iss^crncy^cde, pstm.orig^crncy^cde ); end; ! of else pstm^amt := pstm.tran.amt^1; if curr^conv^iss^g then begin if not sub^convert^amt( pstm^amt ) then begin return false; end; ! of if not sub^convert^amt end; ! of if curr^conv^iss^g if not fixed^ascii^( sem.crd^iss^amt, pstm^amt ) then begin return false; end; ! of if not fixed^ascii^... crd^iss^amt^bit^d := 1; iss^crncy^cde^bit^d := 1; end; ! of if $param( susp ) and ... #ADD F0142504 PSTM^FRMT^SEM^ADDL^DATA int .txn^subtyp^tkn( txn^subtyp^tkn^def ); int txn^subtyp^tkn^lgth := 0; #ADD 01541Q28 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pstm.pre^auth^opt = "P" then begin movd( sem.addl^data.info. ext^cond^cdes^sub^fld^61.tag, "61" ); movd( sem.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, "05" ); movd( sem.addl^data.info. ext^cond^cdes^sub^fld^61.tag^data, "10000" ); call ascii^integer( sem.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, 2, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of if sem.typ = sem^auth^request^d if visa_tran_g and base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ) and txn^subtyp^tkn.txn^subtyp = "B001" then begin movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. tag, "96" ); movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. lgth, "01" ); movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. tag^data, "B" ); call ascii^integer( sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96. lgth, 2, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of if transaction subtype token is present and .. end; ! of if visa_tran_g and base24^rel^g >= 5 #DELETE 01541d2O/01541d2R PSTM^FRMT^SEM^ADDL^DATA #ADD 02030 SUB^CONVERT^AMT if sem.typ = sem^auth^response^d and sem.resp^cde = "10" then begin if tran^amt^bit^d then begin ! ! Transaction amount. ! call ascii^fixed^( sem.tran^amt, tran^amt ); if sem.tran^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt pstm.tran.amt^1 := tran^amt; end; ! of if sem.tran^crncy^cde <> pct.crncy.in.. end ! of if transaction amount is present else if setl^amt^bit^d then begin ! ! Settlement amount. ! call ascii^fixed^( sem.setl^amt, tran^amt ); if sem.setl^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt pstm.tran.amt^1 := tran^amt; end; ! of if sem.setl^crncy^cde <> pct.crncy.in.. end ! of if settlement amount is present else if crd^iss^amt^bit^d then begin ! ! Card issuer amount. ! call ascii^fixed^( sem.crd^iss^amt, tran^amt ); if sem.iss^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt pstm.tran.amt^1 := tran^amt; end; ! of if sem.crd^iss^amt <> pct.crncy.in.. end; ! of if card issuer amount is present end; ! of if sem.typ = sem^auth^request^d and sem.resp.. #ADD 02040 SUB^CONVERT^AMT if tran^crncy^cde^bit^d and sem.tran^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if setl^crncy^cde^bit^d and sem.setl^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin call ascii^fixed^( sem.setl^amt, pstm.tran.amt^1 ); end ! of if setl^crncy^cde^bit^d and ... else if iss^crncy^cde^bit^d and sem.iss^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^1 ); end ! of if iss^crncy^cde^bit^d and ... else begin call ascii^fixed^( sem.tran^amt, pstm.tran.amt^1 ); if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt pstm.tran.amt^1 := tran^amt; end; ! of else end ! of if tran^crncy^cde^bit^d and ... else begin call ascii^fixed^( sem.tran^amt, pstm.tran.amt^1 ); end; ! of else #DELETE J0204000/02058 SUB^CONVERT^AMT #ADD O0256200 SEM^FRMT^PRIKEY if ( sem.typ = sem^rvsl^adv^d and sem.advice^cde.reason^cde = "400" or sem.advice^cde.reason^cde = "402" ) or #DELETE O0256201/O0256203 SEM^FRMT^PRIKEY #REPLACE A0277901 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 34, #ADD 02796 SEM^FRMT^RESP^CDE^TO^PSTM "10",! Approved ! "000",! Approved #ADD O0295605 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if rvsl.advice^cde.reason^cde = "0400" or rvsl.advice^cde.reason^cde = "401" then #DELETE O0295606/O0295608 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ADD O029560C SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if ( rvsl.advice^cde.reason^cde = "402" ) then begin movd( pstm.rvsl^cde, rvsl^timeout^d ); end else begin movd( pstm.rvsl^cde, rvsl^sys^err^d ); #DELETE O029560D/O029560K SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ADD O029560T SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if resp^cde^bit^d and rvsl.resp^cde = "82" then begin call integer^ascii^( pstm.tran.resp^cde, resp^timeout^pos^l ); end; #ADD 03149 SEM^FRMT^XRESP^TO^PSTM^0210 if pos^approved^d( pstm ) and pos^inquiry^d( pstm ) or sem.typ = sem^auth^response^d and sem.resp^cde = "10" then #DELETE 03150 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03208m1Y SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "01" then begin ! ! Map the external value of Merchant Advice Code to ! the internal value in the PS50 token. ! movd( err^flg, "1" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "02" then begin movd( err^flg, "2" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "03" then begin movd( err^flg, "3" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "21" then begin movd( err^flg, "U" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "R0" then begin movd( err^flg, "V" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "R1" then begin movd( err^flg, "W" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "R3" then begin movd( err^flg, "X" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = " " then begin movd( err^flg, " " ); end; #DELETE 03208m1Z/03208m2S SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 03542l0D SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. partial^apprv^ind = "1" then begin movd( pstm.pre^auth^opt, "P" ); end; ! of if tag = "61 and partial^apprv^ind = "1" #DELETE 03594d07/03594d0E SEM^FRMT^XRQST^TO^PSTM^0200 #ADD O0388305 SEM^FRMT^XRVSL^TO^PSTM^0420 if ( rvsl.advice^cde.reason^cde = "0400" ) or ( rvsl.advice^cde.reason^cde = "401" ) then #DELETE O0388306/O0388308 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD O038830C SEM^FRMT^XRVSL^TO^PSTM^0420 if ( rvsl.advice^cde.reason^cde = "402" ) then begin movd( pstm.rvsl^cde, rvsl^timeout^d ); end else begin movd( pstm.rvsl^cde, rvsl^sys^err^d ); #DELETE O038830D/O038830K SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD O038830T SEM^FRMT^XRVSL^TO^PSTM^0420 if resp^cde^bit^d and rvsl.resp^cde = "82" then begin call integer^ascii^( pstm.tran.resp^cde, resp^timeout^pos^l ); end; #ADD O0555500 UTIL^COLLAPSE^SEM ! ! Extended condition codes ! if hdr.addl^data.info. ext^cond^cdes^sub^fld^61.tag = "61" then begin call ascii^integer( hdr.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. ext^cond^cdes^sub^fld^61.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 0555570k UTIL^COLLAPSE^SEM ! ! M/Chip Data. ! if hdr.addl^data.info.adnl^proc^info^sub^fld^74. tag = "74" then begin call ascii^integer( hdr.addl^data.info. adnl^proc^info^sub^fld^74.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^proc^info^sub^fld^74.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD O055551E UTIL^COLLAPSE^SEM if hdr.addl^data.info. visa^mkt^spcfc^data^sub^fld^96. tag = "96" then begin call ascii^integer( hdr.addl^data.info. visa^mkt^spcfc^data^sub^fld^96.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. visa^mkt^spcfc^data^sub^fld^96.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if hdr...tag = "96" #ADD 06170v09 UTIL^EXPAND^SEM else if ptr[ length ] = "61" then begin ! ! Extended condition codes ! movl( sem^ptr.addl^data.info. ext^cond^cdes^sub^fld^61.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 0617070g UTIL^EXPAND^SEM else if ptr[ length ] = "74" then begin ! ! M/Chip Data. ! movl( sem^ptr.addl^data.info. adnl^proc^info^sub^fld^74. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD O061700S UTIL^EXPAND^SEM if ptr[ length ] = "96" then begin movl( sem^ptr.addl^data.info. visa^mkt^spcfc^data^sub^fld^96. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #REPLACE 10230701 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "06"; #ADD 1023070D UTIL^SWI^TKN^INIT if sem.addl^data.info. adnl^proc^info^sub^fld^74.tag = "74" then begin movl( bnet^tkn^buf.mchip^pro^ind, sem.addl^data.info.adnl^proc^info^sub^fld^74. tag^data[ 0 ].mchip^pro^ind, $len( sem.addl^data.info. adnl^proc^info^sub^fld^74.tag^data[ 0 ]. mchip^pro^ind ) ); movl( bnet^tkn^buf.mchip^proc^info, sem.addl^data.info.adnl^proc^info^sub^fld^74. tag^data[ 0 ].mchip^proc^info, $len( sem.addl^data.info. adnl^proc^info^sub^fld^74.tag^data[ 0 ]. mchip^proc^info ) ); end; ! of if tag = "74" #ADD 1023070U UTIL^SWI^TKN^UPDT if bnet^tkn^buf.mchip^pro^ind <> [ $len( bnet^tkn^buf.mchip^pro^ind ) * [ " " ] ] then begin move( bnet^tkn.mchip^pro^ind, bnet^tkn^buf.mchip^pro^ind ); end; if bnet^tkn^buf.mchip^proc^info <> [ $len( bnet^tkn^buf.mchip^proc^info ) * [ " " ] ] then begin move( bnet^tkn.mchip^proc^info, bnet^tkn^buf.mchip^proc^info ); end; #ENDSCN = SW0A170 !#CMP2.26 02/13/06 BNETS 6078 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6078 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6078 * ******************************************************************************** #SCN = SW0A171 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6078 #NEWVERSION = 6079 #ADD 00026z0C ! 13FEB2006 sanderj ! Symptom: Banknet Release 06.1 Mandates ! Problem: None ! Fix: 1. Added support for partial approvals. ! 2. Added support for Recurring Payment Cancellation ! Service. ! Modified proc: pstm^0210^response ! sem^file^request^response ! Dependency: BA10SC04 subvolume. New files: BRL0206M, BRL0206S, ! BRL0206R, ILB0206M, ILB0206R and ILB0206S. Apply fixes ! to BNETDDLS, BNETEMVS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the ! ILF conversion using ILB0206M. Run the ILF conversion ! using ILB0206R. MAKE the BNRLF conversion using ! BRL0206M. Run the BNRLF conversion using BRL0206R. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #051110-01. #REPLACE 00266p01 BNETS^60^78 PROC BNETS^60^76 MAIN; #REPLACE 04938 PSTM^0210^RESPONSE if not pstm^frmt^0210^to^xresp( pstm, sem, susp ) or #ADD 06099N00 SEM^FILE^REQUEST^RESPONSE if frqst.file^name.nam = "MCC105" then begin move( bnrlf.mcc.acct^num, frqst.file^rec.mcc105.acct^num ); move( bnrlf.mcc.entry^reason, frqst.file^rec.mcc105.entry^rsn ); move( bnrlf.mcc.purge^dat, frqst.file^rec.mcc105.purge^dat ); move( bnrlf.mcc.cust^id, frqst.file^rec.mcc105.acq^id ); move( bnrlf.mcc.crd^accpt^id^cde, frqst.file^rec.mcc105.crd^accpt^id^cde ); move( bnrlf.mcc.low^txn^amt, frqst.file^rec.mcc105.low^txn^amt ); move( bnrlf.mcc.high^txn^amt, frqst.file^rec.mcc105.high^txn^amt ); end; #DELETE 06099N01/06099N0A SEM^FILE^REQUEST^RESPONSE #ENDSCN = SW0A171 !#CMP2.26 02/13/06 RQBNRLFS6016 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6016 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6016 * ******************************************************************************** #SCN = SW0A172 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6016 #NEWVERSION = 6017 #ADD 00018M0L * 13FEB2006 sanderj * Symptom: Banknet Release 06.1 Mandates * Problem: None * Fix: 1. Added support for Recurring Payment * Cancellation Service data. * 2. Removed support for Address Service data. * Deleted paragraph: 480-ADDR-KEY-CHECK * Modified paragraph: 480-DATA-CHECK * 595-CLEAR-DATA * Modified section: WORKING-STORAGE * Dependency: BA10SC04 subvolume. New files: BRL0206M, * BRL0206S, BRL0206R, ILB0206M, ILB0206R and * ILB0206S. Apply fixes to BNETDDLS, * BNETEMVS, BNETG, BNETLIBS, BNETS, RQBNRLFS, * SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the ILF * conversion using ILB0206M. Run the ILF conversion * using ILB0206R. MAKE the BNRLF conversion using * BRL0206M. Run the BNRLF conversion using * BRL0206R. Replace BNETMAN and BNETUPDT. * Reference: WO #051110-01. #ADD 00029 DATA DIVISION 01 WS-CONSTANTS. 05 WC-BAD-DATA PIC X(3) VALUE "BAD". 05 WC-DO-NOT-MOVE PIC X(1) VALUE "N". 05 WC-NOT-GOOD PIC X(1) VALUE "N". 05 WC-GOOD PIC X(1) VALUE "Y". 05 WC-MOVE PIC X(3) VALUE "YES". 05 WC-NOT-FOUND PIC X(4) VALUE "0011". 01 WS-VALID-NUMERIC-FIELD. 03 WS-NUMERIC-CHECK PIC X(80). 03 WS-NUM-TABLE REDEFINES WS-NUMERIC-CHECK. 05 WS-NUM-DIGIT OCCURS 80 TIMES PIC X. 03 WS-DIGIT-COUNT PIC 99 COMP VALUE ZEROES. 01 WS-NUM-FIELD-GOOD PIC X. 88 GOOD-NUMERIC-FIELD VALUE "Y". 88 BAD-NUMERIC-FIELD VALUE "N". 01 WC-ACCOUNT-NUMBER-MSG. 05 FILLER PIC X(34) VALUE "ACCOUNT NUMBER IS A REQUIRED FIELD". 01 WC-ACCOUNT-JUSTIFIED-MSG. 05 FILLER PIC X(37) VALUE "ACCOUNT NUMBER MUST BE LEFT JUSTIFIED". 01 WC-ACCOUNT-MUST-BE-NUMERIC-MSG. 05 FILLER PIC X(30) VALUE "ACCOUNT NUMBER MUST BE NUMERIC". 01 WC-ACQUIRER-ID-MSG. 05 FILLER PIC X(31) VALUE "ACQUIRER ID IS A REQUIRED FIELD". 01 WC-ACQUIRER-NUMERIC-MSG. 05 FILLER PIC X(27) VALUE "ACQUIRER ID MUST BE NUMERIC". 01 WC-CARD-ACCEPTOR-ID-MSG. 05 FILLER PIC X(36) VALUE "CARD ACCEPTOR ID IS A REQUIRED FIELD". 01 WC-LOW-TXN-AMT-MSG. 05 FILLER PIC X(34) VALUE "SINGLE/LOW TXN AMT MUST BE NUMERIC". 01 WC-SECURITY-CODE-MSG. 05 FILLER PIC X(39) VALUE "SECURITY CODE MUST BE NUMERIC OR SPACES". 01 WC-HIGH-TXN-AMT-MSG. 05 FILLER PIC X(28) VALUE "HIGH TXN AMT MUST BE NUMERIC". 01 WC-HIGH-LOW-TXN-AMT-MSG. 05 FILLER PIC X(27) VALUE "HIGH TXN AMT MUST BE ZEROES". 05 FILLER PIC X(32) VALUE " IF SINGLE/LOW TXN AMT IS ZEROES". 01 WC-PURGE-DAT-NUMERIC-MSG. 05 FILLER PIC X(26) VALUE "PURGE DATE MUST BE NUMERIC". 01 WC-PURGE-DAT-MSG. 05 FILLER PIC X(30) VALUE "PURGE DATE IS A REQUIRED FIELD". 01 WC-INVALID-YEAR-MSG. 05 FILLER PIC X(37) VALUE "INVALID YEAR, MUST BE YYYYMMDD FORMAT". 01 WC-INVALID-MONTH-MSG. 05 FILLER PIC X(38) VALUE "INVALID MONTH, MUST BE YYYYMMDD FORMAT". 01 WC-INVALID-DAY-MSG. 05 FILLER PIC X(36) VALUE "INVALID DAY, MUST BE YYYYMMDD FORMAT". #DELETE 00036C01/00036C06 DATA DIVISION #DELETE 00038C01 DATA DIVISION #ADD 00073 DATA DIVISION 05 PART-FOUR PIC X(63). 05 PART-FIVE PIC X(63). #ADD 00637C02 480-DATA-CHECK IF WS-OVERLAY = 3 IF ACCT-NUM OF MCC105 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-NUM-3 IF MOVE-MESSAGE MOVE WC-ACCOUNT-NUMBER-MSG TO ERR-TXT SET NEW-CURSOR AT B-ACCT-NUM-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF ACCT-NUM OF MCC105 OF PATH-RQST NOT = SPACES MOVE SPACES TO WS-ACCT-NUM MOVE ACCT-NUM OF MCC105 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-NUM-3 IF MOVE-MESSAGE SET NEW-CURSOR AT B-ACCT-NUM-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF ACQ-ID OF MCC105 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACQ-ID-3 IF MOVE-MESSAGE MOVE WC-ACQUIRER-ID-MSG TO ERR-TXT SET NEW-CURSOR AT B-ACQ-ID-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF ACQ-ID OF MCC105 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACQ-ID-3 IF MOVE-MESSAGE MOVE WC-ACQUIRER-NUMERIC-MSG TO ERR-TXT SET NEW-CURSOR AT B-ACQ-ID-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF CRD-ACCPT-ID-CDE OF MCC105 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CRD-ACCPT-ID-CDE-3 IF MOVE-MESSAGE MOVE WC-CARD-ACCEPTOR-ID-MSG TO ERR-TXT SET NEW-CURSOR AT B-CRD-ACCPT-ID-CDE-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF LOW-TXN-AMT OF MCC105 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-LOW-TXN-AMT-3 IF MOVE-MESSAGE MOVE WC-LOW-TXN-AMT-MSG TO ERR-TXT SET NEW-CURSOR AT B-LOW-TXN-AMT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF HIGH-TXN-AMT OF MCC105 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-HIGH-TXN-AMT-3 IF MOVE-MESSAGE MOVE WC-HIGH-TXN-AMT-MSG TO ERR-TXT SET NEW-CURSOR AT B-HIGH-TXN-AMT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF ( ( LOW-TXN-AMT OF MCC105 OF PATH-RQST = ZEROES ) AND ( HIGH-TXN-AMT OF MCC105 OF PATH-RQST NOT = ZEROES ) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-LOW-TXN-AMT-3 IF MOVE-MESSAGE MOVE WC-HIGH-LOW-TXN-AMT-MSG TO ERR-TXT SET NEW-CURSOR AT B-LOW-TXN-AMT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 IF ( ( SECURITY-CDE OF FRQST OF PATH-RQST NOT NUMERIC ) AND ( SECURITY-CDE OF FRQST OF PATH-RQST NOT = SPACES ) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-SECURITY-CODE-3 IF MOVE-MESSAGE MOVE WC-SECURITY-CODE-MSG TO ERR-TXT SET NEW-CURSOR AT B-SECURITY-CODE-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 AND ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PURGE-DAT OF MCC105 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-3 IF MOVE-MESSAGE MOVE WC-PURGE-DAT-MSG TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 AND ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PURGE-DAT OF MCC105 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-3 IF MOVE-MESSAGE MOVE WC-PURGE-DAT-NUMERIC-MSG TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. IF WS-OVERLAY = 3 AND ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PURGE-DAT OF MCC105 OF PATH-RQST NUMERIC MOVE PURGE-DAT OF MCC105 OF PATH-RQST TO WS-DATE-CHECK-3 IF NOT VALID-YEAR-3 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-3 IF MOVE-MESSAGE MOVE WC-INVALID-YEAR-MSG TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH-3 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-3 IF MOVE-MESSAGE MOVE WC-INVALID-MONTH-MSG TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY-3 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-3 IF MOVE-MESSAGE MOVE WC-INVALID-DAY-MSG TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-3 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. #DELETE 00637C03/00637E17 480-DATA-CHECK #ADD 00715HG0 480-DATA-CHECK 480-NUMERIC-CHECK. IF WS-NUM-DIGIT( WS-DIGIT-COUNT ) NOT NUMERIC MOVE WC-NOT-GOOD TO WS-NUM-FIELD-GOOD. ADD 1 TO WS-DIGIT-COUNT. 480-NUMERIC-CHECK-DONE. EXIT. #DELETE 01007C01/01007C0G 480-ADDR-KEY-CHECK #ADD 01075 420-MOVE-DATA MOVE LINE-DATA OF MSG-LIST(4) TO PART-FOUR. MOVE LINE-DATA OF MSG-LIST(5) TO PART-FIVE. #REPLACE 01075M03 OFFSET 1/01075M03 OFFSET 1 420-MOVE-DATA MOVE LINE-DATA OF MSG-LIST-EXT(4) TO PART-FOUR. MOVE LINE-DATA OF MSG-LIST-EXT(5) TO PART-FIVE. ?ENDIF 5 #ADD 01086 420-SAVE-DATA MOVE PART-FOUR TO LINE-DATA OF MSG-LIST(4). MOVE PART-FIVE TO LINE-DATA OF MSG-LIST(5). #REPLACE 01086M03 OFFSET 1/01086M03 OFFSET 1 420-SAVE-DATA MOVE PART-FOUR TO LINE-DATA OF MSG-LIST-EXT(4). MOVE PART-FIVE TO LINE-DATA OF MSG-LIST-EXT(5). ?ENDIF 5 #ADD 01319 595-CLEAR-DATA MOVE ZEROES TO HIGH-TXN-AMT OF MCC105 OF PATH-RQST. MOVE ZEROES TO LOW-TXN-AMT OF MCC105 OF PATH-RQST. #ENDSCN = SW0A172 !#CMP2.26 02/13/06 SVBNRLFS6008 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6008 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6008 * ******************************************************************************** #SCN = SW0A174 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00005H0B * 13FEB2006 sanderj * Symptom: Banknet Release 06.1 Mandates * Problem: None * Fix: 1. Added support for Recurring Payment * Cancellation Service data. * 2. Removed support for AVS Service data. * Modified paragraphs: 201-MOVE-LINE * 300-BUILD-LINE-DATA * Modified section: WORKING-STORAGE * Dependency: BA10SC04 subvolume. New files: BRL0206M, * BRL0206S, BRL0206R, ILB0206M, ILB0206R and * ILB0206S. Apply fixes to BNETDDLS, * BNETEMVS, BNETG, BNETLIBS, BNETS, RQBNRLFS, * SCRNBRLF and SVBNRLFS. Run MAKE. MAKE the ILF * conversion using ILB0206M. Run the ILF conversion * using ILB0206R. MAKE the BNRLF conversion using * BRL0206M. Run the BNRLF conversion using * BRL0206R. Replace BNETMAN and BNETUPDT. * BNETUPDT. * Reference: WO #051110-01 #REPLACE 00165D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00213B01/00213B04 DATA DIVISION #ADD 00214H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00214H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00218D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00266B01/00266B04 DATA DIVISION #ADD 00267H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00267H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00271D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00319B01/00319B04 DATA DIVISION #ADD 00320H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00320H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00324D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00372B01/00372B04 DATA DIVISION #ADD 00373H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00373H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00377D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00425B01/00425B04 DATA DIVISION #ADD 00426H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00426H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00430D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00478B01/00478B04 DATA DIVISION #ADD 00479H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00479H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00483D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00531B01/00531B04 DATA DIVISION #ADD 00532H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00532H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00536D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00584B01/00584B04 DATA DIVISION #ADD 00585H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00585H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00589D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00637B01/00637B04 DATA DIVISION #ADD 00638H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00638H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00642D01 DATA DIVISION RECORD CONTAINS 260 CHARACTERS. #DELETE 00690B01/00690B04 DATA DIVISION #ADD 00691H00 DATA DIVISION 03 WS-CRD-ACCPT-ID-CDE PIC X(15). 03 WS-LOW-TXN-AMT PIC X(12). 03 WS-HIGH-TXN-AMT PIC X(12). #REPLACE 00691H06 DATA DIVISION 03 WS-FILLER1 PIC X(37). #REPLACE 00725F01 DATA DIVISION 01 RLF-LGTH PIC S9(4) VALUE 260. #ADD 00800 DATA DIVISION 03 PART-FOUR PIC X(63). 03 PART-FIVE PIC X(63). #ADD 01373 201-MOVE-LINE MOVE PART-FOUR TO LINE-DATA OF MESSAGE-OUT(4). MOVE PART-FIVE TO LINE-DATA OF MESSAGE-OUT(5). #ADD 01401 300-BUILD-LINE-DATA MOVE PART-FOUR TO LINE-DATA OF MESSAGE-OUT(4). MOVE PART-FIVE TO LINE-DATA OF MESSAGE-OUT(5). #ENDSCN = SW0A174 !#CMP2.26 02/17/06 BNETS 6079 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6079 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6079 * ******************************************************************************** #SCN = SW0A190 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0002630I ! 17FEB2006 frederr ! Symptom: DE-43, Card Acceptor Name/Locataion, is being sent to ! MasterCard with an invalid value in 0200 request ! messages. ! Problem: The interface uses PSTM.TERM^NAME^LOC to populate DE-43. ! This field is populated by Device Handlers using the ! PTD's term-name-loc field. Some customers want to use ! PSTM.TERM^OWNER^NAME to populate DE-43 instead. This ! field is populated by Device Handlers using the PTD's ! term-owner-name field. ! Fix: Added LCONF param USE-OWNER-NAME-FOR-DE43 to control ! how DE-43 is populated. If this param is set to 'Y' ! then PSTM.TERM^OWNER^NAME will be used to populate ! DE-43. If this param is not present or set to any other ! value then PSTM.TERM^NAME^LOC will be used to populate ! DE-43. ! Modified procs: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc. ! Dependency: Apply fix to BNETG, BNETS and BNETLIBS. Replace ! BNETMAN. Run MAKE. ! Reference: Case #405686. #REPLACE 02599]0C CMD^WARMBOOT^STORE^GLOBALS store^d( use^term^owner^name^g ); #REPLACE 02599]0Q CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( use^term^owner^name^g ); #REPLACE 03945]05 INIT^PARAMPROC "P", "USE-OWNER-NAME-FOR-DE43 ", #REPLACE 03996]1R/04064T1P INIT^PARAMPROC ! USE-OWNER-NAME-FOR-DE43 ! if not ferror then begin use^term^owner^name^g := false; if lconf.param^msg.ptxt = "Y" then begin use^term^owner^name^g := true; end; end; #ENDSCN = SW0A190 !#CMP2.26 02/17/06 BNETLIBS60107FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60107 * ******************************************************************************** #SCN = SW0A191 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V000270a ! 17FEB2006 frederr ! Symptom: DE-43, Card Acceptor Name/Locataion, is being sent to ! MasterCard with an invalid value in 0200 request ! messages. ! Problem: The interface uses PSTM.TERM^NAME^LOC to populate DE-43. ! This field is populated by Device Handlers using the ! PTD's term-name-loc field. Some customers want to use ! PSTM.TERM^OWNER^NAME to populate DE-43 instead. This ! field is populated by Device Handlers using the PTD's ! term-owner-name field. ! Fix: Added LCONF param USE-OWNER-NAME-FOR-DE43 to control ! how DE-43 is populated. If this param is set to 'Y' ! then PSTM.TERM^OWNER^NAME will be used to populate ! DE-43. If this param is not present or set to any other ! value then PSTM.TERM^NAME^LOC will be used to populate ! DE-43. ! Modified proc: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETG, BNETS and BNETLIBS. Replace ! BNETMAN. Run MAKE. ! Reference: Case #405686. #ADD 00642X01 PSTM^FRMT^0200^TO^XRQST if use^term^owner^name^g then begin move( sem.crd^acpt.reg^e^loc, pstm.term^owner^name ); end else begin move( sem.crd^acpt.reg^e^loc, pstm.term^name^loc ); end; #DELETE 00643 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0A191 !#CMP2.26 02/17/06 BNETG 6037 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6037 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6037 * ******************************************************************************** #SCN = SW0A192 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6037 #NEWVERSION = 6038 #ADD 00026k0I ! 17FEB2006 frederr ! Symptom: DE-43, Card Acceptor Name/Locataion, is being sent to ! MasterCard with an invalid value in 0200 request ! messages. ! Problem: The interface uses PSTM.TERM^NAME^LOC to populate DE-43. ! This field is populated by Device Handlers using the ! PTD's term-name-loc field. Some customers want to use ! PSTM.TERM^OWNER^NAME to populate DE-43 instead. This ! field is populated by Device Handlers using the PTD's ! term-owner-name field. ! Fix: Added global use^term^owner^name^g for use with the ! new LCONF param USE-OWNER-NAME-FOR-DE43. Added ! warmboot global use^term^owner^name^g. ! Dependency: Apply fix to BNETG, BNETS and BNETLIBS. Replace ! BNETMAN. Run MAKE. ! Reference: Case #405686. #REPLACE 00448d04 int use^term^owner^name^g := false; #REPLACE 01366d04 int use^term^owner^name^g; #ENDSCN = SW0A192 !#CMP2.26 02/21/06 BNETLIBS60108FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60108 * ******************************************************************************** #SCN = SW0A207 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W000270L ! 16FEB2006 hayese ! Symptom: The CMS product fails to parse the Interchange ! Compliance Token, token 20, in the output from the ! PTLF Extract process, because it contains a zero in ! the life-cycle-ind field. ! Problem: When the response is formatted into the PSTM, the ! Interchange Compliance token is initially set to all ! zeroes, then some fields are blank filled. The ! life-cycle-ind field also needs to be blank filled. ! Fix: Added code to blank fill the life-cycle-ind field in ! the PSTM when a SEM response is formatted to a ! PSTM response. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #404264. #ADD 03208t03 SEM^FRMT^XRESP^TO^PSTM^0210 compliance^get^tkn.life^cycle^ind ':=' [ $len( compliance^get^tkn.life^cycle^ind ) * [" "] ]; #ADD 03208t0A SEM^FRMT^XRESP^TO^PSTM^0210 compliance^tkn.life^cycle^ind ':=' [ $len( compliance^get^tkn.life^cycle^ind ) * [" "] ]; #ENDSCN = SW0A207 !#CMP2.26 03/21/06 BNETLIBS60109FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60109 * ******************************************************************************** #SCN = SW0A274 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X000270G ! 20MAR2006 engelk ! Symptom: PSTM reversal code does not reflect the sem advice code ! reason code value (DE-60.1) passed in the external ! reversal. ! Problem: When advice reason code 400 was added, it was compared ! as a 4 digit number with DE-60.1 instead of a 3 digit ! number. ! Fix: Removed the leading zero so that DE-60.1 is compared ! with "400" instead of "0400". ! Procs modified: sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #408884 #REPLACE V0295601 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if rvsl.advice^cde.reason^cde = "400" or #REPLACE V0388301 SEM^FRMT^XRVSL^TO^PSTM^0420 if ( rvsl.advice^cde.reason^cde = "400" ) or #ENDSCN = SW0A274 !#CMP2.26 03/22/06 RQBNRLFS6017 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6017 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6017 * ******************************************************************************** #SCN = SW0A279 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6017 #NEWVERSION = 6018 #ADD 00018Q0L * 22MAR2006 sanderj * Symptom: Some fields in the ICFE MCC103 Accounts Management * File screen are being initialized to zeroes when * they should be blanks. * Problem: Two fields in the new ICFE MCC105 Recurring * Payment Cancellation Service File screen were * being initialized to zeroes and also incorrectly * initializing some fields in the MCC103 Accounts * Management File screen to zeroes. * Fix: Moved the initialization of high-txn-amt and * low-txn-amt to zeroes, to the proper location. * Modified paragraph: 570-DISPLAY-OVERLAY-3 * 595-CLEAR-DATA * Dependency: Apply fix to RQBNRLFS and run MAKE. * Reference: Case #409507. #ADD 01173 570-DISPLAY-OVERLAY-3 MOVE ZEROES TO HIGH-TXN-AMT OF MCC105 OF PATH-RQST. MOVE ZEROES TO LOW-TXN-AMT OF MCC105 OF PATH-RQST. #DELETE 01319Q01/01319Q02 595-CLEAR-DATA #ENDSCN = SW0A279 !#CMP2.26 03/24/06 BNETLIBS60110FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60110 * ******************************************************************************** #SCN = SW0A282 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y000270E ! 24MAR2006 frederr ! Symptom: The interface is rejecting transactions from MasterCard ! due to a format failure on the transaction amount. ! Problem: The interface is not populating the local amount field ! that is used to convert the external amount to the ! internal amount. Because of this the conversion is ! failing and the transaction rejected. ! Fix: Modified the interface to populate the local amount ! variable with the correct external amount before ! attempting to convert the amount. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #408844 #REPLACE V020400N SUB^CONVERT^AMT tran^amt ); #ENDSCN = SW0A282 !#CMP2.26 04/13/06 BNETG 6038 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6038 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6038 * ******************************************************************************** #SCN = SW0A312 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6038 #NEWVERSION = 6039 #ADD 00026l0H ! 13APR2006 saderc ! Symptom: Banknet ISO Forward Declined Advices Enhancement ! Problem: None ! Fix: Added variable FRWD^DCLN^ADVC^G that will be set via ! the LCONF parameter FRWD-DCLN-ADVC. ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #040826-02. #ADD 00448d02 int frwd^dcln^advc^g := false; #ADD 01366d02 int frwd^dcln^advc^g; #ENDSCN = SW0A312 !#CMP2.26 04/13/06 BNETS 6080 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6080 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6080 * ******************************************************************************** #SCN = SW0A313 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0002640N ! 13APR2006 saderc ! Symptom: Banknet ISO Forward Declined Advices Enhancement ! Problem: None ! Fix: Added support for forwarding declined advices to ! BASE24-pos Router Authorization. ! Modified procs: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! sem^advice^pos ! sem^request ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #040826-02. #ADD 02599402 CMD^WARMBOOT^STORE^GLOBALS store^d( frwd^dcln^advc^g ); #ADD 02599]0I CMD^WARMBOOT^STORE^GLOBALS frwd^dcln^advc^g := false; #ADD 02599405 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( frwd^dcln^advc^g ); #ADD 03945402 INIT^PARAMPROC "P", "FRWD-DCLN-ADVC ", #ADD 0399640B INIT^PARAMPROC ! FRWD-DCLN-ADVC ! if not ferror then begin frwd^dcln^advc^g := false; if lconf.param^msg.ptxt = "Y" then begin frwd^dcln^advc^g := true; end; end; #ADD 05757 SEM^ADVICE^POS if ( not sem^approved^d( sem ) or sem^inquiry^d( sem ) ) and not frwd^dcln^advc^g then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, ! pstm !, sem, $len( sem^def ) ); return; end; ! of if ( not sem^approved^d( sem ) or ... #DELETE 05764i01/05764i08 SEM^ADVICE^POS #ADD 06608R03 SEM^REQUEST set ( susp.rec^typ, pos^l ); #ADD 06612]0A SEM^REQUEST if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to 'Y' and ! frmt^err = false, then forward to Router ! Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frmt^err := ... end; ! of if frwd^dcln^advc^g #ADD 06612]0i SEM^REQUEST if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to ! 'Y' and frmt^err = false, then forward ! to Router Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^system^error^l ); return; end; ! of if frmt^err := ... end; ! of if frwd^dcln^advc^g #DELETE 06612]0j/06612]18 SEM^REQUEST #REPLACE 06612]1B SEM^REQUEST resp^tran^not^supp^sem^l, #ENDSCN = SW0A313 !#CMP2.26 04/13/06 BNETLIBS60111FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60111 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60111 * ******************************************************************************** #SCN = SW0A314 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z000270E ! 13APR2006 saderc ! Symptom: Banknet ISO Forward Declined Advices Enhancement ! Problem: None ! Fix: Added support for forwarding declined advices to ! BASE24-pos Router Authorization. ! Modified proc: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETMAN and BNETUPDT. ! Reference: WO #040826-02. #ADD 03567k0O SEM^FRMT^XRQST^TO^PSTM^0200 if frwd^dcln^advc^g then begin ! ! LCONF parameter FRWD-DCLN-ADVC set to 'Y', ! so forward to Router Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); end; ! of if frwd^dcln^advc^g #ENDSCN = SW0A314 !#CMP2.26 04/19/06 BNETS 6081 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6081 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6081 * ******************************************************************************** #SCN = SW0A326 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0002650E ! 19APR2006 frederr ! Symptom: The interface is sending back the same 0200 it received ! from Router Auth when all it's stations are marked ! down or are logged off. This causes Router Auth to ! route the tran back to this same interface and can cause ! the tran to go into a loop. ! Problem: A previous fix for when the interface's link is down to ! allow AST default actions to occur failed to set the ! pstm's auth^ind to a '9' (no authorizers) so that Router ! Auth will not send the transaction right back to this ! interface. ! Fix: Modified the interface to go through the alternate ! routing procedure if all other routing possibilities ! fail. This procedure will set the pstm's auth^ind to a ! '9' if alternate routing is not possible. ! Modified procs: pstm^0200^route ! Dependency: Apply fixes to BNETS. Run MAKE. ! Reference: Case #410452. #REPLACE 04882{0M/04882{0M OFFSET 0 PSTM^0200^ROUTE end else begin ! ! If a denial is not sent, then we need to go through ! alternate routing logic so that the same 0200 is not ! sent to this interface again. ! call util^pos^alt^routing( pstm, susp.orig^net^pro ); end; #ENDSCN = SW0A326 !#CMP2.26 07/12/06 BNETLIBS60112FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60112 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60112 * ******************************************************************************** #SCN = SW0A476 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a000270A ! 12JUL2006 sanderj ! Symptom: Partial approvals for transactions acquired on BASE24 ! do not work properly. ! Problem: The check for partial approvals is in the wrong place. ! Fix: Moved the check for partial approvals to the correct ! location. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #416455. #DELETE V0203001/V0203017 SUB^CONVERT^AMT #ADD 02037 SUB^CONVERT^AMT if sem.typ = sem^auth^response^d and sem.resp^cde = "10" then begin if tran^amt^bit^d then begin ! ! Transaction amount. ! call ascii^fixed^( sem.tran^amt, tran^amt ); if sem.tran^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt end; ! of if sem.tran^crncy^cde <> pct.crncy.in.. pstm.tran.amt^1 := tran^amt; end ! of if transaction amount is present else if setl^amt^bit^d then begin ! ! Settlement amount. ! call ascii^fixed^( sem.setl^amt, tran^amt ); if sem.setl^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt end; ! of if sem.setl^crncy^cde <> pct.crncy.in.. pstm.tran.amt^1 := tran^amt; end ! of if settlement amount is present else if crd^iss^amt^bit^d then begin ! ! Card issuer amount. ! call ascii^fixed^( sem.crd^iss^amt, tran^amt ); if sem.iss^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; ! of if not sub^convert^amt end; ! of if sem.crd^iss^amt <> pct.crncy.in.. pstm.tran.amt^1 := tran^amt; end; ! of if card issuer amount is present end; ! of if sem.typ = sem^auth^response^d and sem.resp.. #ENDSCN = SW0A476 !#CMP2.26 07/26/06 BNETG 6039 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6039 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6039 * ******************************************************************************** #SCN = SW0A489 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6039 #NEWVERSION = 6040 #ADD 00026m09 ! 26JUL2006 sanderj ! Symptom: Banknet Release 06.2 Mandates. ! Problem: None ! Fix: 1. Added defines sem^hlthcr^d, pmnt^to^3rd^prty^d, ! hlthcr^trnst^auto^sub^d, bnet^amt^fsa^eligbl^d and ! sem^pmnt^txn^d. ! 2. Sourced in the healthcare^tkn from baddltal. ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #060321-01. #ADD 00026f0V ? healthcare^tkn #ADD 00026O25 ! healthcare^tkn #ADD 00078i0B define bnet^amt^fsa^eligbl^d = "10"#; #ADD 00122 define sem^pmnt^txn^d = "28"#; define sem^hlthcr^d = "39"#; #ADD 00176 define pmnt^to^3rd^prty^d = "B001"#; define hlthcr^trnst^auto^sub^d = "C001"#; #ENDSCN = SW0A489 !#CMP2.26 07/26/06 BNETLIBS60113FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60113 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60113 * ******************************************************************************** #SCN = SW0A490 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b000270A ! 26JUL2006 sanderj ! Symptom: Banknet Release 06.2 Mandates. ! Problem: None ! Fix: 1. Added support for Acquirer Reversal/04xx Message ! processing. ! 2. Added support for savings account '10' and checking ! account '20', for acquirer processing. ! 3. Added support for external account types '39' and ! '60' for issuer processing. ! 4. Added support for Payment Transaction mandate. ! 5. Added support for Auto-Substantiation. ! Modified procs: pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^tran^to^sem^proc^cde ! sem^frmt^amt^to^pstm^amt ! sem^frmt^prikey ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^nmm^request ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xack ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #060321-01. #ADD O009661K PSTM^FRMT^0420^TO^ACQ^XRVSL ! ! Format DE 39. ! if pstm.rvsl^cde = rvsl^customer^cancel^d then begin ! ! Customer cancellation. ! movd( sem.resp^cde, "17" ); end else if pstm.rvsl^cde = rvsl^timeout^d then begin ! ! Response recieved late. ! movd( sem.resp^cde, "68" ); end else if sem.resp^cde = "10" then begin ! ! Partial reversal. ! movd( sem.resp^cde, "32" ); end; #DELETE O009663h/O009663o PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD V0109101 PSTM^FRMT^AMT^TO^SEM^AMT int .hlthcr^get^tkn( healthcare^tkn^def ); int hlthcr^tkn^lgth := 0; string tkn^id[ 0:1 ]; #ADD O011310e SUB^CONVERT^AMT if base24^rel^g >= 5 and pstm.typ = request^d then begin tkn^id ':=' healthcare^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^get^tkn, hlthcr^tkn^lgth ) and hlthcr^get^tkn.addl^amt.bal1.amt^typ = "4S" or hlthcr^get^tkn.addl^amt.bal1.amt^typ = "4T" then begin addl^amt^bit^d := -1; call integer^ascii^( sem.addl^amt.lgth, $len( sem.addl^amt.info ) ); movl( sem.addl^amt.info[ 0 ], hlthcr^get^tkn.addl^amt.bal1, $len( sem.addl^amt.info ) ); movd( sem.addl^amt.info[ 0 ].amt^typ, bnet^amt^fsa^eligbl^d ); end; ! of if healthcare token is found end; ! of if base24^rel^g >= 5 #ADD 01618 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE else if pstm.tran.tran^cde.aa = b24^checking^d then begin movd( sem.proc^cde.byte[ 2 ], "20" ); end else if pstm.tran.tran^cde.aa = b24^savings^d then begin movd( sem.proc^cde.byte[ 2 ], "10" ); end #ADD 01960 SEM^FRMT^AMT^TO^PSTM^AMT wlform( no^room, "NO ROOM TO ADD TOKEN \\, PAN: \\\\\\\\\\\\\\\\\\\," ',' " SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ',' "SETL DATE: \\\\ ") wlform( erradd^tkn, "UNABLE TO ADD TOKEN \\, PAN: \\\\\\\\\\\\\\\\\\\, " ',' "SEQ NUM: \\\\\\\\\\\\, ERR: # ") #REPLACE 01963S00 SEM^FRMT^AMT^TO^PSTM^AMT string .tkn^id; #ADD 01966 SEM^FRMT^AMT^TO^PSTM^AMT struct .hlthcr^tkn( healthcare^tkn^def ); struct .txn^subtyp^tkn( txn^subtyp^tkn^def ); int dspy := false; int .hlthcr^get^tkn( healthcare^tkn^def ); int hlthcr^tkn^lgth := 0; int ofst; int orig^found := false; int pos^userdata; int tkn^add^lgth; int tkn^lgth; int tkn^result; #ADD 01993 SUB^CONVERT^AMT ! ! Set ofst and pos^userdata here for all token processing. ! ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; #ADD O020300o SUB^CONVERT^AMT if base24^rel^g >= 5 and addl^amt^bit^d then begin init( hlthcr^tkn, " ", wlen( hlthcr^tkn ) ); if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $occurs( sem.addl^amt.info ); end else begin cnt := 0; end; while not ( orig^found or ( i = cnt ) ) do begin if sem.addl^amt.info[ i ].amt^typ = bnet^amt^fsa^eligbl^d then begin movl( hlthcr^tkn.addl^amt.bal1, sem.addl^amt.info[ i ], $len( sem.addl^amt.info ) ); movd( hlthcr^tkn.addl^amt.bal1.amt^typ, "4S" ); init( txn^subtyp^tkn, " ", wlen( txn^subtyp^tkn ) ); movd( txn^subtyp^tkn.txn^subtyp, hlthcr^trnst^auto^sub^d ); move( txn^subtyp^tkn.iss^proc^cde, sem.proc^cde ); orig^found := true; end ! of if ..amt^typ = fsa eligible.. else begin i := i + 1; end; end; ! of while not ( orig^found or ( i = cnt ) ) if hlthcr^tkn <> [ wlen( hlthcr^tkn ) * [ " " ] ] then begin tkn^id ':=' healthcare^tkn^id^d; tkn^add^lgth := $offset( hlthcr^tkn.addl^amt.bal2 ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, hlthcr^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin call log^message^( 3154, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3154 ); end; ! of if token result end; ! of if hlthcr^tkn <> spaces if txn^subtyp^tkn <> blanks for $len( txn^subtyp^tkn ) then begin tkn^id ':=' txn^subtyp^tkn^id^d; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^subtyp^tkn, $len( txn^subtyp^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3156, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3158, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3158 ); end; end; ! of if tkn^result end; ! of if txn^subtyp^tkn <> spaces end; ! of if base24^rel^g >= 5 and addl^amt^bit^d #ADD 02035 SUB^CONVERT^AMT if base24^rel^g >= 5 and addl^amt^bit^d then begin tkn^id ':=' healthcare^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^get^tkn, hlthcr^tkn^lgth ) then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $occurs( sem.addl^amt.info ); end else begin cnt := 0; end; while not ( orig^found or ( i = cnt ) ) do begin if sem.addl^amt.info[ i ].amt^typ = "57" then begin movl( hlthcr^get^tkn.addl^amt.bal1, sem.addl^amt.info[ i ], $len( sem.addl^amt.info ) ); orig^found := true; end ! of if ..amt^typ = "57" else begin i := i + 1; end; end; ! of while not ( orig^found or ( i = cnt ) ) end; ! of if hiswtkn^get^tkn end; ! of if base24^rel^g >= 5 and addl^amt^bit^d #ADD 02485 SEM^FRMT^NMM^REQUEST movd ( sem.service^ind.traffic1, "0" ); #DELETE 02486 /02494 SEM^FRMT^NMM^REQUEST #REPLACE V0256201 SEM^FRMT^PRIKEY if sem.typ = sem^rvsl^adv^d or #DELETE V0256202/V0256207 SEM^FRMT^PRIKEY #ADD 02691 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.proc^cde.byte[ 2 ] = "20" or sem.proc^cde.byte[ 2 ] = "39" or sem.proc^cde.byte[ 2 ] = "60" then begin movd( pstm.tran.tran^cde.aa, b24^checking^d ); end #DELETE 02692 /02693 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #REPLACE 0350970O SEM^FRMT^XRQST^TO^PSTM^0200 struct .txn^subtyp^tkn( txn^subtyp^tkn^def ); #REPLACE 03510k06 SEM^FRMT^XRQST^TO^PSTM^0200 int tkn^add^lgth; #ADD 03542k00 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Set ofst and pos^userdata here for all token processing. ! ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^lgth := 0; if base24^rel^g >= 5 and sem.proc^cde = sem^pmnt^txn^d then begin ! ! Initialize the Transaction Subtype token. ! init( txn^subtyp^tkn, " ", wlen( txn^subtyp^tkn )); tkn^id ':=' txn^subtyp^tkn^id^d; movd( txn^subtyp^tkn.txn^subtyp, pmnt^to^3rd^prty^d ); move( txn^subtyp^tkn.iss^proc^cde, sem.proc^cde ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^subtyp^tkn, $len( txn^subtyp^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1748, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1750, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1750 ); end; end; ! of if tkn^result end; ! of if base24^rel^g >= 5 and sem.proc^cde... #DELETE 03542Q10/03542Q16 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542Z0V/03542Z11 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 0354270J/0354270L SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 0354270O/0354270W SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 0354271Z/0354271b SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 0354271f/0354271m SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542Z2B/03542Z2G SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03542Q3Y/03542Q43 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594X0R/03594X0X SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594X2B/03594X2H SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594Z0M/03594Z0R SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594Z21/03594Z26 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594t29/03594t2A SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594t2Q/03594t2X SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594t4K/03594t4M SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 03594t4X/03594t54 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE Q0389409 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE Q038940C SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE Q038940H SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE O039340Z SEM^FRMT^XRVSL^TO^SEM^XACK #ENDSCN = SW0A490 !#CMP2.26 07/26/06 BNETS 6082 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6082 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6082 * ******************************************************************************** #SCN = SW0A491 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0002660J ! 26JUL2006 sanderj ! Symptom: Banknet Release 06.2 Mandates. ! Problem: None ! Fix: 1. Added support for Acquirer Reversal/04xx Message ! processing. ! 2. Added support for the new network control command ! 'NETWK CONN STAT'. ! Modified procs: cmd^^command^input ! pstm^0420^reversal ! sem^acq^rvsl^resp ! sem^acq^rvsl^rqst ! sem^echotest^response ! sem^reversal^advice ! Added proc: cmd^netwk^conn^stat ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run MAKE. ! Replace BNETLOGM and BNETMAN. ! Reference: WO #060321-01. #ADD 01088 CMD^^COMMAND^INPUT else if mtp[ 0 ] = "NETWK CONN STAT" then begin call cmd^netwk^conn^stat( msg, mtp ); end #ADD 01852 CMD^LOGON^P ?section cmd^netwk^conn^stat ?page "cmd^netwk^conn^stat" !##################################################################### !# # !# cmd^netwk^conn^stat # !# # !# This procedure will send a Network Connection Status Network # !# Management Request/0800 message to the network. # !# # !# INPUT PARAMETERS: # !# msg - Message pointer. # !# mtp - Message text pointer. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc cmd^netwk^conn^stat( msg, mtp ); int .msg; string .mtp; begin wlform( frmt^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, FORMAT ERROR " ) wlform( collapse^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, MESSAGE COLLAPSE ERROR " ) wlform( timr^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, TIMER TABLE ERROR" ) struct .csem( nmm^def ); struct .sem( nmm^def ); struct .userbuf1( timer^userbuf^def ); int .timer( timer^def ); int extlgth; int sta^x; @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^echo^l ); movl( userbuf1, timer.userbuf, wlen( timer^userbuf^def ) ); set( sta^x, userbuf1.sta^x ); call delete^this^timer( tcb^g, timer ); if not sem^frmt^nmm^request( sem, nmm^echo^l ) then begin call log^message^( 0585, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^err^l ); return; end; if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 0586, ! routing code !, @collapse^err, net.myname, evt^msg^severity^err^l ); return; end; if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, nmm^echo^l ) ) then begin call log^message^( 0587, ! routing code !, @timr^err, net.myname, evt^msg^severity^err^l ); return; end; call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam, pct.timers.nmm ); end; ! of proc cmd^netwk^conn^stat #ADD 05205 PSTM^0420^REVERSAL if not pos^approved^d( pstm ) then begin return; end; #DELETE 05206 /05207 PSTM^0420^REVERSAL #DELETE 05222}2b/05222}36 PSTM^0420^REVERSAL #DELETE 05222}3P/05222}3j PSTM^0420^REVERSAL #ADD 05222}3k PSTM^0420^REVERSAL call util^saf^add( csem, extlgth, pos^l, service ); #ADD 05223e0F PSTM^0420^REVERSAL if pos^inquiry^d( pstm ) then begin return; end; #ADD 05374}0S SEM^ACQ^RVSL^RESP struct .saf( saf^bnet^def ); #DELETE 05374}10/05374}18 SEM^ACQ^RVSL^RESP #ADD 05374}1F SEM^ACQ^RVSL^RESP if find^specific^timer( tcb^g, type^saf^l ) then begin call timer^delete( tcb^g, type^saf^l ); call util^saf^delete( saf, $len( saf^bnet^def ) ); end; #ADD 05374}3S FRMT^AND^SEND^ACQ^RVSL^RESP if rvsl.proc^cde = sem^bal^inq^d or rvsl.proc^cde = sem^hlthcr^d then begin call frmt^and^send^acq^rvsl^resp; return; end; #ADD 05768 SEM^ADVICE^POS ?section sem^advice^response ?page "sem^advice^response" !##################################################################### !# # !# sem^advice^response # !# # !# This procedure handles an advice response message from BANKNET. # !# # !# INPUT PARAMETERS: # !# sem - advice response message # !# msg - message word pointer # !# sta^x - station INDEX # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### #DELETE 05769 /05785 SEM^ADVICE^RESPONSE #ADD 05959T0O SEM^ECHOTEST^RESPONSE wlform( stat^ok, "Network Connection Status Intact" ) #ADD 05959T1V SEM^ECHOTEST^RESPONSE if ( @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^echo^l ) ) then begin call delete^this^timer( tcb^g, timer ); call log^message^( 1485, ! routing^code !, @stat^ok, net.myname, evt^msg^severity^info^l ); end; #ADD 07253T03 SEM^REVERSAL^ADVICE if rvsl.proc^cde = sem^bal^inq^d or rvsl.proc^cde = sem^hlthcr^d then begin return; end; #ENDSCN = SW0A491 !#CMP2.26 08/04/06 BNETLIBS60114FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60114 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60114 * ******************************************************************************** #SCN = SW0A506 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c000270P ! 04AUG2006 frederr ! Symptom: DE-48 (additional data) subfields 98 (Fleet Card ID/ ! Driver Number) and 99 (Fleed Card Vehicle Number) are ! being sent with the wrong length. This was found ! in certification testing. ! Problem: The interface is hard coding the lengths of these ! two fields to 17. MasterCard specs show that these ! are only 6 byte fields. ! Fix: Modified the interface to hardcode the lengths of ! these two fields to 6. The DDLS will be updated at ! a later date. ! Proc modified: pstm^frmt^sem^addl^data. ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #417676. #REPLACE 01541W0G/01541W0I PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.cvc^sub^fld^98.lgth, "06" ); move( sem.addl^data.info.cvc^sub^fld^98.tag^data, purchase^tkn^data.mc^fleet^data.id^num ); #DELETE 01541W0J PSTM^FRMT^SEM^ADDL^DATA #REPLACE 01541W0M/01541W0O PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.cvc^sub^fld^99.lgth, "06" ); move( sem.addl^data.info.cvc^sub^fld^99.tag^data, purchase^tkn^data.mc^fleet^data.vehicle^num ); #DELETE 01541W0P PSTM^FRMT^SEM^ADDL^DATA #REPLACE 01541W0U PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.cvc^sub^fld^98.lgth, "06" ); #REPLACE 01541W0Z PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.cvc^sub^fld^99.lgth, "06" ); #REPLACE 01541W13 PSTM^FRMT^SEM^ADDL^DATA lgth := lgth + ( 6 * 2 ) + 8; #ENDSCN = SW0A506 !#CMP2.26 08/15/06 BNETS 6083 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6083 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6083 * ******************************************************************************** #SCN = SW0A510 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0002670I ! 15AUG2006 sanderj ! Symptom: The network connection status command is not working. ! Problem: The nework connection status command did not work due ! to a timer table error. ! Fix: Modified the code the delete the correct timer and to ! send the network connection status command to all ! stations that are up. Modified the network connection ! status intact message to indicate which station is ! intact. ! Modified procs: cmd^netwk^conn^stat ! sem^echotest^response ! Dependency: Apply fixes to BNETS. Replace BNETLOGM. Run MAKE. ! Reference: Case #417965. #ADD 0185270e CMD^NETWK^CONN^STAT int j; #ADD 0185270f CMD^NETWK^CONN^STAT if @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^echo^l ) then begin movl( userbuf1, timer.userbuf, wlen( timer^userbuf^def ) ); set( sta^x, userbuf1.sta^x ); call delete^this^timer( tcb^g, timer ); end; for j := 0 to ( pct.status.num^of^sta - 1 ) do begin if pct.station[ j ].up then begin if not sem^frmt^nmm^request( sem, nmm^echo^l ) then begin call log^message^( 0585, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^err^l ); return; end; if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 0586, ! routing code !, @collapse^err, net.myname, evt^msg^severity^err^l ); return; end; if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, nmm^echo^l ) ) then begin call log^message^( 0587, ! routing code !, @timr^err, net.myname, evt^msg^severity^err^l ); return; end; call util^send^sem( csem, extlgth, pct.station[ j ].nam, pct.timers.nmm ); end; ! of if pct.station[ j ].up end; ! of for j := 0 loop #DELETE 0185270g/0185271W CMD^NETWK^CONN^STAT #ADD 05959700 SEM^ECHOTEST^RESPONSE wlform( stat^ok, "Network Connection Status Intact" ',' " on station \S" ) #DELETE 05959701 SEM^ECHOTEST^RESPONSE #REPLACE 0595970F/0595970F OFFSET 0 SEM^ECHOTEST^RESPONSE evt^msg^severity^info^l, @pct.station[ sta^x ].nam ); #ENDSCN = SW0A510 !#CMP2.26 08/25/06 BNETLIBS60115FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60115 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60115 * ******************************************************************************** #SCN = SW0A549 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d000270F ! 24AUG2006 engelk ! Symptom: Interface dumps with various traps -- 0, 8032, 8040, and ! 8094, characterized by the presence of "CP" low in ! global memory. ! Problem: When code was added to check for the healthcare token, ! the token id was declared as a string pointer instead ! of as a string array. When the healthcare token id (CP) ! was moved into this string pointer, it corrupted global ! memory, resulting in an eventual dump. ! Fix: Modified the token id declaration to make it a string ! array. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #418768 #REPLACE c0196301 SEM^FRMT^AMT^TO^PSTM^AMT string tkn^id[ 0:1 ]; #ENDSCN = SW0A549 !#CMP2.26 08/28/06 BNETG 6040 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6040 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6040 * ******************************************************************************** #SCN = SW0A562 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6040 #NEWVERSION = 6041 #ADD 00026n0B ! 28AUG2006 frederr ! Symptom: The interface is accepting reversals for an amount ! greater than the original amount. MasterCard expects ! this type of reversal to be denied. This was found ! during certification testing. ! Problem: The interface does not compare the reversal amount to ! the original amount when determining if a reversal ! should be processed. ! Fix: Added denied reversal defines '05', do not honor, and ! '13', invalid amount, to BNET globals. ! Dependency: Apply fixes to BNETG and BNETS. Run MAKE. ! Reference: Case #413746. #ADD 00226i08 ! ! Banknet Denied Reversal Acks ! define rvsl^general^denial^d = "05"#; #REPLACE 00227 define rvsl^invalid^amt^d = "13"#; #ENDSCN = SW0A562 !#CMP2.26 08/28/06 BNETS 6084 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6084 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6084 * ******************************************************************************** #SCN = SW0A563 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0002680E ! 28AUG2006 frederr ! Symptom: The interface is accepting reversals for an amount ! greater than the original amount. MasterCard expects ! this type of reversal to be denied. This was found ! during certification testing. ! Problem: The interface does not compare the reversal amount to ! the original amount when determining if a reversal ! should be processed. ! Fix: Modified the code to deny reversals whose amount is ! greater than the original amount with a response code ! '13', invalid amount. Also modified the code to use ! denial code '05', do not honor, in all other instances ! where the interface denies reversals. This is also due ! to certification testing. ! Modified proc: sem^acq^rvsl^rqst ! Dependency: Apply fixes to BNETG and BNETS. Run MAKE. ! Reference: Case #413746. #ADD 05374}2T SEM^ACQ^RVSL^RQST fixed temp^ilf^tran^amt := 0f; fixed temp^tran^amt := 0f; #REPLACE 05374}4B FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #REPLACE 05374}4q FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #REPLACE 05374}5p FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #REPLACE 05374}6v FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #REPLACE 05374}7c FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #ADD 05374}80 FRMT^AND^SEND^ACQ^RVSL^RESP if not ascii^fixed^( sem.tran^amt, temp^ilf^tran^amt ) or not ascii^fixed^( rvsl.tran^amt, temp^tran^amt ) or temp^tran^amt > temp^ilf^tran^amt then begin ! ! Reversal amount is greater than the orginal tran amount ! found on the ILF. Deny the reversal and log it to the ! ILF. Modify the ILF prikey in case a good reversal comes ! in for this transaction. ! ack^resp^cde ':=' rvsl^invalid^amt^d; call frmt^and^send^acq^rvsl^resp; movd( ilf.prikey, "9" ); call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, ack, $len( sem^def ), sub^format^error^l ); return; end; #REPLACE 05374}8a FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' rvsl^general^denial^d; #ENDSCN = SW0A563 !#CMP2.26 08/31/06 BNETLIBS60116FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60116 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60116 * ******************************************************************************** #SCN = SW0A569 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e000270F ! 31AUG2006 sanderj ! Symptom: Partial reversals are not supported in issuer ! processing. ! Problem: Partial reversal support was not added for 0400/0420 ! issuer processing. ! Fix: Added support for partial reversals in 0400/0420 ! messages. ! Proc modified: sem^frmt^amt^to^pstm^amt ! sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fix to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #419510. #ADD 02040 SUB^CONVERT^AMT if replace^amt^bit^d and sem.replace^amts.tran^amt <> zeroes for $len( sem.replace^amts.tran^amt ) then begin call ascii^fixed^( sem.replace^amts.tran^amt, pstm.tran.amt^2 ); ! ! An 0400 or 0420 with field 95 present will be sent to ! auth with an adjustment tran code and a force post ! message type. ! movd( pstm.typ, force^post^d ); if pos^return^d( pstm ) then begin ! ! Merchandise return adjustment. ! movd( pstm.tran.tran^cde.tc, adj^mrch^rtrn^d ); end else if pos^cash^adv^d( pstm ) then begin ! ! Cash advance adjustment. ! movd( pstm.tran.tran^cde.tc, adj^cash^adv^d ); end else begin ! ! Purchase adjustment. ! movd( pstm.tran.tran^cde.tc, adj^pur^d ); end; end; ! of if replace^amt^bit^d and sem.replace^amts... #ADD 0295670P SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if pstm.typ = force^post^d and pstm.tran.tran^cde.tc = adj^mrch^rtrn^d or pstm.tran.tran^cde.tc = adj^cash^adv^d or pstm.tran.tran^cde.tc = adj^pur^d then begin ! ! Do nothing. ! A reversal advice (0400) or reversal request (0420) with ! field 95 present will be sent to auth with an adjustment ! tran code and a force post message type. These values were ! set in the sem^frmt^amt^to^pstm^amt procedure. ! end else begin movd( pstm.typ, reversal^d ); end; #DELETE 0295670Q SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ENDSCN = SW0A569 !#CMP2.26 08/31/06 BNETG 6041 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6041 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6041 * ******************************************************************************** #SCN = SW0A570 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6041 #NEWVERSION = 6042 #ADD 00026o0D ! 31AUG2006 sanderj ! Symptom: Partial reversals are not supported in issuer ! processing. ! Problem: Partial reversal support was not added for 0400/0420 ! issuer processing. ! Fix: Added defines pos^purchase^d, adj^pur^d, ! adj^mrch^rtrn^d and adj^cash^adv^d. ! Dependency: Apply fix to BNETG and BNETLIBS. Run MAKE. ! Reference: Case #419510. #REPLACE 00149 define pos^purchase^d( x ) = ( x.tran.tran^cde = "10" ) #; #ADD 00175 define adj^pur^d = "21"#; define adj^mrch^rtrn^d = "22"#; define adj^cash^adv^d = "23"#; #ENDSCN = SW0A570 !#CMP2.26 08/31/06 BNETLIBS60117FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60117 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60117 * ******************************************************************************** #SCN = SW0A572 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f000270C ! 31AUG2006 sanderj ! Symptom: Field 2 was missing from network control command 0800 ! message. ! Problem: Field 2 was not formatted for the new network control ! command 0800 message. ! Fix: Added processing to format the 0800 message correctly. ! Proc modified: sem^frmt^nmm^request ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #419442. #ADD 02511m00 SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^totals^l then #DELETE 02511m01/02511202 SEM^FRMT^NMM^REQUEST #ADD 02512207 SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^rqst^key^xchng^l or nmm^info^cde = nmm^echo^l then #DELETE 02512208 SEM^FRMT^NMM^REQUEST #ADD 02516200 SEM^FRMT^NMM^REQUEST end; ! nmm^info^cde = nmm^rqst^key^xchng^l or nmm^echo^l #DELETE 02516201 SEM^FRMT^NMM^REQUEST #ENDSCN = SW0A572 !#CMP2.26 09/07/06 BNETLIBS60118FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60118 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60118 * ******************************************************************************** #SCN = SW0A578 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g000270A ! 07SEP2006 sanderj ! Symptom: Field 48 and field 121 are present in reversal ! advice/0430 messages. ! Problem: Field 48 and field 121 are being echoed back in reversal ! advice/0430 messages. ! Fix: Added processing to turn bit 48 and 121 off in reversal ! advice/0430 messages. ! Proc modified: sem^frmt^xrvsl^to^sem^xack ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #419640. #ADD O039340V SEM^FRMT^XRVSL^TO^SEM^XACK addl^data^bit^d := 0; #ADD O039340Y SEM^FRMT^XRVSL^TO^SEM^XACK auth^inst^bit^d := 0; #ENDSCN = SW0A578 !#CMP2.26 09/14/06 BNETLIBS60119FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60119 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60119 * ******************************************************************************** #SCN = SW0A587 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h000270B ! 14SEP2006 sanderj ! Symptom: Field 127 is being sent in the 0800 network connection ! status message. ! Problem: Bit 127 was being turned on in the sem^frmt^nmm^request ! procedure. ! Fix: Added processing to not turn bit 127 on in the format ! procedure for 0800 network connection status messages. ! Proc modified: sem^frmt^nmm^request ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #420305. #ADD 02440t00 SEM^FRMT^NMM^REQUEST if nmm^info^cde <> nmm^rqst^key^xchng^l and nmm^info^cde <> nmm^echo^l then #DELETE 02440t01 SEM^FRMT^NMM^REQUEST #ENDSCN = SW0A587 !#CMP2.26 09/20/06 BNETLIBS60120FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60120 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60120 * ******************************************************************************** #SCN = SW0A603 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i000270B ! 19SEP2006 engelk ! Symptom: RTAU approves transactions from MasterCard in which ! the POS entry mode indicates that the full track data ! has been read from the data encoded on the card and ! transmitted within the authorization request in DE-35 ! (Track 2 Data) or DE-45 (Track 1 Data) without ! alteration or truncation, but neither DE-35 nor DE-45 ! are present in the message. ! Problem: The interface should decline these transactions with a ! format error. ! Fix: Modified the code to decline with a format error, ! transactions having the following POS entry modes which ! do not include either DE-35 or DE-45: ! "80" - Chip card at chip-capable terminal was unable to ! process transaction using data on the chip; ! therefore, the terminal defaulted to the magnetic ! stripe-read PAN. The full track data has been ! read from the data encoded on the card and ! transmitted within the Authorization Request/0100 ! in DE-45 (Track 1 Data) or DE-35 (Track 2 Data) ! without alteration or truncation. ! "90" - PAN auto-entry via magnetic stripe-the full track ! data has been read from the data encoded on the ! card and transmitted within the authorization ! request in DE-35 (Track 2 Data) or DE-45 (Track 1 ! Data) without alteration or truncation. ! "91" - PAN auto-entry via contactless magnetic stripe - ! the full track data has been read from the data ! on the card and transmitted within the ! authorization request in DE-35 (Track 2 Data) or ! DE-45 (Track 1 Data) without alteration or ! truncation. ! Procs modified: sem^frmt^data^to^pstm^track2 ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #419643 #ADD 02270b00 SEM^FRMT^DATA^TO^PSTM^TRACK2 if ( sem.pos^entry^mde = full^mag^stripe or sem.pos^entry^mde = pan^auto^entry^via^mag^stripe or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe ) and ( not track2^bit^d and not track1^bit^d ) then begin ! ! If DE-22 SE-1 is 80, 90, or 91, track2 or track1 must be ! present ! movd( data^elem^err^g, "022" ); return resp^format^error^sem^l; end; #ENDSCN = SW0A603 !#CMP2.26 10/05/06 BNETS 6085 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6085 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6085 * ******************************************************************************** #SCN = SW0A634 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0002690I ! 29SEP2006 engelk ! Symptom: Error 46 experienced on the ILF. ! Problem: When util^ilf^cutover is called due to a new settlement ! date received in a SEM, the file format of the new ILF ! opened is not saved in the PCT. Resultant calls for ! file position, key positions, save positions, and ! repositions as well as calls to get record addresses use ! this file format to execute different calls based upon ! the ILF format type. If the format type is not one of ! the two allowed (1 or 2), the calls to these routines ! will not occur. ! Fix: Modified the util^ilf^open routine to return the file ! format as one of its parameters and used the value ! returned from the routine to set the pct value. ! Procs modified: init^ilf ! Dependency: Apply fixes to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #421144 #ADD 03386 INIT^ILF if util^ilf^open( pct.ilf[ prev^l ].fcb.filenum, pct.ilf[ prev^l ].dat, create^it, icf, pct.ilf[ prev^l ].fcb.file^frmt ) then #DELETE 03387 /03388 INIT^ILF #ADD 03414 INIT^ILF if util^ilf^open( pct.ilf[ cur^l ].fcb.filenum, pct.ilf[ cur^l ].dat, create^it, icf, pct.ilf[ cur^l ].fcb.file^frmt ) then #DELETE 03415 /03416 INIT^ILF #ENDSCN = SW0A634 !#CMP2.26 10/05/06 BNETLIBS60121FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60121 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60121 * ******************************************************************************** #SCN = SW0A635 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j000270a ! 29SEP2006 engelk ! Symptom: Error 46 experienced on the ILF. ! Problem: When util^ilf^cutover is called due to a new settlement ! date received in a SEM, the file format of the new ILF ! opened is not saved in the PCT. Resultant calls for ! file position, key positions, save positions, and ! repositions as well as calls to get record addresses use ! this file format to execute different calls based upon ! the ILF format type. If the format type is not one of ! the two allowed (1 or 2), the calls to these routines ! will not occur. ! Fix: Modified the util^ilf^open routine to return the file ! format as one of its parameters and used the value ! returned from the routine to set the pct value. ! Procs modified: util^ilf^cutover ! util^ilf^open ! Dependency: Apply fixes to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #421144 #REPLACE 07199I04 UTIL^ILF^CUTOVER int file^frmt := 1; #REPLACE 07212M02 UTIL^ILF^CUTOVER if not util^ilf^open( fnum, dat, create^it, icf, file^frmt ) then #REPLACE 07212M0H UTIL^ILF^CUTOVER set ( pct.ilf[ cur^l ].fcb.file^frmt, file^frmt ); #ADD 07760 SUB^ILF^GET ?section util^ilf^open ?page "util^ilf^open" !##################################################################### !# # !# util^ilf^open # !# # !# This proc opens and optionally creates an ILF file. # !# # !# INPUT PARAMETERS: # !# icf - icf record # !# dat - date of ILF file to be opened # !# create^it - flag indicating whether it should be created # !# # !# OUTPUT PARAMETERS: # !# fnum - file number for file opened/created # !# file^frmt - file format of file opened => 1 OR 2 # !# # !# RETURN: # !# return_val - # !# # !##################################################################### int proc util^ilf^open( fnum, dat, create^it, icf, file^frmt ); int .fnum; string .dat; int .create^it; int .icf( icf^ptr^def ); int .file^frmt; #DELETE 07761 /07783 UTIL^ILF^OPEN #REPLACE 07848r00 UTIL^ILF^OPEN file^frmt := file_frmt; #DELETE 07848r01/07848r0C UTIL^ILF^OPEN #ENDSCN = SW0A635 !#CMP2.26 10/09/06 BNETS 6086 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6086 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6086 * ******************************************************************************** #SCN = SW0A639 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6086 #NEWVERSION = 6087 #ADD A000260I ! 05OCT2006 engelk ! Symptom: Acquirer reversals were not deleted from the SAF. ! Problem: 1) An acquirer reversal was not deleted from the SAF ! unless an ILF record was found for the transaction. ! The interface was not correctly formatting the ! term^id portion of the ILF prikey so that the ILF ! record could be found. If the ILF record was not ! found, an ILF record was added. In this scenario, ! an ILF record would be added each time the reversal ! was sent from the SAF until max SAF retries was hit. ! 2) Deletion of the SAF record should not be dependent ! upon the ILF record being found. ! 3) SEM data is lost when the ILF record is updated with ! the SEM 0410 response. ! Fix: 1) Corrected the format of the term^id portion of the ! ILF prikey with which the original tran is sought so ! that it is not left-justified. This portion is ! formatted for acquired transactions based upon a call ! to the BNIIF get routine which does not left-justify ! the field. ! 2) Moved the code that sought the SAF timer and deleted ! the SAF record so that it is not dependent upon the ! ILF record being found. ! 3) Added code to pull external response data elements ! from the ILF and move them into the acquirer reversal ! response before it is used to update the external ! message portion of the ILF. That way,the data is ! available on the ILF should it be needed. ! Procs modified: sem^acq^rvsl^resp ! Dependency: Apply fix to BNETS and run MAKE. ! Reference: Case #421804 #DELETE 05374}0T/05374}0U SEM^ACQ^RVSL^RESP #ADD 05374}0Z SEM^ACQ^RVSL^RESP int .prikey( prikey^def ) := wordaddr( @ilf.prikey ); #REPLACE 05374}0b SEM^ACQ^RVSL^RESP int .xresp( sem^def ) := wordaddr( @ilf.extrn^msg ); #ADD 05374}0w SEM^ACQ^RVSL^RESP call sem^frmt^prikey( sem, ilf.prikey, true ); movl( prikey.term^id, sem.acq^inst.cde, max^group^lgth^g ); if fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg ) then begin @pstm := @base24^msg; ilf^found := true; end; if find^specific^timer( tcb^g, type^saf^l ) then begin call timer^delete( tcb^g, type^saf^l ); call util^saf^delete( saf, $len( saf^bnet^def ) ); end; if not ilf^found then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, ! pstm !, sem, $len( sem^def ), sub^rvsl^not^found^l ); return; end; ! of if no ILF record found ! ! When the ILF was updated with the PSTM reversal, the SEM ! reversal was not written to the ILF. The ILF still contains ! the external response message. Update the reversal response ! with data contained on the ILF that will be lost if the ILF ! record is just updated with the reversal response. ! move( sem.local^tim, xresp.local^tim ); ! DE-12 move( sem.local^dat, xresp.local^dat ); ! DE-13 move( sem.exp^dat, xresp.exp^dat ); ! DE-14 move( sem.merch^typ, xresp.merch^typ ); ! DE-18 move( sem.pos^entry^mde, xresp.pos^entry^mde ); ! DE-22 move( sem.track2, xresp.track2 ); ! DE-35 move( sem.crd^acpt^id^cde, xresp.crd^acpt^id^cde ); ! DE-42 move( sem.crd^acpt, xresp.crd^acpt ); ! DE-43 move( sem.track1, xresp.track1 ); ! DE-45 move( sem.ntl^pos^data, xresp.ntl^pos^data ); ! DE-61 if not auth^id^resp^bit^d then begin move( sem.auth^id^resp, xresp.auth^id^resp ); ! DE-38 end; if sem.proc^cde = sem^purch^cb^d then begin move( sem.addl^amt, xresp.addl^amt ); ! DE-54 end; #DELETE 05374}0x/05374}1Z SEM^ACQ^RVSL^RESP #ENDSCN = SW0A639 !#CMP2.28 11/03/06 BNETG 6042 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6042 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6042 * ******************************************************************************** #SCN = SW0A696 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6042 #NEWVERSION = 6043 #ADD 00026p0A ! 03NOV2006 saderc ! Symptom: SPDH & RTAU Enhancements for Visa and MasterCard. ! Problem: None ! Fix: Modified the code to source in the hlthcr^transit^tkn ! from BADDLTAL instead of healthcare^tkn. ! Dependency: Apply fixes to BNETG, BNETLIBS, COBTKN, DDLPSTKN, ! PSTKNCVS and PSTKNID. Run MAKE. Replace BNETMAN. ! Reference: WO #050909-01. #ADD 00026n0C ? hlthcr^transit^tkn #DELETE 00026n0D #ADD 00026n0F ! hlthcr^transit^tkn, #DELETE 00026n0G #ENDSCN = SW0A696 !#CMP2.28 11/03/06 BNETLIBS60122FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60122 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60122 * ******************************************************************************** #SCN = SW0A697 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k000270J ! 03NOV2006 saderc ! Symptom: SPDH & RTAU Enhancements for Visa and MasterCard. ! Problem: None ! Fix: Modified the code to support the hlthcr^transit^tkn ! instead of the healthcare^tkn. ! Procs modified: pstm^frmt^amt^to^sem^amt ! sem^frmt^amt^to^pstm^amt ! Dependency: Apply fixes to BNETG, BNETLIBS, COBTKN, DDLPSTKN, ! PSTKNCVS and PSTKNID. Run MAKE. Replace BNETMAN. ! Reference: WO #050909-01. #REPLACE c0109101 PSTM^FRMT^AMT^TO^SEM^AMT int .hlthcr^get^tkn( hlthcr^transit^tkn^def ); #REPLACE c0113103 SUB^CONVERT^AMT tkn^id ':=' hlthcr^transit^tkn^id^d; #ADD c0113108 SUB^CONVERT^AMT hlthcr^get^tkn.adnl^amt[ 0 ].amt^typ = "4S" or hlthcr^get^tkn.adnl^amt[ 0 ].amt^typ = "4T" then #DELETE c0113109/c011310A SUB^CONVERT^AMT #ADD c011310G SUB^CONVERT^AMT if not fixed^ascii^( sem.addl^amt.info[ 0 ].amt, hlthcr^get^tkn. adnl^amt[ 0 ].amt ) then begin return false; end; #DELETE c011310H/c011310J SUB^CONVERT^AMT #REPLACE c011310O SUB^CONVERT^AMT end; ! of if healthcare transit token is found ! #REPLACE c0196602 SEM^FRMT^AMT^TO^PSTM^AMT struct .hlthcr^tkn( hlthcr^transit^tkn^def ); #REPLACE c0196606 SEM^FRMT^AMT^TO^PSTM^AMT int .hlthcr^get^tkn( hlthcr^transit^tkn^def ); #ADD c0203003 SUB^CONVERT^AMT hlthcr^tkn.num^adnl^amt := 0; hlthcr^tkn.adnl^amt[ 0 ].amt := 0f; #ADD c020300I SUB^CONVERT^AMT call ascii^fixed^( sem.addl^amt.info[ i ].amt, hlthcr^tkn.adnl^amt[ 0 ].amt ); call ascii^fixed^( sem.addl^amt.info[ i ].amt, pstm.tran.amt^1 ); movd( hlthcr^tkn.adnl^amt[ 0 ].amt^typ, "4S" ); hlthcr^tkn.num^adnl^amt := 1; #DELETE c020300J/c020300O SUB^CONVERT^AMT #ADD c020300j SUB^CONVERT^AMT if hlthcr^tkn.adnl^amt[ 0 ].amt <> 0f then begin tkn^id ':=' hlthcr^transit^tkn^id^d; tkn^add^lgth := $len( hlthcr^tkn.num^adnl^amt ) + $len( hlthcr^tkn.adnl^amt[ 0 ] ); #DELETE c020300k/c020300q SUB^CONVERT^AMT #REPLACE c0203503 SUB^CONVERT^AMT tkn^id ':=' hlthcr^transit^tkn^id^d; #ADD c020350M SUB^CONVERT^AMT call ascii^fixed^( sem.addl^amt.info[ i ].amt, hlthcr^get^tkn. adnl^amt[ 0 ].amt ); #DELETE c020350N/c020350P SUB^CONVERT^AMT #ENDSCN = SW0A697 !#CMP2.28 11/07/06 BNETG 6043 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6043 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6043 * ******************************************************************************** #SCN = SW0A706 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6043 #NEWVERSION = 6044 #ADD 00026q09 ! 07NOV2006 sugumak ! Symptom: Contactless Chip and Magnetic Stripe Support. ! Problem: None. ! Fix: The following defines were added or updated for ! contactless support: ! POS Entry Mode defines ! Cardholder Activated Terminal defines ! POS Terminal Input Capability defines ! Last EMV Status defines ! Emv^capable^terminal^d ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETEMVS. Run MAKE. ! Reference: WO #050209-01 #ADD 01366b00 ! ! BNET POS entry mode defines ! DE 22, Subfield 1 ! #ADD 01366b0C paypass^mapped^pan^d = "92"#, #ADD 01366O0W ! ! Cardholder Activated Terminal Level defines ! DE 61, Subfield 10 ! define not^cat^txn^d = "0"#; define cat^lvl^1^auto^disp^mach^d = "1"#; define cat^lvl^2^self^srvc^term^d = "2"#; define cat^lvl^3^lmt^amt^term^d = "3"#; define cat^lvl^4^in^flight^comm^d = "4"#; define cat^lvl^6^e^comm^d = "6"#; define cat^lvl^7^transponder^txn^d = "7"#; ! ! POS terminal input capability defines ! DE 61, Subfield 11 ! define term^input^cap^unknwn = "0"#; define no^term^used = "1"#; define mag^stripe^rdr = "2"#; define cntctlss^m^chip = "3"#; define cntctlss^mag^stripe = "4"#; define mag^stripe^chip^rdr = "5"#; define key^entry = "6"#; define mag^stripe^or^key^entry = "7"#; define mag^stripe^key^entry^chip^rdr = "8"#; define emv^compatible^icc^rdr = "9"#; ! ! EMV Status token Last EMV Stat defines ! define no^chip^card = "0"#; define chip^card = "1"#; define emv^capable^terminal^d = ( ( pos^term^input^cap = cntctlss^m^chip or pos^term^input^cap = mag^stripe^chip^rdr or pos^term^input^cap = mag^stripe^key^entry^chip^rdr or pos^term^input^cap = emv^compatible^icc^rdr ) or ( pos^term^input^cap = term^input^cap^unknwn and ( sem.pos^entry^mde = chip^read or sem.pos^entry^mde = pan^auto^cntctlss^m^chip or sem.pos^entry^mde = bad^mag^and^chip or sem.pos^entry^mde = full^mag^stripe ) ) or ( sem.pos^entry^mde = elec^commerce and emv^data^bit^d ) )#; #DELETE 01366O0X/01366O19 #ENDSCN = SW0A706 !#CMP2.28 11/07/06 BNETLIBS60123FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60123 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60123 * ******************************************************************************** #SCN = SW0A707 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l000270B ! 07NOV2006 sugumak ! Symptom: Contactless Chip and Magnetic Stripe Support. ! Problem: None. ! Fix: Following are the enhancements carried out: ! mapping of values "07" (Contactless Chip) and "91" ! (Contactless Magnetic Stripe) in the es of "07" ! PSTM.PT^SRV^ENTRY^MDE and the SEM.POS^ENTRY^MDE. ! Mapping of values between the SEM.NTL^POS^DATA fields ! in DE 61 and the PT^SRV^DATA^TKN has been updated. ! Modified Procs: PSTM^FRMT^0200^TO^XRQST ! PSTM^FRMT^0210^TO^XRESP ! SEM^FRMT^POS^ENTRY^MDE^TO^PSTM ! SEM^FRMT^XRESP^TO^PSTM^0210STM ! SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETEMVS. Run MAKE. ! Reference: WO #050209-01 #ADD 00659l09 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip then begin movd ( sem.pos^entry^mde, pan^auto^cntctlss^m^chip ); end; if pstm.pt^srv^entry^mde = pan^auto^cntctlss^mag^stripe then begin movd ( sem.pos^entry^mde, pan^auto^cntctlss^mag^stripe ); end; #ADD 00659X0P PSTM^FRMT^0200^TO^XRQST if sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe then begin movd ( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); movd ( sem.ntl^pos^data.cond^cde.byte[ 10 ], cntctlss^mag^stripe ); end else if sem.pos^entry^mde = pan^auto^cntctlss^m^chip then begin movd ( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); movd ( sem.ntl^pos^data.cond^cde.byte[ 10 ], cntctlss^m^chip ); end else begin move ( sem.ntl^pos^data.cond^cde.byte[ 10 ], pos^data^get^tkn.term^input^cap^ind ); end; #DELETE 00659}00/00659}0O PSTM^FRMT^0200^TO^XRQST #ADD 00802m0K PSTM^FRMT^0210^TO^XRESP ! ! Invalid CVC1 or CVC3 ! #DELETE 00802m0L/00802m0N PSTM^FRMT^0210^TO^XRESP #ADD 00802m0Q PSTM^FRMT^0210^TO^XRESP else if pstm.pt^srv^entry^mde = pan^auto^cntctlss^mag^stripe and ps50^tkn.crd^vrfy^flg <> "Y" then begin set^addl^data^d( cvc^sub^fld^87.tag^data, "P" ); end #REPLACE 02519}02 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM sem.pos^entry^mde = pan^auto^entry^via^mag^stripe then #DELETE 02519}03 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 02519}07 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = paypass^mapped^pan^d then begin movd( pstm.pt^srv^entry^mde, pan^auto^cntctlss^mag^stripe ); end #ADD 02519}07 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM else #ADD F032080Z SEM^FRMT^XRESP^TO^PSTM^0210 if sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe then begin ! ! The message does not contain information to ! determine if CVC3 processing successful or was ! not attempted. Set the card^vrfy^flg to "N" ! (card verification was not attempted), and if ! CVC2 data is present set the ! cvd2^rslt^present^flg to true so the interface ! will perform CVC2 result code mapping. ! movd( card^vrfy^flg, "N" ); if sem.addl^data.info.cvc2^sub^fld^92. tag = "92" then begin cvd2^rslt^present^flg := true; end; end else #ADD 03594}00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 10 ] = cntctlss^m^chip and sem.pos^entry^mde = pan^auto^cntctlss^m^chip then begin set( pos^data^tkn.crdhldr^actvt^term^ind, cat^lvl^2^self^srvc^term^d ); set( pos^data^tkn.term^input^cap^ind, cntctlss^m^chip ); end else if sem.ntl^pos^data.cond^cde.byte[ 10 ] = cntctlss^mag^stripe and ( sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe or sem.pos^entry^mde = paypass^mapped^pan^d ) then begin set( pos^data^tkn.crdhldr^actvt^term^ind, cat^lvl^2^self^srvc^term^d ); set( pos^data^tkn.term^input^cap^ind, cntctlss^mag^stripe ); end else begin move( pos^data^tkn.term^input^cap^ind, sem.ntl^pos^data.cond^cde.byte[ 10 ] ); end; #DELETE 03594}01/03594}0O SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0A707 !#CMP2.28 11/16/06 BNETLIBS60124FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60124 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60124 * ******************************************************************************** #SCN = SW0A729 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m000270H ! 16NOV2006 frederr ! Symptom: Adjustment messages from MasterCard are not being sent ! into BASE24 with the amount in the correct currency. ! Problem: The interface is coded to only use DE-95 (replacement ! amount) subfield 1 (tran amount) when formatting the ! internal adjustment message. DE-95 subfield 2 ! (setl-amount) and subfield 3 (billing amount) along with ! DE-49 (tran currency code), DE-50 (setl currency code) ! and DE-51 (bill currency code) should all be used in ! this situation. ! Fix: Modified the code to use all 3 subfields of DE-95 along ! with the 3 currency codes to determine which subfield ! should be used for the adjustment amount. ! Proc modified: sem^frmt^amt^to^pstm^amt. ! Dependency: Apply fixes to BNETDDLS and BNETLIBS. Run MAKE. ! Reference: Case #422723. #ADD f0204004 SUB^CONVERT^AMT if sem.tran^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if sem.setl^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) and sem.replace^amts.setl^amt <> zeroes for $len( sem.replace^amts.setl^amt ) then begin ! ! ! Settlement currency code matches. Use ! ! DE-95 Setl-amt if sent. ! ! ! call ascii^fixed^( sem.replace^amts.setl^amt, pstm.tran.amt^2 ); end ! settlement currency code matches. ! else if sem.iss^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) and sem.replace^amts.crd^iss^amt <> zeroes for $len( sem.replace^amts.crd^iss^amt ) then begin ! ! ! Billing currency code matches. Use ! ! DE-95 Bill-amt if sent. ! ! ! call ascii^fixed^( sem.replace^amts.crd^iss^amt, pstm.tran.amt^2 ); end ! billing currency code matches. ! else if sem.replace^amts.setl^amt <> zeroes for $len( sem.replace^amts.setl^amt ) then begin ! ! ! No Currency Code matches. Convert DE-95 ! ! Setl-Amount to correct currency. ! ! ! call ascii^fixed^( sem.replace^amts.setl^amt, tran^amt ); if not sub^convert^amt( tran^amt ) then begin return false; end; ! Convert amount failed. ! pstm.tran.amt^2 := tran^amt; end ! no currecny code matches. ! else if sem.tran^crncy^cde = "840" then begin ! ! ! Tran Amount in US dollars. Convert DE-95 ! ! Tran-Amount to correct currency. ! ! ! call ascii^fixed^( sem.replace^amts.tran^amt, tran^amt ); if not sub^convert^amt( tran^amt ) then begin return false; end; ! convert amount failed. ! pstm.tran.amt^2 := tran^amt; end ! tran amount in US dollars. ! else begin ! ! ! Cannot convert replacement amount. Return ! ! false. ! ! ! return false; end; ! invalid replacement amount. ! end ! tran currency code <> to BASE24. ! else begin ! ! ! Tran Currency Code matches. Use DE-95 ! ! Tran-Amount. ! ! ! call ascii^fixed^( sem.replace^amts.tran^amt, pstm.tran.amt^2 ); end; ! tran currency code matches. ! #DELETE f0204005/f0204006 SUB^CONVERT^AMT #ENDSCN = SW0A729 !#CMP2.28 11/16/06 BNETDDLS6023 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6023 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6023 * ******************************************************************************** #SCN = SW0A730 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6023 #NEWVERSION = 6024 #ADD 00262W0M * 16NOV2006 frederr * Symptom: Adjustment messages from MasterCard are not being sent * into BASE24 with the amount in the correct currency. * Problem: The interface is coded to only use DE-95 (replacement * amount) subfield 1 (tran amount) when formatting the * internal adjustment message. DE-95 subfield 2 * (setl-amount) and subfield 3 (billing amount) along with * DE-49 (tran currency code), DE-50 (setl currency code) * and DE-51 (bill currency code) should all be used in * this situation. * Fix: Modified the DDLS to break out DE-95 into the 3 * different subfields including the filler. * Dependency: Apply fix to BNETDDLS and BNETLIBS. Run MAKE. * Reference: Case #422723. #DELETE 01344 /01345 SEM #ADD 01353 SEM 04 setl-amt pic 9(12). 04 crd-iss-amt pic 9(12). #REPLACE 01354 SEM 04 filler pic x(6). #ENDSCN = SW0A730 !#CMP2.28 11/17/06 BNETLIBS60125FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60125 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60125 * ******************************************************************************** #SCN = SW0A739 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n000270H ! 16NOV2006 frederr ! Symptom: Amounts are not being converted correctly on inbound ! request messages from MasterCard. ! Problem: The interface is using DE-4 (Transaction Amount) as the ! amount to convert from even when it is not in US ! dollars. The interface should be using DE-5 (Settlement ! Amount) for this conversion when DE-4 is not in US ! dollars. ! Fix: Modified the interface to use DE-4 when converting ! amounts from the external amount to the internal amount ! only when DE-4 is in US dollars. If DE-4 is not in US ! dollars, then DE-5 will be used if present. If neither ! of these conditions are met, then the interface will ! deny the message back to MasterCard. ! Modified Proc: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #424406. #ADD 02012 SUB^CONVERT^AMT if sem.tran^crncy^cde = "840" then begin ! ! Tran^amt in US dollars. Use tran^amt for ! conversion. ! call ascii^fixed^( sem.tran^amt, tran^amt ); end else if sem.setl^amt <> zeroes for $len ( sem.setl^amt ) then begin ! ! Setl^amt is in US dollars. Use setl^amt ! for conversion. ! call ascii^fixed^( sem.setl^amt, tran^amt ); end else begin ! ! Conversion not possible. Return false. ! return false; end; #DELETE 02013 SUB^CONVERT^AMT #ENDSCN = SW0A739 !#CMP2.28 11/20/06 BNETLIBS60126FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60126 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60126 * ******************************************************************************** #SCN = SW0A746 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o000270I ! 06NOV2006 AlghatS ! Symptom: DE48 is not echoed in the 0110 message even though SE71 ! is present. ! Problem: We do not test if SE71 is present, therefore if it is ! the only present SE in the addl^data we do not send it ! back in the response. ! Fix: Modified the code to test the existance of SE71, and ! send DE48 back in the response if DE71 does exist. ! Modified proc: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to BNETLIBS. Run MAKE. ! Reference: Case #422839 #ADD 00746*0J PSTM^FRMT^0210^TO^XRESP if addl^data^bit^d and sem.addl^data.info.on^behalf^svc^sub^fld^71.tag = "71" then begin ! ! If on^behalf^svc^sub^fld^71 data was sent in the request, ! field 48, must be sent back in the response with all of the ! subelements it contained in the original message ! send^addl^data := true; end; #ENDSCN = SW0A746 !#CMP2.28 11/22/06 BNETLIBS60127FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60127 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60127 * ******************************************************************************** #SCN = SW0A754 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p000270C ! 08NOV2006 thakkea ! Symptom: CVD1/CVD2 Standardization. ! Problem: None. ! Fix: Added support for CVD1/CVD2 Standardization. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to BNETLIBS. Run MAKE. ! Reference: WO #040824-03 #ADD 00746Q05 PSTM^FRMT^0210^TO^XRESP int .pos^data1^tkn( pos^data1^tkn^def ); int pos^data1^tkn^lgth; #ADD 00802m21 PSTM^FRMT^0210^TO^XRESP "U" -> begin set^addl^data^d( cvc^sub^fld^87.tag^data, "U" ); end; #ADD 00802m3C PSTM^FRMT^0210^TO^XRESP movd( tkn^id, pos^data1^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, pos^data1^tkn^lgth ) then begin if sem.addl^data.info.cvc^sub^fld^87.tag^data <> "Y" then begin case pos^data1^tkn.crd^vrfy^flg2 of begin "Y" -> begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "M" ); end; "C", "D", "R" -> begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "N" ); end; "N", "0", " ", "P", "O" -> begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "P" ); end; "S" -> begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "S" ); end; "U" -> begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "U" ); end; otherwise -> begin ! ! do nothing ! end; end; ! case end; ! if sem.addl^data end; ! if hiswtkn^get^tkn #ENDSCN = SW0A754 !#CMP2.28 12/01/06 BNETLIBS60128FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60128 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60128 * ******************************************************************************** #SCN = SW0B008 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q0002708 ! 01DEC2006 frederr ! Symptom: Amounts are not being converted correctly in all ! regions on request messages from MasterCard. ! Problem: The interface is using DE-4 (Transaction Amount) and ! DE-5 (Settlement Amount) as possible amounts to use ! for a conversion. Basically whatever one is in US ! dollars. In some regions of the world DE-6 (Billing ! amount) is sent in US dollars and thus should also ! be considered when picking which amount to use to ! convert. ! Fix: Modified the interface to look at DE-6 when converting ! amounts from the external amount to the internal amount. ! Modified Proc: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #425459. #ADD o0201208 SUB^CONVERT^AMT else if sem.iss^crncy^cde = "840" then begin ! ! Crd^iss^amt in US dollars. Use crd^iss^amt ! for conversion. ! call ascii^fixed^( sem.crd^iss^amt, tran^amt ); end #ENDSCN = SW0B008 !#CMP2.28 12/05/06 BNETS 6087 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6087 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6087 * ******************************************************************************** #SCN = SW0B010 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6087 #NEWVERSION = 6088 #ADD B000260W ! 05DEC2006 wielerk ! Symptom: The process is not sending a 0400 partial reversal ! when a PSTM 0220 adjustment is received from SPDH. ! Problem: The process will process 0400 partial reversals if ! initiated by a PSTM 0420. SPDH will only use the 0220 ! message type. ! Fix: Modified the logic to call pstm^0420^reversal when a ! PSTM 0220 adjustment is received. ! Procs modified: pstm^0220^force^post ! Dependency: Apply fixes to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #422614 #ADD 04993 PSTM^0220^FORCE^POST if ( pos^adjust^d( pstm ) or pos^return^adjust^d ( pstm ) ) and pstm.tran.amt^2 > 0f then begin ! ! Base24 does not originate partial reversals as ! 0420 messages. ! call pstm^0420^reversal( pstm, msg ); return; end; #ENDSCN = SW0B010 !#CMP2.28 12/05/06 BNETLIBS60129FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60129 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60129 * ******************************************************************************** #SCN = SW0B011 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r000270G ! 05DEC2006 wielerk ! Symptom: The process is not sending a 0400 partial reversal ! when a PSTM 0220 adjustment is received from SPDH. ! Problem: The process will process 0400 partial reversals if ! initiated by a PSTM 0420. SPDH will only use the 0220 ! message type. ! Fix: Modified the logic to send a 0400 partial reversal ! when a PSTM 0220 adjustment is received. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fixes to BNETS and BNETLIBS. Run MAKE. ! Reference: Case #422614. #ADD O009660S PSTM^FRMT^0420^TO^ACQ^XRVSL int b24^orig^part^rvsl := false; #REPLACE O0096637/O009663d PSTM^FRMT^0420^TO^ACQ^XRVSL if pstm.typ = force^post^d then begin movd( pstm.typ, reversal^d ); b24^orig^part^rvsl := true; end; #REPLACE O009663g/c009660U PSTM^FRMT^0420^TO^ACQ^XRVSL if b24^orig^part^rvsl then begin movd( pstm.typ, force^post^d ); end; #ENDSCN = SW0B011 !#CMP2.28 12/12/06 BNETLIBS60130FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60130 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60130 * ******************************************************************************** #SCN = SW0B016 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s000270C ! 11DEC2006 engelk ! Symptom: Acquired recurring e-commerce transactions were ! formatted as recurring MOTO transactions. DE-61.1, ! POS terminal attendance, and DE-61.3, POS terminal ! locator, were set to values applicable to recurring MOTO ! transactions. ! Problem: If the C4 (point of service data token) is present, its ! values should be used to fill DE-61. If the C4 token is ! not present, the code should determine whether the ! recurring transaction is a recurring e-commerce ! transaction or a recurring MOTO transaction and format ! DE-61.1 and DE-61.3 accordingly. ! Fix: Added code to leave DE-61 alone after setting it from ! the point of service data (C4) token, if present. Added ! code to set the following subfields of DE-61, Point of ! Service (POS) data, as indicated for recurring ! e-commerce transactions when the C4 token is not ! present. ! ! SE-1, POS terminal attendance: ! "1", Unattended terminal (cardholder-activated terminal ! [CAT], home PC, mobile phone, PDA) ! ! SE-3, POS terminal locator: ! "2", Unattended terminal (cardholder-activated terminal ! [CAT], home PC, mobile phone, PDA) ! ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #425288 #REPLACE 00540X03 PSTM^FRMT^0200^TO^XRQST int pos^data^tkn^found := false; #REPLACE 00659m00 PSTM^FRMT^0200^TO^XRQST pos^data^tkn^found := true; #REPLACE 00700703 PSTM^FRMT^0200^TO^XRQST if base24^rel^g >= 5 and not pos^data^tkn^found then #ADD 0070070N PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "15" or ! cust term/home term ! sem.pos^entry^mde = "81" then ! electronic commerce ! begin movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "1" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "2" ); end else begin movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); end; #DELETE F0070000/F0070004 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0B016 !#CMP2.28 02/09/07 BNETLIBS60131FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60131 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60131 * ******************************************************************************** #SCN = SW0B089 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t000270V ! 05FEB2007 RobinsB ! Symptom: Amounts are not being converted correctly on inbound ! reversal request messages from MasterCard. ! Problem: The interface is using DE-4 (Transaction Amount) as the ! amount to convert from even when it is not in US ! dollars. The interface should be using DE-5 (Settlement ! Amount) for this conversion when DE-4 is not in US ! dollars. ! Fix: Modified the interface to use DE-4 when converting ! amounts from the external amount to the internal amount ! only when DE-4 is in US dollars. If DE-4 is not in US ! dollars, then DE-6 will be used if DE-6 is in US dollars ! otherwise DE-5 will be used if present. If none of these ! conditions are met then the interface will deny the ! message back to MasterCard. ! Modified Proc: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #424406. #ADD V020400K SUB^CONVERT^AMT begin if sem.tran^crncy^cde = "840" then begin ! ! Tran^amt in US dollars. Use tran^amt for ! conversion. ! call ascii^fixed^( sem.tran^amt, tran^amt ); end else if sem.iss^crncy^cde = "840" then begin ! ! Crd^iss^amt in US dollars. Use crd^iss^amt ! for conversion. ! call ascii^fixed^( sem.crd^iss^amt, tran^amt ); end else if sem.setl^amt <> zeroes for $len ( sem.setl^amt ) then begin ! ! Setl^amt is in US dollars. Use setl^amt ! for conversion. ! call ascii^fixed^( sem.setl^amt, tran^amt ); end else begin ! ! Conversion not possible. Return false. ! return false; end; #DELETE V020400L/Z0204001 SUB^CONVERT^AMT #ENDSCN = SW0B089 !#CMP2.28 02/12/07 BNETLIBS60132FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60132 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60132 * ******************************************************************************** #SCN = SW0B090 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u000270K ! 09FEB2007 engelk ! Symptom: Interface in pre-5.0 network enters infinite loop. ! Problem: If track1 was received in a SEM request, an attempt was ! made to add the track1 token to the PSTM being ! formatted. However, tokens are not supported in pre-5.0 ! networks. ! Fix: Added a check on the BASE24 release LCONF param to ! ensure that the interface was running in at least a 5.0 ! network prior to adding the track1 token. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #429274 #REPLACE 03542l0I/03542l0J SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 and track1^bit^d and pstm.pt^srv^entry^mde = "02" then #ENDSCN = SW0B090 !#CMP2.28 02/13/07 BNETDDLS6024 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6024 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6024 * ******************************************************************************** #SCN = SW0B092 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6024 #NEWVERSION = 6025 #ADD 00262X0E * 13FEB2007 HAYEST * Symptom: Banknet MCC104 Accounts Management File and Release * 07.1 Mandates * Problem: None. * Fix: Modified the FRQST, PATH-RQST and BNRLF definitions * to support the Accounts Management File data within * MCC014, thePayPass Mapping File data within MCC106, the * MasterCard Enhanced Value Platform Account File data * within MCC107 and the MasterCard Product Graduation * Account File data within MCC108. Modified the SEM * definition to support new subelements 33 (PayPass * Mapping Information) and 38 (Account Category) within * data element 48 and new data element 67 (Extended * Payment Code). Modified the BNET-SWI-TKN-DATA * definition to support 2 occurences of ON-BEHALF data and * the new PAYPASS-PAN and PAYPASS-MAPPED-PAN fields. * Dependency: BA10SC04 subvolume. New files: BRL0207M, BRL0207R, * BRL0207S, ILB0207M, ILB0207R and ILB0207S. Apply fixes * to BNETDDLS, BNETG, BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF * and SVBNRLFS. Run Make. Make the BNRLF conversion * using BRL0207M. Run the BNRLF conversion using * BRL0207R. Make the ILF conversion using ILB0207M. Run * the ILF conversion using ILB0207R. Replace BNETLOGM, * BNETMAN and BNETUPDT. * Reference: WO #061010-02 and 061120-01. #ADD 00588 FRQST * MCC104: Accounts Management file * MCC106: PayPass Mapping file * MCC107: MasterCard Enhanced Value Platform Account File * MCC108: MasterCard Product Graduation Account File #ADD 00680P01 FRQST 04 mcc104 redefines txt. 06 card-num-104 pic x(19). 06 cust-id pic x(6). 06 crd-pgm pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 filler2 pic x(25). 06 reg-ind-purg-dat1. 08 reg-ind1 pic x. 08 cntry1 pic x(3). 08 subcntry1 pic x(2). 08 purg-dat1 pic x(6). 06 reg-ind-purg-dat2. 08 reg-ind2 pic x. 08 cntry2 pic x(3). 08 subcntry2 pic x(2). 08 purg-dat2 pic x(6). 06 reg-ind-purg-dat3. 08 reg-ind3 pic x. 08 cntry3 pic x(3). 08 subcntry3 pic x(2). 08 purg-dat3 pic x(6). 06 reg-ind-purg-dat4. 08 reg-ind4 pic x. 08 cntry4 pic x(3). 08 subcntry4 pic x(2). 08 purg-dat4 pic x(6). 06 reg-ind-purg-dat5. 08 reg-ind5 pic x. 08 cntry5 pic x(3). 08 subcntry5 pic x(2). 08 purg-dat5 pic x(6). 06 reg-ind-purg-dat6. 08 reg-ind6 pic x. 08 cntry6 pic x(3). 08 subcntry6 pic x(2). 08 purg-dat6 pic x(6). 06 filler4 pic x(871). 04 mcc106 redefines txt. * * Number that is assigned to the PayPass card or device and * transmitted from the card or device to the PayPass terminal. * Format is left-justified with trailing spaces. * 06 paypass-pan pic x(19). * * Number that is embossed, encoded or both on the card. Format * is left-justified with trailing spaces. Ranges of accounts * are not permitted. * 06 pan pic x(19). * * Expiration date that is embossed, encoded or both on the * card that represents the cardholder primary account number. * Format is YYMM. * 06 crd-exp-dat pic x(4). * * Replacement account number that is assigned to the PayPass * card or device and transmitted from card or device to the * PayPass terminal. Format is left-justified with trailing * spaces. * 06 rplmt-paypass-pan pic x(19). * * Number that is embossed, encoded or both on the replacement * card. Format is left-justified with trailing spaces. * 06 rplmt-pan pic x(19). * * Date Last Update Activity Format is MMDDYY. * 06 dat-last-activity pic x(6). * * Time Last Update Activity Format is HHMM * 06 tim-last-activity pic x(4). * * Filler added to fill out remainin 909 bytes. * 06 filler6 pic x(909). 04 mcc107 redefines txt. * * Used to define a single cardholder account the issuer has * qualified as eligible for MasterCard Enhanced Value Platform. * Must be 19 positions, left-justified and filled with spaces. * When the issuer is using MCC107 to define subsets of entire * account ranges, the field will contain the first account in * the range of accounts; HIGH-PAN will contain the last * account. * 06 low-pan pic x(19). * * This field must be 19 positions, left-justified and filled * with spaces. The field may be used to complement the LOW-PAN * as follows: * * When the issuers intent is to add, update or delete a single * account, this field must contain either spaces or a value * equal to LOW-PAN. * * When the issuers intent is to add, update or delete a * range of accounts, this field must contain a greater value * than that found in LOW-PAN. * * When the issuers intent is to inquire, this field is not * required. However, if present, this field must contain * spaces or a value equal to the value in LOW-PAN. Inquiries * on ranges of accounts are not permitted. * 06 high-pan pic x(19). * * This field must only contain a value of 'B' (Enhanced * [Consumer]). * 06 acct-cat pic x. * * This field must contain a date in CCYYMMDD format. The * date must be no greater than 20 years from the date on * which the account is listed. * 06 purge-dat pic x(8). * * This field contains the program ID assigned to the issuer * when the issuer enrolled in MasterCard Enhanced Value * Platform. * 06 prog-id pic x(6). * * Date Last Update Activity Format is MMDDYY. * 06 dat-last-activity pic x(6). * * Time Last Update Activity Format is HHMM * 06 tim-last-activity pic x(4). * * Filler added to fill out remainin 936 bytes. * 06 filler7 pic x(936). 04 mcc108 redefines txt. * * This field must be used to define a single account. The field * must be 19 positions, left-justified and filled with spaces. * 06 acct-num pic x(19). * * This field is used to define the Account Category. Valid values * are: * C = Consumer World * D = Consumer World Elite * G = Business World * H = Business World Elite * I = Corporate World * J = Corproate World Elite * 06 acct-cat pic x. * * This field must contain the product code to which the issuer * wants to migrate the account found in ACCT-NUM. * 06 prod-cde pic x(3). * * This field must contain a date in CCYYMMDD format. The * date must be no greater than 20 years from the date on * which the account is listed. * 06 purge-dat pic x(8). * * Date Last Update Activity Format is MMDDYY. * 06 dat-last-activity pic x(6). * * Time Last Update Activity Format is HHMM * 06 tim-last-activity pic x(4). * * Filler added to fill out remainin 958 bytes. * 06 filler8 pic x(958). #REPLACE 00932G00 SEM * 07 PAN auto-entry via contactless M/Chip #REPLACE 00932G0L/00932G0N SEM * 91 PAN auto-entry via contactless magnetic stripe * 92 Contactless input, PayPass Mapping Service applied * 95 Visa only. Chip card with unreliable Card Verification Value * (CVV) data #ADD 01157S02 SEM * 12 - Static CVC 3 Pre-validation Service * 14 - PayPass Mapping Service #ADD 01157R0D SEM * C - Conversion of PayPass account number to PAN. #ADD 01157W0v SEM * * PayPass Mapping Information * Subfield tag = 33 * Contains data to support the PayPass Mapping Service. * 06 paypass-mapping-sub-fld-33. 08 tag pic 99. 08 lgth pic 99. 08 acct-num-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9. 08 acct-num. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). 08 crd-exp-dat. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(4). * * Account Category * Subfield tag = 38 * Contains the applicable account category based on information * provided by the issuer. * 06 acct-cat-sub-fld-38. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9. #REPLACE 01157V0U SEM 04 user-fld pic x(35). #ADD 01236B1A SEM * 2 = SecureCode Phone Order #ADD 01322 SEM * * Extended Payment Code * bit map position = 67 * Indicates the number of months cardholder is requesting to pay for * an item. * 02 ext-pmnt-cde pic 99. #REPLACE 02407 ICF-BNET 04 file-rec pic x(104). #REPLACE 02432S01 ICF-BNET 06 fill2 pic x(30). #REPLACE 02451W01 ICF-BNET 06 filler2 pic x(31). #REPLACE 02476P01/02476P01 OFFSET 0 ICF-BNET 06 fill3 pic x(30). 04 mcc104 redefines file-rec. 06 card-num-104 pic x(19). 06 cust-id pic x(6). 06 crd-pgm pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 reg-ind-purg-dat1. 08 reg-ind1 pic x. 08 cntry1 pic x(3). 08 subcntry1 pic x(2). 08 purg-dat1 pic x(6). 06 reg-ind-purg-dat2. 08 reg-ind2 pic x. 08 cntry2 pic x(3). 08 subcntry2 pic x(2). 08 purg-dat2 pic x(6). 06 reg-ind-purg-dat3. 08 reg-ind3 pic x. 08 cntry3 pic x(3). 08 subcntry3 pic x(2). 08 purg-dat3 pic x(6). 06 reg-ind-purg-dat4. 08 reg-ind4 pic x. 08 cntry4 pic x(3). 08 subcntry4 pic x(2). 08 purg-dat4 pic x(6). 06 reg-ind-purg-dat5. 08 reg-ind5 pic x. 08 cntry5 pic x(3). 08 subcntry5 pic x(2). 08 purg-dat5 pic x(6). 06 reg-ind-purg-dat6. 08 reg-ind6 pic x. 08 cntry6 pic x(3). 08 subcntry6 pic x(2). 08 purg-dat6 pic x(6). 06 filler4 pic x. 04 mcc106 redefines file-rec. 06 paypass-pan pic x(19). 06 pan pic x(19). 06 crd-exp-dat pic x(4). 06 rplmt-paypass-pan pic x(19). 06 rplmt-pan pic x(19). 06 filler6 pic x(24). 04 mcc107 redefines file-rec. 06 low-pan pic x(19). 06 high-pan pic x(19). 06 acct-cat pic x. 06 purge-dat pic x(8). 06 prog-id pic x(6). 06 filler7 pic x(51). 04 mcc108 redefines file-rec. 06 acct-num pic x(19). 06 acct-cat pic x. 06 prod-cde pic x(3). 06 purge-dat pic x(8). 06 filler8 pic x(73). #REPLACE 02478 ICF-BNET 04 fill4 pic x(675). #REPLACE 02506W01 BNRLF 02 bnrlf-txt pic x(340). #ADD 02510 BNRLF 04 low-pan redefines acct-num pic x(28). 04 pan redefines acct-num pic x(28). 04 paypass-pan pic x(28). 04 high-pan redefines paypass-pan pic x(28). 04 rplmt-pan pic x(28). 04 rplmt-paypass-pan pic x(28). 04 acct-cat pic x. 04 prog-id pic x(6). #ADD 02532 BNRLF 04 crd-pgm pic x(3). #ADD 02536 BNRLF 08 cntry1 pic x(3). 08 subcntry1 pic x(2). #ADD 02540 BNRLF 08 cntry2 pic x(3). 08 subcntry2 pic x(2). #ADD 02544 BNRLF 08 cntry3 pic x(3). 08 subcntry3 pic x(2). #ADD 02548 BNRLF 08 cntry4 pic x(3). 08 subcntry4 pic x(2). #ADD 02552 BNRLF 08 cntry5 pic x(3). 08 subcntry5 pic x(2). #ADD 02556 BNRLF 08 cntry6 pic x(3). 08 subcntry6 pic x(2). #REPLACE 02566W09 BNRLF 04 filler1 pic x(17). #REPLACE 02760W01 SAF-BNET * Switch token version (ver-id) will be "07". #ADD 02760R03 SAF-BNET 02 on-behalf occurs 2 times. 04 svc pic x(2). 04 rslt-1 pic x. #DELETE 02760R04/02760R05 SAF-BNET #ADD 02760W05 SAF-BNET 02 paypass-mapped-pan pic x(19). 02 paypass-pan pic x(19). 02 filler pic x. #ENDSCN = SW0B092 !#CMP2.28 02/13/07 BNETG 6044 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6044 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6044 * ******************************************************************************** #SCN = SW0B093 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6044 #NEWVERSION = 6045 #ADD 00026r0D ! 13FEB2007 SADERC ! Symptom: BankNet Release 07.1 Mandates ! Problem: None ! Fix: Added variable ENHNC^SESSION^MGMT^G that will be set ! via the LCONF parameter ENHNC-SESSION-MGMT. Added ! support for DE 67, Extended Payment Code. ! Dependency: BA10SC04 subvolume. New files: BRL0207M, BRL0207R, ! BRL0207S, ILB0207M, ILB0207R and ILB0207S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF ! and SVBNRLFS. Run Make. Make the BNRLF conversion ! using BRL0207M. Run the BNRLF conversion using ! BRL0207R. Make the ILF conversion using ILB0207M. Run ! the ILF conversion using ILB0207R. Replace BNETLOGM, ! BNETMAN and BNETUPDT. ! Reference: WO #061120-01 #ADD 00281 nmm^actvt^l = 081, nmm^deactvt^l = 082, #ADD 00448d02 int enhnc^session^mgmt^g := false; #ADD 00581 ext^pmnt^cde^bit^d = sbit^map[0].<02> #, !bit 67 #REPLACE 01004 67, 0, sem^field( ext^pmnt^cde ), #ADD 01366d02 int enhnc^session^mgmt^g; #ENDSCN = SW0B093 !#CMP2.28 02/13/07 BNETLIBS60133FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60133 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60133 * ******************************************************************************** #SCN = SW0B094 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v000270D ! 13FEB2007 SINGHM ! Symptom: Banknet MCC104 Accounts Management File Enhancement. ! Problem: None. ! Fix: Added support for MCC104 Accounts Management File ! ( AMS Region, Country, Sub Country ) Enhancement. ! Modified proc: ! path^frmt^file^rqst ! Dependency: BA10SC04 subvolume. Apply fix to BNETDDLS, BNETLIBS, ! BNETS, BRL0207M, BRL0207R, BRL0207S, RQBNRLFS, ! SCRNBRLF, SVBNRLFS, and Run Make. Make the BNRLF ! conversion using BRL0207M. Run the BNRLF conversion ! using BRL0207R. Replace BNETMAN and BNETUPDT. ! Reference: WO #061010-02. ! ! 13FEB2007 SADERC ! Symptom: BankNet Release 07.1 Mandates ! Problem: None ! Fix: 1. Added support for new LCONF parameter ! ENHNC-SESSION-MGMT (Enhanced Session Management ! Processing). ! 2. Added support for DE 48 SE 33 (PayPass Mapping ! Information). ! 3. Modified the current processing of DE 48 SE 71 to ! include support for CVC 3 (Pre-validation Service). ! 4. Modified the interface to support the MCC106 PayPass ! Mapping File, the MCC107 MasterCard Enhanced Value ! Platform Account File and the MCC108 MasterCard Product ! Graduation Account File. ! 5. Added support for DE 48 SE 38 (Account Category). ! 6. Modified current processing of DE 22 SE 1 to support ! a new value of 92 (PayPass Mapping Service). ! 7. Added support for DE 67 (Extended Payment Code). ! 8. Modified the interface to deny the BASE24-pos ! transaction back to the BASE24-pos Router Authorization ! if the transaction has a PSTM.RETL^SIC^CODE with value ! '7995' (non-face-to-face gambling transaction) and PS51 ! token does not exist or does exist with the CVD^FLD ! containing blanks. ! Procs modified: path^frmt^file^rqst ! pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^nmm^request ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: BA10SC04 subvolume. New files: BRL0207M, BRL0207R, ! BRL0207S, ILB0207M, ILB0207R and ILB0207S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF ! and SVBNRLFS. Run Make. Make the BNRLF conversion ! using BRL0207M. Run the BNRLF conversion using ! BRL0207R. Make the ILF conversion using ILB0207M. Run ! the ILF conversion using ILB0207R. Replace BNETLOGM, ! BNETMAN and BNETUPDT. ! Reference: WO #061120-01 ! ! 13FEB2007 SADERC ! Symptom: The count limit for a FOR-DO statement is being ! initialized incorrectly. ! Problem: The interface is calculating the count limit by ! dividing the value of sem.addl^amt.lgth by the ! occurrences of the sem.addl^amt.info substructure using ! $OCCURS. The count limit should be calculated by ! dividing the value of sem.addl^amt.lgth by the length ! of the first occurrence of the sem.addl^amt.info ! substructure using $LEN. ! Fix: Modified the code to use $LEN to calculate the length ! of the first occurrence of the sem.addl^amt.info ! structure. ! Modified proc: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #429736 #ADD 00366Q00 PATH^FRMT^FILE^RQST if path.frqst.file^name = "MCC104" then begin pan ':=' path.frqst.mcc104.card^num^104 for $len( path.frqst.mcc104.card^num^104 ); end else #ADD 00366Q08 PATH^FRMT^FILE^RQST if path.frqst.file^name = "MCC105" then begin #ADD 00366Q0A PATH^FRMT^FILE^RQST end ! of if path.frqst.file^name = "MCC105" else if path.frqst.file^name = "MCC106" then begin pan ':=' path.frqst.mcc106.paypass^pan for $len( path.frqst.mcc106.paypass^pan ); end ! of if path.frqst.file^name = "MCC106" else if path.frqst.file^name = "MCC107" then begin pan ':=' path.frqst.mcc107.low^pan for $len( path.frqst.mcc107.low^pan ); end ! of if path.frqst.file^name = "MCC107" else if path.frqst.file^name = "MCC108" then begin pan ':=' path.frqst.mcc108.acct^num for $len( path.frqst.mcc108.acct^num ); end; ! of if path.frqst.file^name = "MCC108" #ADD 00380Q00 PATH^FRMT^FILE^RQST if path.frqst.file^name = "MCC104" then begin if path.frqst.mcc104.card^num^104 <> blanks for $len( path.frqst.mcc104.card^num^104 ) and path.frqst.mcc104.card^num^104 <> zeroes for $len( path.frqst.mcc104.card^num^104 ) then begin pan^bit^d := 1; scan path.frqst.mcc104.card^num^104 until " " -> @ptr; lgth := $min( $len( sem.pan.num ), ( @ptr '-' @path.frqst.mcc104. card^num^104 ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, path.frqst.mcc104.card^num^104, lgth ); end; file^rec^bit^d := 1; if path.frqst.file^updt^cde = file^add^d then begin movl( sem.file^rec.mcc104.cust^id, path.frqst.mcc104.cust^id, max^group^lgth^g ); movd( sem.file^rec.mcc104.resp^cde, "04" ); move( sem.file^rec.mcc104.entry^rsn, path.frqst.mcc104.entry^rsn ); move( sem.file^rec.mcc104.card^num^104, path.frqst.mcc104.card^num^104 ); move( sem.file^rec.mcc104.crd^pgm, path.frqst.mcc104.crd^pgm ); move( sem.file^rec.mcc104.reg^ind^purg^dat1, path.frqst.mcc104.reg^ind^purg^dat1 ); lgth := $offset( sem.file^rec.mcc104.reg^ind^purg^dat2 ) - $offset( sem.file^rec.mcc104 ); if path.frqst.mcc104.reg^ind^purg^dat2 <> blanks for $len( path.frqst.mcc104.reg^ind^purg^dat2 ) then begin move( sem.file^rec.mcc104.reg^ind^purg^dat2, path.frqst.mcc104.reg^ind^purg^dat2 ); lgth := lgth + $len( sem.file^rec.mcc104. reg^ind^purg^dat2 ); end; if path.frqst.mcc104.reg^ind^purg^dat3 <> blanks for $len( path.frqst.mcc104.reg^ind^purg^dat3 ) then begin move( sem.file^rec.mcc104.reg^ind^purg^dat3, path.frqst.mcc104.reg^ind^purg^dat3 ); lgth := lgth + $len( sem.file^rec.mcc104. reg^ind^purg^dat3 ); end; if path.frqst.mcc104.reg^ind^purg^dat4 <> blanks for $len( path.frqst.mcc104.reg^ind^purg^dat4 ) then begin move( sem.file^rec.mcc104.reg^ind^purg^dat4, path.frqst.mcc104.reg^ind^purg^dat4 ); lgth := lgth + $len( sem.file^rec.mcc104. reg^ind^purg^dat4 ); end; if path.frqst.mcc104.reg^ind^purg^dat5 <> blanks for $len( path.frqst.mcc104.reg^ind^purg^dat5 ) then begin move( sem.file^rec.mcc104.reg^ind^purg^dat5, path.frqst.mcc104.reg^ind^purg^dat5 ); lgth := lgth + $len( sem.file^rec.mcc104. reg^ind^purg^dat5 ); end; if path.frqst.mcc104.reg^ind^purg^dat6 <> blanks for $len( path.frqst.mcc104.reg^ind^purg^dat6 ) then begin move( sem.file^rec.mcc104.reg^ind^purg^dat6, path.frqst.mcc104.reg^ind^purg^dat6 ); lgth := lgth + $len( sem.file^rec.mcc104. reg^ind^purg^dat6 ); end; call integer^ascii^( sem.file^rec.lgth, lgth ); end else if path.frqst.file^updt^cde = file^del^d or path.frqst.file^updt^cde = file^inq^d then begin call ascii^integer^( sem.pan.lgth, lgth ); mov^( sem.file^rec.mcc104.card^num^104, blanks ); movl( sem.file^rec.mcc104.card^num^104, path.frqst.mcc104.card^num^104, lgth ); call integer^ascii^( sem.file^rec.lgth, 19 ); end; end else #REPLACE V005051B/V005051B OFFSET 0 PATH^FRMT^FILE^RQST end ! of if path.frqst.file^name = "MCC105" ! else if path.frqst.file^name = "MCC106" then begin if path.frqst.mcc106.paypass^pan <> blanks for $len( path.frqst.mcc106.paypass^pan ) and path.frqst.mcc106.paypass^pan <> zeroes for $len( path.frqst.mcc106.paypass^pan ) then begin pan^bit^d := 1; scan path.frqst.mcc106.paypass^pan until " " -> @ptr; lgth := $min( $len( path.frqst.mcc106.paypass^pan ), ( @ptr '-' @path.frqst.mcc106.paypass^pan ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl ( sem.pan.num, path.frqst.mcc106.paypass^pan, lgth ); end; ! of if path.frqst.mcc106.paypass^pan <> blanks file^rec^bit^d := 1; lgth := 0; init( sem.file^rec.mcc106, " ", $len( sem.file^rec.mcc106 ) ); move( sem.file^rec.mcc106.paypass^pan, path.frqst.mcc106.paypass^pan ); lgth := $len( sem.file^rec.mcc106.paypass^pan ); if path.frqst.file^updt^cde = file^add^d or path.frqst.file^updt^cde = file^chg^d then begin move( sem.file^rec.mcc106.pan, path.frqst.mcc106.pan ); lgth := lgth + $len( sem.file^rec.mcc106.pan ); if path.frqst.mcc106.rplmt^paypass^pan <> blanks for $len( path.frqst.mcc106.rplmt^paypass^pan ) then begin move( sem.file^rec.mcc106.rplmt^paypass^pan, path.frqst.mcc106.rplmt^paypass^pan ); lgth := lgth + $len( sem.file^rec.mcc106. rplmt^paypass^pan ); end; ! of if path.frqst.mcc106.rplmt^paypass^pan <> if path.frqst.mcc106.rplmt^pan <> blanks for $len( path.frqst.mcc106.rplmt^pan ) then begin move( sem.file^rec.mcc106.rplmt^pan, path.frqst.mcc106.rplmt^pan ); lgth := lgth + $len( sem.file^rec.mcc106. rplmt^pan ); end; ! of if path.frqst.mcc106.rplmt^pan <> if path.frqst.mcc106.crd^exp^dat <> blanks for $len( path.frqst.mcc106.crd^exp^dat ) then begin move( sem.file^rec.mcc106.crd^exp^dat, path.frqst.mcc106.crd^exp^dat ); lgth := lgth + $len( sem.file^rec.mcc106. crd^exp^dat ); end; ! of if path.frqst.mcc106.crd^exp^dat <> end; ! of if path.frqst.file^updt^cde = file^add^d or call integer^ascii^( sem.file^rec.lgth, lgth ); end ! of if path.frqst.file^name = "MCC106" else if path.frqst.file^name = "MCC107" then begin if path.frqst.mcc107.low^pan <> blanks for $len( path.frqst.mcc107.low^pan ) and path.frqst.mcc107.low^pan <> zeroes for $len( path.frqst.mcc107.low^pan ) then begin pan^bit^d := 1; scan path.frqst.mcc107.low^pan until " " -> @ptr; lgth := $min( $len( path.frqst.mcc107.low^pan ), ( @ptr '-' @path.frqst.mcc107.low^pan ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, path.frqst.mcc107.low^pan, lgth ); end; file^rec^bit^d := 1; if path.frqst.file^updt^cde = file^add^d or path.frqst.file^updt^cde = file^chg^d then begin move( sem.file^rec.mcc107.low^pan, path.frqst.mcc107.low^pan ); move( sem.file^rec.mcc107.high^pan, path.frqst.mcc107.high^pan ); move( sem.file^rec.mcc107.acct^cat, path.frqst.mcc107.acct^cat ); move( sem.file^rec.mcc107.purge^dat, path.frqst.mcc107.purge^dat ); move( sem.file^rec.mcc107.prog^id, path.frqst.mcc107.prog^id ); lgth := $offset( sem.file^rec.mcc107. dat^last^activity ) - $offset( sem.file^rec.mcc107.low^pan ); call integer^ascii^( sem.file^rec.lgth, lgth ); end ! of if path.frqst.file^updt^cde = file^add^d or else if path.frqst.file^updt^cde = file^del^d or path.frqst.file^updt^cde = file^inq^d then begin call integer^ascii^( sem.pan.lgth, lgth ); init( sem.file^rec.mcc107.low^pan, " ", $len( sem.file^rec.mcc107.low^pan ) ); movl( sem.file^rec.mcc107.low^pan, path.frqst.mcc107.low^pan, lgth ); call integer^ascii^( sem.file^rec.lgth, 19 ); end; ! of if path.frqst.file^updt^cde = file^del^d or end ! of if path.frqst.file^name = "MCC107" else if path.frqst.file^name = "MCC108" then begin if path.frqst.mcc108.acct^num <> blanks for $len( path.frqst.mcc108.acct^num ) and path.frqst.mcc108.acct^num <> zeroes for $len( path.frqst.mcc108.acct^num ) then begin pan^bit^d := 1; scan path.frqst.mcc108.acct^num until " " -> @ptr; lgth := $min( $len( sem.pan.num ), ( @ptr '-' @path.frqst.mcc108.acct^num ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl ( sem.pan.num, path.frqst.mcc108.acct^num, lgth ); end; ! of if path.frqst.mcc108.acct^num <> blanks file^rec^bit^d := 1; if path.frqst.file^updt^cde = file^add^d or path.frqst.file^updt^cde = file^chg^d then begin move( sem.file^rec.mcc108.acct^num, path.frqst.mcc108.acct^num ); move( sem.file^rec.mcc108.acct^cat, path.frqst.mcc108.acct^cat ); move( sem.file^rec.mcc108.prod^cde, path.frqst.mcc108.prod^cde ); move( sem.file^rec.mcc108.purge^dat, path.frqst.mcc108.purge^dat ); lgth := $offset( sem.file^rec.mcc108. dat^last^activity ) - $offset( sem.file^rec.mcc108.acct^num ); call integer^ascii^( sem.file^rec.lgth, lgth ); end ! of if path.frqst.file^updt^cde = file^add^d or else if path.frqst.file^updt^cde = file^del^d or path.frqst.file^updt^cde = file^inq^d then begin call integer^ascii^( sem.pan.lgth, lgth ); init( sem.file^rec.mcc108.acct^num, " ", $len( sem.file^rec.mcc108.acct^num ) ); movl( sem.file^rec.mcc108.acct^num, path.frqst.mcc108.acct^num, lgth ); call integer^ascii^( sem.file^rec.lgth, 19 ); end; ! of if path.frqst.file^updt^cde = file^del^d or end; ! of if path.frqst.file^name = "MCC108" #ADD 00533J02 PSTM^FRMT^0200^TO^XRQST pos^data1^recur^pmnt := false, ps51^recur^pmnt := false, #ADD K006590B PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or "2" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42. #ADD 00659X0J PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or "2" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); end; ! of if sem.ntl^pos^data.cond^cde.byte[ 3 ] = end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42. #REPLACE F006590b/F006590b OFFSET 0 PSTM^FRMT^0200^TO^XRQST ps51^get^tkn.authn^coll^ind = "2" or ps51^get^tkn.authn^coll^ind = "1" ) then #ADD F006590g PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); #REPLACE 00659w01/00659w01 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if pos^pre^auth^d( pstm ) and sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "2" then #REPLACE 0070070G/0070070H PSTM^FRMT^0200^TO^XRQST pos^data1^tkn.recur^pmnt^ind = "R" ) then begin pos^data1^recur^pmnt := true; end; ! of if ( hiswtkn^get^tkn( pstm, if ( hiswtkn^get^tkn( pstm, #ADD 0070070M PSTM^FRMT^0200^TO^XRQST ps51^recur^pmnt := true; end; ! of if ( hiswtkn^get^tkn( pstm, if pos^data1^recur^pmnt or ps51^recur^pmnt then begin #ADD 0070070N PSTM^FRMT^0200^TO^XRQST if pos^data1^recur^pmnt and pos^data1^tkn.num^instl <> blanks for $len( pos^data1^tkn.num^instl ) and pos^data1^tkn.num^instl <> zeroes for $len( pos^data1^tkn.num^instl ) then begin ext^pmnt^cde^bit^d := 1; move( sem.ext^pmnt^cde, pos^data1^tkn.num^instl ); end; ! of if pos^data1^recur^pmnt^g and #ADD F0070006 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or "2" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42. #ADD 00801 PSTM^FRMT^0210^TO^XRESP if ( addl^data^bit^d and sem.addl^data.info.acct^cat^sub^fld^38.tag = "38" and sem.addl^data.info. acct^cat^sub^fld^38.tag^data <> blanks for $len( sem.addl^data.info. acct^cat^sub^fld^38.tag^data ) and sem.addl^data.info. acct^cat^sub^fld^38.tag^data <> zeroes for $len( sem.addl^data.info. acct^cat^sub^fld^38.tag^data ) and sem^approved^d( sem ) ) then begin move( sem.auth^id^resp.byte[ 5 ], sem.addl^data.info.acct^cat^sub^fld^38. tag^data ); end; ! of if ( addl^data^bit^d and #ADD 01541d49 PSTM^FRMT^SEM^ADDL^DATA end ! of cvd^fld not blanks else begin if pstm.retl^sic^cde = "7995" then begin return false; end; ! of is ps51^get^tkn.cvd^fld = blanks end; ! of if ps51^get^tkn.cvd^fld^present <> " " #DELETE 01541d4A PSTM^FRMT^SEM^ADDL^DATA #ADD 01541m0N PSTM^FRMT^SEM^ADDL^DATA end else begin if pstm.retl^sic^cde = "7995" then begin return false; end; ! of if pstm^retl^sic^cde = "7995" end; ! of is ps51^get^tkn.cvd^fld = blanks #DELETE 01541m0O PSTM^FRMT^SEM^ADDL^DATA #ADD 01541X0C PSTM^FRMT^SEM^ADDL^DATA end ! of PS51 token exists else begin if pstm.retl^sic^cde = "7995" then begin return false; end; ! of if pstm^retl^sic^cde = "7995" end; ! PS51 token does not exist #DELETE 01541W2Z PSTM^FRMT^SEM^ADDL^DATA #REPLACE O020300B SUB^CONVERT^AMT cnt := cnt / $len( sem.addl^amt.info ); #REPLACE c0203007 SUB^CONVERT^AMT cnt := cnt / $len( sem.addl^amt.info ); #REPLACE c020350C SUB^CONVERT^AMT cnt := cnt / $len( sem.addl^amt.info ); #REPLACE 02035S08 SUB^CONVERT^AMT cnt := cnt / $len( sem.addl^amt.info ) #REPLACE g0251202/g0251202 OFFSET 0 SEM^FRMT^NMM^REQUEST nmm^info^cde = nmm^echo^l or nmm^deactvt^l or nmm^actvt^l then #ADD 0354271P SEM^FRMT^XRQST^TO^PSTM^0200 if ext^pmnt^cde^bit^d then begin move( pos^data1^tkn.num^instl, sem.ext^pmnt^cde ); end; ! of if ext^pmnt^cde^bit^d #ADD 03594X0G SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "2" then begin #REPLACE 03594X0H/03594X0I SEM^FRMT^XRQST^TO^PSTM^0200 move( pos^data^tkn.txn^stat^ind, sem.ntl^pos^data.cond^cde.byte[6] ); end; ! of if sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "2" #ADD V055551A UTIL^COLLAPSE^SEM ! ! PayPass Mapping Information ! if hdr.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if hdr...tag = "33" ! ! Account Category ! if hdr.addl^data. info.acct^cat^sub^fld^38.tag = "38" then begin call ascii^integer( hdr.addl^data.info. acct^cat^sub^fld^38.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. acct^cat^sub^fld^38.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if hdr...tag = "38" #ADD V061700g UTIL^EXPAND^SEM if ptr[ length ] = "33" then begin ! ! PayPass Mapping Information ! movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end ! of if ptr[ length ] = "33" else if ptr[ length ] = "38" then begin ! ! Account Category ! movl( sem^ptr.addl^data.info. acct^cat^sub^fld^38.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end ! of if ptr[ length ] = "38" else #ADD 10230Z0O UTIL^SWI^TKN^INIT int cnt; int i; #REPLACE V1023001 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "07"; #ADD 10230705 UTIL^SWI^TKN^INIT if ascii^integer^( sem.addl^data.info. on^behalf^svc^sub^fld^71.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ 0 ] ); i := 0; if cnt > 2 then begin cnt := 2; end; ! of if cnt > 2 while i < cnt do begin move( bnet^tkn^buf.on^behalf[ i ].svc, sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ i ].svc ); move( bnet^tkn^buf.on^behalf[ i ].rslt^1, sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 ); i := i + 1; end; ! of while i < cnt do end; ! of if ascii^integer^( sem.addl^data.info. end; ! of if sem.addl^data.info...tag = "71" #DELETE 10230706/1023070D UTIL^SWI^TKN^INIT #ADD 10230o19 UTIL^SWI^TKN^INIT if sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" then begin if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "M" then begin move( bnet^tkn^buf.paypass^mapped^pan, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); end else begin move( bnet^tkn^buf.paypass^pan, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); end; ! of if sem.addl^data.info ... = "M" end; ! of if sem.addl^data.info...tag = 33 #REPLACE 1023070G/1023070H UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.on^behalf[ 0 ].svc <> blanks for $len( bnet^tkn^buf.on^behalf[ 0 ].svc ) ) then #DELETE 1023070I UTIL^SWI^TKN^UPDT #REPLACE 1023070K/1023070L UTIL^SWI^TKN^UPDT move( bnet^tkn.on^behalf[ 0 ].svc, bnet^tkn^buf.on^behalf[ 0 ].svc ); #ADD 1023070M UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.on^behalf[ 1 ].svc <> blanks for $len( bnet^tkn^buf.on^behalf[ 1 ].svc ) ) then begin move( bnet^tkn.on^behalf[ 1 ].svc, bnet^tkn^buf.on^behalf[ 1 ].svc ); end; ! of if ( bnet^tkn^buf.on^behalf[ 1 ].svc <> #REPLACE 1023070O/1023070P UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.on^behalf[ 0 ].rslt^1 <> blanks for $len( bnet^tkn^buf.on^behalf[ 0 ].rslt^1 ) ) then #DELETE 1023070Q UTIL^SWI^TKN^UPDT #REPLACE 1023070S/1023070T UTIL^SWI^TKN^UPDT move( bnet^tkn.on^behalf[ 0 ].rslt^1, bnet^tkn^buf.on^behalf[ 0 ].rslt^1 ); #ADD 1023070T UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.on^behalf[ 1 ].rslt^1 <> blanks for $len( bnet^tkn^buf.on^behalf[ 1 ].rslt^1 ) ) then begin move( bnet^tkn.on^behalf[ 1 ].rslt^1, bnet^tkn^buf.on^behalf[ 1 ].rslt^1 ); end; ! of if ( bnet^tkn^buf.on^behalf[ 1 ].rslt^1 #ADD V102300c UTIL^SWI^TKN^UPDT if bnet^tkn^buf.paypass^mapped^pan <> blanks for $len( bnet^tkn^buf.paypass^mapped^pan ) then begin movl( bnet^tkn.paypass^mapped^pan, bnet^tkn^buf.paypass^mapped^pan, $len( bnet^tkn.paypass^mapped^pan ) ); end; ! of if ( bnet^tkn^buf.paypass^mapped^pan <> if bnet^tkn^buf.paypass^pan <> blanks for $len( bnet^tkn^buf.paypass^pan ) then begin movl( bnet^tkn.paypass^pan, bnet^tkn^buf.paypass^pan, $len( bnet^tkn.paypass^pan ) ); end; ! of if ( bnet^tkn^buf.paypass^pan <> blanks #DELETE V102300d/10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT movl( swi^tkn^ptr.buf, bnet^tkn, wlen( bnet^tkn ) ); #ADD 10230Q01 UTIL^SWI^TKN^UPDT end; ! updt^flg true ! #ADD 10230Q01 UTIL^SWI^TKN^UPDT end; ! tkn^get^info false ! #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT end; ! util^swi^tkn^updt ! #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT #ADD 10230Q01 UTIL^SWI^TKN^UPDT ?nomap #ENDSCN = SW0B094 !#CMP2.28 02/13/07 BNETS 6088 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6088 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6088 * ******************************************************************************** #SCN = SW0B095 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6088 #NEWVERSION = 6089 #ADD C000260C ! 13FEB2007 SINGHM ! Symptom: Banknet MCC104 Accounts Management File Enhancement. ! Problem: None. ! Fix: Added support for MCC104 Accounts Management File ! ( AMS Region, Country, Sub Country ) Enhancement. ! Modified proc: ! sem^file^request^response ! Dependency: BA10SC04 subvolume. Apply fix to BNETDDLS, BNETLIBS, ! BNETS, BRL0207M, BRL0207R, BRL0207S, RQBNRLFS, ! SCRNBRLF, SVBNRLFS, and Run Make. Make the BNRLF ! conversion using BRL0207M. Run the BNRLF conversion ! using BRL0207R. Replace BNETMAN and BNETUPDT. ! Reference: WO #061010-02 ! ! 13FEB2007 SADERC ! Symptom: BankNet Release 07.1 Mandates ! Problem: None ! Fix: 1. Added support for new LCONF parameter ! ENHNC-SESSION-MGMT (Enhanced Session Management ! Processing). ! 2. Modified the current processing of DE 48 SE 71 to ! include support for CVC 3 (Pre-validation Service). ! 3. Modified the interface to support the MCC106 Paypass ! Mapping File, the MCC107 MasterCard Enhanced Value ! Platform Account File and the MCC108 MasterCard Product ! Graduation Account File. ! Procs modified: cmd^^command^input ! cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^paramproc ! sem^file^request^response ! sem^nmm^response ! sem^request ! Procs added: cmd^actvt^sta ! cmd^deactvt^sta ! Dependency: BA10SC04 subvolume. New files: BRL0207M, BRL0207R, ! BRL0207S, ILB0207M, ILB0207R and ILB0207S. Apply fixes ! to BNETDDLS, BNETG, BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF ! and SVBNRLFS. Run Make. Make the BNRLF conversion ! using BRL0207M. Run the BNRLF conversion using ! BRL0207R. Make the ILF conversion using ILB0207M. Run ! the ILF conversion using ILB0207R. Replace BNETLOGM, ! BNETMAN and BNETUPDT. ! Reference: WO #061120-01 #ADD 01063j02 CMD^^COMMAND^INPUT wlform( no^enhnc^session^mgmt, "INTERFACE IS NOT CONFIGURED TO SUPPORT ENHANCED " ',' "SESSION MANAGEMENT " ) #ADD 01139j0V CMD^^COMMAND^INPUT else if mtp[ 0 ] = "DEACTVT STA" then begin if enhnc^session^mgmt^g then begin if not cmd^deactvt^sta( msg, mtp ) then begin return false; end; end else begin call log^message^( 2923, !routing code!, @no^enhnc^session^mgmt, net.myname, evt^msg^severity^info^l ); return false; end; ! of if enhnc^session^mgmt^g end ! of if mtp[ 0 ] = "DEACTVT STA" else if mtp[ 0 ] = "ACTVT STA" then begin if enhnc^session^mgmt^g then begin if not cmd^actvt^sta( msg, mtp ) then begin return false; end; end else begin call log^message^( 2924, !routing code!, @no^enhnc^session^mgmt, net.myname, evt^msg^severity^info^l ); return false; end; ! of if enhnc^session^mgmt^g end ! of if mtp[ 0 ] = "ACTVT STA" #ADD 01144 CMD^^COMMAND^INPUT ?section cmd^actvt^sta ?page "cmd^actvt^sta" !##################################################################### !# # !# cmd^actvt^sta # !# # !# This procedure will send a Host Session Activation Network # !# Management Request/0800 message to the network. # !# # !# INPUT PARAMETERS: # !# msg - Message pointer. # !# mtp - Message text pointer. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - Message format/collapse successful # !# false - Message format/collapse error # !# # !##################################################################### int proc cmd^actvt^sta( msg, mtp ); int .msg; string .mtp; begin wlform( collapse^err, "FAILURE TO SEND ACTIVATE, MESSAGE " ',' "COLLAPSE ERROR " ) wlform( frmt^err, "FAILURE TO SEND ACTIVATE, FORMATTING ERROR " ) wlform( invld^sta^nam, "INVALID STATION NAME \S SPECIFIED " ',' "IN ACTIVATE STATION COMMAND " ) struct .csem( nmm^def ); struct .sem( nmm^def ); int extlgth; int i; int nmm^info^cde; int sta^idx := -1; int sta^nam^lgth := 0; int .sta^nam^i; int strt^pos := 10; string .sta^nam[ 0:15 ] := [ 16 * [" "] ]; sta^nam^lgth := ( msg^length - strt^pos ); sta^nam ':=' mtp[ strt^pos ] for sta^nam^lgth; for i := 0 to ( pct.status.num^of^sta - 1 ) do begin if sta^nam = pct.station[ i ].nam for $len( pct.station[ i ].nam ) then begin sta^idx := i; end; ! of if pct.station[ i ].nam end; ! of for i := 0 loop if sta^idx = -1 then begin call log^message^( 2950, ! routing^code !, @invld^sta^nam, net.myname, evt^msg^severity^warn^l, @sta^nam ); return false; end; ! of if i = -1 @sta^nam^i := wordaddr( @sta^nam ); if not util^station^index( sta^nam^i, sta^idx ) then begin return false; end; ! of if not util^station^index( sta^nam, sta^idx ) set( nmm^info^cde, nmm^actvt^l ); if not sem^frmt^nmm^request( sem, nmm^info^cde, ! group !, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then begin call log^message^( 2951, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^warn^l ); return false; end else begin if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 2952, ! routing^code !, @collapse^err, net.myname, evt^msg^severity^warn^l ); return false; end else begin call util^send^sem( csem, extlgth, pct.station[ sta^idx ].nam ); return true; end; ! of if not util^^collapse end; ! of if not sem^frmt^nmm^request end; ! of proc cmd^actvt^sta #ADD 01295 CMD^CUTOVER ?section cmd^deactvt^sta ?page "cmd^deactvt^sta" !##################################################################### !# # !# cmd^deactvt^sta # !# # !# This procedure will send a Host Session Deactivation Network # !# Management Request/0800 message to the network. # !# # !# INPUT PARAMETERS: # !# msg - Message pointer. # !# mtp - Message text pointer. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - Message format/collapse successful # !# false - Message format/collapse error # !# # !##################################################################### int proc cmd^deactvt^sta( msg, mtp ); int .msg; string .mtp; begin wlform( collapse^err, "FAILURE TO SEND DEACTIVATE, MESSAGE " ',' "COLLAPSE ERROR " ) wlform( frmt^err, "FAILURE TO SEND DEACTIVATE, " ',' "FORMATTING ERROR " ) wlform( invld^sta^nam, "INVALID STATION NAME \S SPECIFIED " ',' "IN DEACTIVATE STATION COMMAND " ) struct .csem( nmm^def ); struct .sem( nmm^def ); int extlgth; int i; int nmm^info^cde; int sta^idx := -1; int sta^nam^lgth := 0; int .sta^nam^i; int strt^pos := 12; string .sta^nam[ 0:15 ] := [ 16 * [" "] ]; sta^nam^lgth := ( msg^length - strt^pos ); sta^nam ':=' mtp[ strt^pos ] for sta^nam^lgth; for i := 0 to ( pct.status.num^of^sta - 1 ) do begin if sta^nam = pct.station[ i ].nam for $len( pct.station[ i ].nam ) then begin sta^idx := i; end; ! of if pct.station[ i ].nam end; ! of for i := 0 loop if sta^idx = -1 then begin call log^message^( 2980, ! routing^code !, @invld^sta^nam, net.myname, evt^msg^severity^warn^l, @sta^nam ); return false; end; ! of if i = -1 @sta^nam^i := wordaddr( @sta^nam ); if not util^station^index( sta^nam^i, sta^idx ) then begin return false; end; ! of if not util^station^index( sta^nam, sta^idx ) set( nmm^info^cde, nmm^deactvt^l ); if not sem^frmt^nmm^request( sem, nmm^info^cde, ! group !, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then begin call log^message^( 2981, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^warn^l ); return false; end else begin if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 2982, ! routing^code !, @collapse^err, net.myname, evt^msg^severity^warn^l ); return false; end else begin call util^send^sem( csem, extlgth, pct.station[ sta^idx ].nam ); return true; end; ! of if not util^^collapse( end; ! of if not sem^frmt^nmm^request( end; ! of proc cmd^deactvt^sta #ADD 02599502 CMD^WARMBOOT^STORE^GLOBALS store^d( enhnc^session^mgmt^g ); #ADD 02599505 CMD^WARMBOOT^STORE^GLOBALS enhnc^session^mgmt^g := false; #ADD 02599508 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( enhnc^session^mgmt^g ); #ADD 03945502 INIT^PARAMPROC "P", "ENHNC-SESSION-MGMT ", #ADD 0399650A INIT^PARAMPROC ! ENHNC-SESSION-MGMT ! if not ferror then begin enhnc^session^mgmt^g := false; if lconf.param^msg.ptxt = "Y" then begin enhnc^session^mgmt^g := true; end; ! of if lconf.param^msg.ptxt = "Y" end; ! of if not ferror #ADD 06099N00 SEM^FILE^REQUEST^RESPONSE if frqst.file^name.nam = "MCC104" then begin move( bnrlf.mcc.cust^id, frqst.file^rec.mcc104.cust^id ); move( bnrlf.mcc.crd^pgm, frqst.file^rec.mcc104.crd^pgm ); move( bnrlf.mcc.acct^num, frqst.file^rec.mcc104.card^num^104 ); move( bnrlf.mcc.entry^reason, frqst.file^rec.mcc104.entry^rsn ); move( bnrlf.mcc.reg^ind^purg^dat1.reg^ind1, frqst.file^rec.mcc104.reg^ind^purg^dat1.reg^ind1 ); move( bnrlf.mcc.reg^ind^purg^dat1.purg^dat1, frqst.file^rec.mcc104.reg^ind^purg^dat1.purg^dat1 ); move( bnrlf.mcc.reg^ind^purg^dat1.cntry1, frqst.file^rec.mcc104.reg^ind^purg^dat1.cntry1 ); move( bnrlf.mcc.reg^ind^purg^dat1.subcntry1, frqst.file^rec.mcc104.reg^ind^purg^dat1.subcntry1 ); move( bnrlf.mcc.reg^ind^purg^dat2.reg^ind2, frqst.file^rec.mcc104.reg^ind^purg^dat2.reg^ind2 ); move( bnrlf.mcc.reg^ind^purg^dat2.purg^dat2, frqst.file^rec.mcc104.reg^ind^purg^dat2.purg^dat2 ); move( bnrlf.mcc.reg^ind^purg^dat2.cntry2, frqst.file^rec.mcc104.reg^ind^purg^dat2.cntry2 ); move( bnrlf.mcc.reg^ind^purg^dat2.subcntry2, frqst.file^rec.mcc104.reg^ind^purg^dat2.subcntry2 ); move( bnrlf.mcc.reg^ind^purg^dat3.reg^ind3, frqst.file^rec.mcc104.reg^ind^purg^dat3.reg^ind3 ); move( bnrlf.mcc.reg^ind^purg^dat3.purg^dat3, frqst.file^rec.mcc104.reg^ind^purg^dat3.purg^dat3 ); move( bnrlf.mcc.reg^ind^purg^dat3.cntry3, frqst.file^rec.mcc104.reg^ind^purg^dat3.cntry3 ); move( bnrlf.mcc.reg^ind^purg^dat3.subcntry3, frqst.file^rec.mcc104.reg^ind^purg^dat3.subcntry3 ); move( bnrlf.mcc.reg^ind^purg^dat4.reg^ind4, frqst.file^rec.mcc104.reg^ind^purg^dat4.reg^ind4 ); move( bnrlf.mcc.reg^ind^purg^dat4.purg^dat4, frqst.file^rec.mcc104.reg^ind^purg^dat4.purg^dat4 ); move( bnrlf.mcc.reg^ind^purg^dat4.cntry4, frqst.file^rec.mcc104.reg^ind^purg^dat4.cntry4 ); move( bnrlf.mcc.reg^ind^purg^dat4.subcntry4, frqst.file^rec.mcc104.reg^ind^purg^dat4.subcntry4 ); move( bnrlf.mcc.reg^ind^purg^dat5.reg^ind5, frqst.file^rec.mcc104.reg^ind^purg^dat5.reg^ind5 ); move( bnrlf.mcc.reg^ind^purg^dat5.purg^dat5, frqst.file^rec.mcc104.reg^ind^purg^dat5.purg^dat5 ); move( bnrlf.mcc.reg^ind^purg^dat5.cntry5, frqst.file^rec.mcc104.reg^ind^purg^dat5.cntry5 ); move( bnrlf.mcc.reg^ind^purg^dat5.subcntry5, frqst.file^rec.mcc104.reg^ind^purg^dat5.subcntry5 ); move( bnrlf.mcc.reg^ind^purg^dat6.reg^ind6, frqst.file^rec.mcc104.reg^ind^purg^dat6.reg^ind6 ); move( bnrlf.mcc.reg^ind^purg^dat6.purg^dat6, frqst.file^rec.mcc104.reg^ind^purg^dat6.purg^dat6 ); move( bnrlf.mcc.reg^ind^purg^dat6.cntry6, frqst.file^rec.mcc104.reg^ind^purg^dat6.cntry6 ); move( bnrlf.mcc.reg^ind^purg^dat6.subcntry6, frqst.file^rec.mcc104.reg^ind^purg^dat6.subcntry6 ); end; #ADD 0609930N SEM^FILE^REQUEST^RESPONSE if frqst.file^name.nam = "MCC106" then begin move( bnrlf.mcc.paypass^pan, frqst.file^rec.mcc106.paypass^pan ); move( bnrlf.mcc.pan, frqst.file^rec.mcc106.pan ); move( bnrlf.mcc.rplmt^paypass^pan, frqst.file^rec.mcc106.rplmt^paypass^pan ); move( bnrlf.mcc.rplmt^pan, frqst.file^rec.mcc106.rplmt^pan ); move( bnrlf.mcc.crd^exp^dat, frqst.file^rec.mcc106.crd^exp^dat ); end; ! of if frqst.file^name.nam = "MCC106" if frqst.file^name.nam = "MCC107" then begin move( bnrlf.mcc.low^pan, frqst.file^rec.mcc107.low^pan ); move( bnrlf.mcc.high^pan, frqst.file^rec.mcc107.high^pan ); move( bnrlf.mcc.acct^cat, frqst.file^rec.mcc107.acct^cat ); move( bnrlf.mcc.purge^dat, frqst.file^rec.mcc107.purge^dat ); move( bnrlf.mcc.prog^id, frqst.file^rec.mcc107.prog^id ); end; ! of if frqst.file^name.nam = "MCC107" if frqst.file^name.nam = "MCC108" then begin move( bnrlf.mcc.acct^num, frqst.file^rec.mcc108.acct^num ); move( bnrlf.mcc.acct^cat, frqst.file^rec.mcc108.acct^cat ); move( bnrlf.mcc.prod^typ, frqst.file^rec.mcc108.prod^cde ); move( bnrlf.mcc.purge^dat, frqst.file^rec.mcc108.purge^dat ); end; ! of if frqst.file^name.nam = "MCC108" #ADD 06504 SEM^NMM^RESPONSE wlform( sta^down, "Banknet Station \s Link Marked DOWN " ) #ADD 06512 SEM^NMM^RESPONSE "081", ! Activate Station "082", ! Deactivate Station #ADD 06557 SEM^NMM^RESPONSE !081! return; !082! begin set( pct.station[ sta^x ].up, false ); call log^message^( 1541, ! routing code !, @sta^down, net.myname, evt^msg^severity^info^l, @pct.station[ sta^x ].nam ); end; #ADD 06596]03 SEM^REQUEST int frst^rslt^prsnt := false; #ADD 06596]04 SEM^REQUEST int idx2 := 0; #ADD 06596]08 SEM^REQUEST int scnd^rslt^prsnt := false; #REPLACE 06612]0M/06612]0O SEM^REQUEST ( sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "02" or sem.addl^data.info.on^behalf^svc^sub^fld^71. #REPLACE 06612^01/06612^05 SEM^REQUEST tag^data[ 0 ].svc = "03" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "05" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "06" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "12" ) and #REPLACE 06612]0Q/06612]0R SEM^REQUEST ( sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].rslt^1 <> #REPLACE 06612]0T/06612]0U SEM^REQUEST on^behalf^svc^sub^fld^71. tag^data[ 0 ].rslt^1 ) * [ " " ] ] ) then #ADD 06612]0V SEM^REQUEST frst^rslt^prsnt := true; end; if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag = "71" and ( sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "02" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "03" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "05" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "06" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "12" ) and ( sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].rslt^1 <> [ $len ( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ 1 ].rslt^1 ) * [ " " ] ] ) then begin scnd^rslt^prsnt := true; end; if frst^rslt^prsnt then begin #REPLACE 06612]0X SEM^REQUEST $occurs( on^behalf^apprv^rslt^cdes^g ); #REPLACE 06612]0e SEM^REQUEST tag^data[ 0 ].rslt^1 ) and #ADD 06612]0f SEM^REQUEST end; ! of if frst^rslt^prsnt if scnd^rslt^prsnt then begin max^num^cdes := $occurs( on^behalf^apprv^rslt^cdes^g ); idx2 := -1; while ( idx2 := idx2 + 1 ) < max^num^cdes and ( on^behalf^apprv^rslt^cdes^g[ idx2 ] <> sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ 1 ].rslt^1 ) and on^behalf^apprv^rslt^cdes^g[ idx2 ] <> " " do; end; ! of if scnd^rslt^prsnt if ( frst^rslt^prsnt and on^behalf^apprv^rslt^cdes^g[ idx ] = " " ) or ( scnd^rslt^prsnt and on^behalf^apprv^rslt^cdes^g[ idx2 ] = " " ) then #DELETE 06612]0g/06612]0h SEM^REQUEST #REPLACE 06612]0i SEM^REQUEST begin #REPLACE 0661250c/0661250n SEM^REQUEST if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); #REPLACE 0661250p/0661250y SEM^REQUEST return; end else begin ! ! ! LCONF parameter FRWD-DCLN-ADVC set to ! ! 'Y' and frmt^err = false, then forward ! ! to Router Authorization. ! ! ! movd( pstm.typ, force^post^d ); #REPLACE 06612510 SEM^REQUEST movd( pstm.tran.resp^cde, "055" ); #REPLACE 06612512 SEM^REQUEST call util^send^pstm( pstm, pct.pos.dest ); #REPLACE 06612514/06612518 SEM^REQUEST call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^system^error^l ); #REPLACE 0661251A/0661251C SEM^REQUEST return; end; ! of if frmt^err := ... ! end; ! of if frwd^dcln^advc^g ! #REPLACE 06612]19/06612]1A SEM^REQUEST call sem^request^deny( susp, sta^x, #REPLACE 0661251I SEM^REQUEST resp^tran^not^supp^sem^l, #REPLACE 06612]1C/06612]1E SEM^REQUEST sub^system^error^l ); return; end; ! of if ( frst^rslt^prsnt and ! #DELETE 06612]1F SEM^REQUEST #ENDSCN = SW0B095 !#CMP2.28 02/13/07 RQBNRLFS6018 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6018 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6018 * ******************************************************************************** #SCN = SW0B096 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6018 #NEWVERSION = 6019 #ADD 00018R0G * 13FEB2007 MURUGIS * Symptom: BankNet MCC104 Accounts Management File * Enhancement. * Problem: None. * Fix: Page 4 will support file update codes of add, * delete and inquiry for the Account Management * File (AMS Region, Country and Sub-country) data * of MCC104. Page 5 will be the perusal screen for * the AMS data of MCC104. * Added paragraphs: 200-ACCEPT-SCREEN-OVERLAY-8 * 200-ACCEPT-SCREEN-OVERLAY-9 * 400-MOVE-RECORD * 400-SELECT-MCC104-ACCOUNTS * 570-DISPLAY-OVERLAY-8 * 570-DISPLAY-OVERLAY-9 * 575-SAVE-RECORD * Modified paragraphs: 100-BEGIN * 200-GET-DATA * 200-ACCEPT-SCREEN * 240-FETCH-RECORD * 250-ADD-RECORD * 260-DELETE-RECORD * 270-UPDATE-RECORD * 480-DATA-CHECK * 400-SELECT-FUNCTION * 570-DISPLAY-OVERLAY * 595-CLEAR-DATA * 595-SCREEN-INIT * 800-SET-OVERLAY * 800-GO-TO-PERUSAL * Dependency: BA10SC04 subvolume. Apply fix to BNETDDLS, * BNETLIBS, BNETS, BRL0207M, BRL0207R, BRL0207S, * RQBNRLFS, SCRNBRLF, SVBNRLFS, and Run Make. Make * the BNRLF conversion using BRL0207M. Run the BNRLF * conversion using BRL0207R. Replace BNETMAN and * BNETUPDT. * Reference: Case #061010-02. * 13FEB2007 SWIFTD * Symptom: Banknet Release 07.1 Mandates. * Problem: None. * Fix: Added support for PayPass Mapping, Mastercard * Enhanced Value Platform Account, and Mastercard * Product Graduation Account. * Modified paragraphs: 100-BEGIN * 200-GET-DATA * 200-ACCEPT-SCREEN * 240-FETCH-RECORD * 250-ADD-RECORD * 260-DELETE-RECORD * 270-UPDATE-RECORD * 400-SELECT-FUNCTION * 480-DATA-CHECK * 570-DISPLAY-OVERLAY * 595-SCREEN-INIT * 800-GO-TO-PERUSAL * 800-SET-OVERLAY * Added paragraphs : 200-ACCEPT-SCREEN-OVERLAY-10 * 200-ACCEPT-SCREEN-OVERLAY-11 * 200-ACCEPT-SCREEN-OVERLAY-12 * 200-ACCEPT-SCREEN-OVERLAY-13 * 200-ACCEPT-SCREEN-OVERLAY-14 * 200-ACCEPT-SCREEN-OVERLAY-15 * 200-ACCEPT-SCREEN-OVERLAY-52 * 400-SELECT-MCC106-ACCOUNTS * 400-SELECT-MCC107-ACCOUNTS * 400-SELECT-MCC108-ACCOUNTS * 570-DISPLAY-OVERLAY-10 * 570-DISPLAY-OVERLAY-11 * 570-DISPLAY-OVERLAY-12 * 570-DISPLAY-OVERLAY-13 * 570-DISPLAY-OVERLAY-14 * 570-DISPLAY-OVERLAY-15 * 571-KEYS-DISPLAYED * Dependency: BA10SC04 subvolume. New files: BRL0207M, * BRL0207R, BRL0207S, ILB0207M, ILB0207R and * ILB0207S. Apply fixes to BNETDDLS, BNETG, * BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF and SVBNRLFS. * Run Make. Make the BNRLF conversion using * BRL0207M. Run the BNRLF conversion using * BRL0207R. Make the ILF conversion using ILB0207M. * Run the ILF conversion using ILB0207R. Replace * BNETLOGM, BNETMAN and BNETUPDT. * Reference: WO #061120-01. #ADD 00029Q0I DATA DIVISION 01 WS-REG-IND1 PIC X. 01 WS-REG-IND2 PIC X. 01 WS-REG-IND3 PIC X. 01 WS-REG-IND4 PIC X. 01 WS-REG-IND5 PIC X. 01 WS-REG-IND6 PIC X. #ADD 00046H03 DATA DIVISION 05 MCC104-ENTRY-REASON PIC X. 88 VALID-MCC104-ER VALUE "C", "F", "X", "O". #ADD 00062 DATA DIVISION 01 WS-DATE-CHECK-4. 05 CENTURY-4 PIC 9(2). 88 VALID-CENTURY-4 VALUE 20. 05 YEAR-4 PIC 9(2). 88 VALID-YEAR-4 VALUE 00 THRU 25. 05 MONTH-4 PIC 9(2). 88 VALID-MONTH-4 VALUE 1 THRU 12. 05 DAY-4 PIC 9(2). 88 VALID-DAY-4 VALUE 1 THRU 31. #ADD 00127C01 DATA DIVISION 05 RLF8 PIC X(4) VALUE "BNET". 05 RLF9 PIC X(4) VALUE "BNET". 05 RLF10 PIC X(4) VALUE "BNET". 05 RLF11 PIC X(4) VALUE "BNET". 05 RLF12 PIC X(4) VALUE "BNET". 05 RLF13 PIC X(4) VALUE "BNET". 05 RLF14 PIC X(4) VALUE "BNET". 05 RLF15 PIC X(4) VALUE "BNET". #ADD 00130C00 DATA DIVISION 05 PROD-DESC PIC X(4) OCCURS 15 TIMES. #DELETE 00130C01 DATA DIVISION #REPLACE 00133C03 DATA DIVISION 8, 9, 47, 48, 50, 51. #ADD 00173J08 DATA DIVISION COPY SC-MCC104-1 OF =SWBNET_SCNBRLFO. COPY SC-MCC106-1 OF =SWBNET_SCNBRLFO. COPY SC-MCC107-1 OF =SWBNET_SCNBRLFO. COPY SC-MCC108-1 OF =SWBNET_SCNBRLFO. #ADD 00173J0B DATA DIVISION COPY SC-MCC104-P OF =SWBNET_SCNBRLFO. COPY SC-MCC106-P OF =SWBNET_SCNBRLFO. COPY SC-MCC107-P OF =SWBNET_SCNBRLFO. COPY SC-MCC108-P OF =SWBNET_SCNBRLFO. #ADD 00173J0F DATA DIVISION COPY SC-HELP106 OF =SWBNET_SCNBRLFO. #REPLACE 00203C01 100-BEGIN MOVE 7 TO WS-PAGE-OF. #ADD 00290C0S 200-GET-DATA DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 8 PERFORM ONE OF 300-VALIDATE-DATA , 900-PRINT-SCREEN , 240-FETCH-RECORD , 250-ADD-RECORD , 260-DELETE-RECORD , 270-UPDATE-RECORD , 800-GO-TO-SCREEN , 895-CLEAR-DATA , 800-GO-TO-PERUSAL , 800-FILE-REQ-PAGE-BACK , 595-KEYS-DISPLAYED , 295-CHANGE-LOGICAL-NET , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 9 PERFORM ONE OF 420-REQUEST-DATA , 423-DELETE-DATA , 900-PRINT-SCREEN , 425-NEXT-PAGE , 800-SET-NEXT-VALID-OVERLAY , 800-PERUSAL-PAGE-BACK , 590-KEYS-DISPLAYED , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 10 PERFORM ONE OF 300-VALIDATE-DATA , 900-PRINT-SCREEN , 250-ADD-RECORD , 260-DELETE-RECORD , 270-UPDATE-RECORD , 800-GO-TO-SCREEN , 895-CLEAR-DATA , 800-GO-TO-PERUSAL , 800-FILE-REQ-PAGE-BACK , 571-KEYS-DISPLAYED , 295-CHANGE-LOGICAL-NET , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 11 PERFORM ONE OF 420-REQUEST-DATA , 423-DELETE-DATA , 900-PRINT-SCREEN , 425-NEXT-PAGE , 800-SET-NEXT-VALID-OVERLAY , 800-PERUSAL-PAGE-BACK , 590-KEYS-DISPLAYED , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 12 PERFORM ONE OF 300-VALIDATE-DATA , 900-PRINT-SCREEN , 240-FETCH-RECORD , 250-ADD-RECORD , 260-DELETE-RECORD , 270-UPDATE-RECORD , 800-GO-TO-SCREEN , 895-CLEAR-DATA , 800-GO-TO-PERUSAL , 800-FILE-REQ-PAGE-BACK , 595-KEYS-DISPLAYED , 295-CHANGE-LOGICAL-NET , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 13 PERFORM ONE OF 420-REQUEST-DATA , 423-DELETE-DATA , 900-PRINT-SCREEN , 425-NEXT-PAGE , 800-SET-NEXT-VALID-OVERLAY , 800-PERUSAL-PAGE-BACK , 590-KEYS-DISPLAYED , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 14 PERFORM ONE OF 300-VALIDATE-DATA , 900-PRINT-SCREEN , 240-FETCH-RECORD , 250-ADD-RECORD , 260-DELETE-RECORD , 270-UPDATE-RECORD , 800-GO-TO-SCREEN , 895-CLEAR-DATA , 800-GO-TO-PERUSAL , 800-FILE-REQ-PAGE-BACK , 595-KEYS-DISPLAYED , 295-CHANGE-LOGICAL-NET , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 15 PERFORM ONE OF 420-REQUEST-DATA , 423-DELETE-DATA , 900-PRINT-SCREEN , 425-NEXT-PAGE , 800-SET-NEXT-VALID-OVERLAY , 800-PERUSAL-PAGE-BACK , 590-KEYS-DISPLAYED , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS. #DELETE 00290C0T/00290C0U 200-GET-DATA #ADD 00307C09 200-ACCEPT-SCREEN IF WS-OVERLAY = 8 PERFORM 200-ACCEPT-SCREEN-OVERLAY-8 ELSE IF WS-OVERLAY = 9 PERFORM 200-ACCEPT-SCREEN-OVERLAY-9 ELSE IF WS-OVERLAY = 10 PERFORM 200-ACCEPT-SCREEN-OVERLAY-10 ELSE IF WS-OVERLAY = 11 PERFORM 200-ACCEPT-SCREEN-OVERLAY-11 ELSE IF WS-OVERLAY = 12 PERFORM 200-ACCEPT-SCREEN-OVERLAY-12 ELSE IF WS-OVERLAY = 13 PERFORM 200-ACCEPT-SCREEN-OVERLAY-13 ELSE IF WS-OVERLAY = 14 PERFORM 200-ACCEPT-SCREEN-OVERLAY-14 ELSE IF WS-OVERLAY = 15 PERFORM 200-ACCEPT-SCREEN-OVERLAY-15 ELSE #DELETE 00307C0A 200-ACCEPT-SCREEN #ADD 00319C04 200-ACCEPT-SCREEN IF WS-OVERLAY = 52 PERFORM 200-ACCEPT-SCREEN-OVERLAY-52 ELSE #ADD 00360G0G 200-ACCEPT-SCREEN-OVERLAY-7 200-ACCEPT-SCREEN-OVERLAY-8. ACCEPT SC-MAIN, OVERLAY-8 UNTIL ENTER-KEY, PRINT-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY7, CLEAR-KEY, FKEY9, FKEY11, FKEY12, FKEY13 EXIT-KEY, ESCAPE ( FKEY6, FKEY7, FKEY14 THRU FKEY15, SFKEY1 THRU SFKEY8 SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-9. ACCEPT SC-MAIN, OVERLAY-9 UNTIL ENTER-KEY, FKEY4, PRINT-KEY, FKEY6, FKEY9, FKEY11, FKEY12, EXIT-KEY ESCAPE ( FKEY2 FKEY3, FKEY5, FKEY7, FKEY8, FKEY13 THRU FKEY15 SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #ADD 00360G0H 200-ACCEPT-SCREEN-OVERLAY-7 200-ACCEPT-SCREEN-OVERLAY-10. ACCEPT SC-MAIN, OVERLAY-10 UNTIL ENTER-KEY, PRINT-KEY, FKEY3, FKEY4, FKEY5, FKEY7, CLEAR-KEY, FKEY9, FKEY11, FKEY12, FKEY13, EXIT-KEY, ESCAPE ( FKEY2 FKEY6, FKEY7, FKEY14 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-11. ACCEPT SC-MAIN, OVERLAY-11 UNTIL ENTER-KEY, FKEY4, PRINT-KEY, FKEY6, FKEY9, FKEY11, FKEY12, EXIT-KEY, ESCAPE ( FKEY2 FKEY3, FKEY5, FKEY7, FKEY8, FKEY13 THRU FKEY15 SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-12. ACCEPT SC-MAIN, OVERLAY-12 UNTIL ENTER-KEY, PRINT-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY7, CLEAR-KEY, FKEY9, FKEY11, FKEY12, FKEY13 EXIT-KEY, ESCAPE ( FKEY6, FKEY7, FKEY14 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-13. ACCEPT SC-MAIN, OVERLAY-13 UNTIL ENTER-KEY, FKEY4, PRINT-KEY, FKEY6, FKEY9, FKEY11, FKEY12, EXIT-KEY, ESCAPE ( FKEY2 FKEY3, FKEY5, FKEY7, FKEY8, FKEY13 THRU FKEY15 SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-14. ACCEPT SC-MAIN, OVERLAY-14 UNTIL ENTER-KEY, PRINT-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY7, CLEAR-KEY, FKEY9, FKEY11, FKEY12, FKEY13 EXIT-KEY, ESCAPE (FKEY6, FKEY7, FKEY14 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-15. ACCEPT SC-MAIN, OVERLAY-15 UNTIL ENTER-KEY, FKEY4, PRINT-KEY, FKEY6, FKEY9, FKEY11, FKEY12, EXIT-KEY, ESCAPE ( FKEY2 FKEY3, FKEY5, FKEY7, FKEY8, FKEY13 THRU FKEY15 SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #ADD 00384G08 200-ACCEPT-SCREEN-OVERLAY-51 200-ACCEPT-SCREEN-OVERLAY-52. ACCEPT SC-MAIN, OVERLAY-52 UNTIL ( ENTER-KEY, FKEY2 THRU FKEY9, FKEY11 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15 ), PRINT-KEY, EXIT-KEY, ESCAPE ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #REPLACE 00408N04/00408N04 OFFSET 0 240-FETCH-RECORD MOVE "MCC103 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 8 MOVE "MCC104 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 12 MOVE "MCC107 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 14 MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST. #DELETE 00408N05 240-FETCH-RECORD #ADD 00411F00 240-FETCH-RECORD PERFORM 575-SAVE-RECORD #ADD 00411F03 240-FETCH-RECORD PERFORM 400-MOVE-RECORD. #REPLACE 00421H01/00421H01 OFFSET 0 250-ADD-RECORD MOVE "MCC103 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 8 MOVE "MCC104 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 10 MOVE "MCC106 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 12 MOVE "MCC107 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 14 MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST. #ADD 00424F00 250-ADD-RECORD PERFORM 575-SAVE-RECORD #ADD 00424F03 250-ADD-RECORD PERFORM 400-MOVE-RECORD. #REPLACE 00431H04/00431H04 OFFSET 0 260-DELETE-RECORD MOVE "MCC103 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 8 MOVE "MCC104 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 10 MOVE "MCC106 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 12 MOVE "MCC107 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 14 MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST. #REPLACE 00441C04/00441C04 OFFSET 0 270-UPDATE-RECORD MOVE "MCC105 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 8 MOVE "MCC104 " TO FILE-NAME OF FRQST OF PATH-RQST MOVE 1 TO FILE-UPDT-CDE OF FRQST ELSE IF WS-OVERLAY = 10 MOVE "MCC106 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 12 MOVE "MCC107 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 14 MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST. #ADD 00444F00 270-UPDATE-RECORD PERFORM 575-SAVE-RECORD #ADD 00444F01 270-UPDATE-RECORD PERFORM 575-FILL-A-MESSAGE #DELETE 00444F02 270-UPDATE-RECORD #ADD 00444F03 270-UPDATE-RECORD PERFORM 400-MOVE-RECORD PERFORM 990-DISPLAY-RESPONSE. #DELETE 00445 270-UPDATE-RECORD #REPLACE 00690H03 480-DATA-CHECK IF REG-IND1 OF MCC103 OF PATH-RQST NOT = "1" AND "A" AND #REPLACE 00690H0H 480-DATA-CHECK IF REG-IND1 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715H14/00715H15 480-DATA-CHECK IF REG-IND2 OF MCC103 OF PATH-RQST NOT = SPACES AND REG-IND1 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715H1G/00715H1H 480-DATA-CHECK IF REG-IND2 OF MCC103 OF PATH-RQST NOT = SPACES IF ( REG-IND1 OF MCC103 OF PATH-RQST = "1" AND REG-IND2 OF MCC103 OF PATH-RQST NOT = "A" AND "B" AND "C" AND "D" AND "E" ) #DELETE 00715H1I/00715I02 480-DATA-CHECK #REPLACE 00715H1K/00715H1K OFFSET 0 480-DATA-CHECK OR ( REG-IND1 OF MCC103 OF PATH-RQST = "A" AND REG-IND2 OF MCC103 OF PATH-RQST NOT = "B" AND "C" AND "D" AND "E" ) #DELETE 00715H1L/00715I07 480-DATA-CHECK #REPLACE 00715H1N 480-DATA-CHECK OR ( REG-IND1 OF MCC103 OF PATH-RQST = "B" AND #REPLACE 00715I0C 480-DATA-CHECK REG-IND2 OF MCC103 OF PATH-RQST NOT = "C" AND "D" #REPLACE 00715H1P 480-DATA-CHECK OR ( REG-IND1 OF MCC103 OF PATH-RQST = "C" AND #REPLACE 00715I0I/00715I0L 480-DATA-CHECK REG-IND2 OF MCC103 OF PATH-RQST NOT = "D" AND "E" ) OR ( REG-IND1 OF MCC103 OF PATH-RQST = "D" AND REG-IND2 OF MCC103 OF PATH-RQST NOT = "E" ) OR ( REG-IND1 OF MCC103 OF PATH-RQST = "E" ) #REPLACE 00715H22 480-DATA-CHECK IF REG-IND2 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715H2E 480-DATA-CHECK IF REG-IND2 OF MCC103 OF PATH-RQST NOT = SPACES #REPLACE 00715H44/00715H46 480-DATA-CHECK IF REG-IND3 OF MCC103 OF PATH-RQST NOT = SPACES AND ( REG-IND1 OF MCC103 OF PATH-RQST = SPACES OR REG-IND2 OF MCC103 OF PATH-RQST = SPACES ) #REPLACE 00715H4H/00715H4J 480-DATA-CHECK IF REG-IND3 OF MCC103 OF PATH-RQST NOT = SPACES IF ( REG-IND2 OF MCC103 OF PATH-RQST = "A" AND REG-IND3 OF MCC103 OF PATH-RQST NOT = "B" AND "C" AND #REPLACE 00715H4L 480-DATA-CHECK OR ( REG-IND2 OF MCC103 OF PATH-RQST = "B" AND #REPLACE 00715I0X 480-DATA-CHECK REG-IND3 OF MCC103 OF PATH-RQST NOT = "C" AND "D" #REPLACE 00715H4N 480-DATA-CHECK OR ( REG-IND2 OF MCC103 OF PATH-RQST = "C" AND #REPLACE 00715I13/00715I16 480-DATA-CHECK REG-IND3 OF MCC103 OF PATH-RQST NOT = "D" AND "E" ) OR ( REG-IND2 OF MCC103 OF PATH-RQST = "D" AND REG-IND3 OF MCC103 OF PATH-RQST NOT = "E" ) OR ( REG-IND2 OF MCC103 OF PATH-RQST = "E" ) #REPLACE 00715H50 480-DATA-CHECK IF REG-IND3 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715H5C 480-DATA-CHECK IF REG-IND3 OF MCC103 OF PATH-RQST NOT = SPACES #REPLACE 00715H71/00715H74 480-DATA-CHECK IF REG-IND4 OF MCC103 OF PATH-RQST NOT = SPACES AND ( REG-IND1 OF MCC103 OF PATH-RQST = SPACES OR REG-IND2 OF MCC103 OF PATH-RQST = SPACES OR REG-IND3 OF MCC103 OF PATH-RQST = SPACES ) #REPLACE 00715H7F/00715H7G 480-DATA-CHECK IF REG-IND4 OF MCC103 OF PATH-RQST NOT = SPACES IF ( REG-IND3 OF MCC103 OF PATH-RQST = "B" AND #REPLACE 00715I1C 480-DATA-CHECK REG-IND4 OF MCC103 OF PATH-RQST NOT = "C" AND "D" #REPLACE 00715H7I 480-DATA-CHECK OR ( REG-IND3 OF MCC103 OF PATH-RQST = "C" AND #REPLACE 00715I1I/00715I1L 480-DATA-CHECK REG-IND4 OF MCC103 OF PATH-RQST NOT = "D" AND "E" ) OR ( REG-IND3 OF MCC103 OF PATH-RQST = "D" AND REG-IND4 OF MCC103 OF PATH-RQST NOT = "E" ) OR ( REG-IND3 OF MCC103 OF PATH-RQST = "E" ) #REPLACE 00715H7V 480-DATA-CHECK IF REG-IND4 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715H87 480-DATA-CHECK IF REG-IND4 OF MCC103 OF PATH-RQST NOT = SPACES #REPLACE 00715H9W/00715HA0 480-DATA-CHECK IF REG-IND5 OF MCC103 OF PATH-RQST NOT = SPACES AND ( REG-IND1 OF MCC103 OF PATH-RQST = SPACES OR REG-IND2 OF MCC103 OF PATH-RQST = SPACES OR REG-IND3 OF MCC103 OF PATH-RQST = SPACES OR REG-IND4 OF MCC103 OF PATH-RQST = SPACES ) #REPLACE 00715HAB/00715HAC 480-DATA-CHECK IF REG-IND5 OF MCC103 OF PATH-RQST NOT = SPACES IF ( REG-IND4 OF MCC103 OF PATH-RQST = "C" AND #REPLACE 00715I1R/00715I1U 480-DATA-CHECK REG-IND5 OF MCC103 OF PATH-RQST NOT = "D" AND "E" ) OR ( REG-IND4 OF MCC103 OF PATH-RQST = "D" AND REG-IND5 OF MCC103 OF PATH-RQST NOT = "E" ) OR ( REG-IND4 OF MCC103 OF PATH-RQST = "E" ) #REPLACE 00715HAP 480-DATA-CHECK IF REG-IND5 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715HB1 480-DATA-CHECK IF REG-IND5 OF MCC103 OF PATH-RQST NOT = SPACES #REPLACE 00715HCQ/00715HCV 480-DATA-CHECK IF REG-IND6 OF MCC103 OF PATH-RQST NOT = SPACES AND ( REG-IND1 OF MCC103 OF PATH-RQST = SPACES OR REG-IND2 OF MCC103 OF PATH-RQST = SPACES OR REG-IND3 OF MCC103 OF PATH-RQST = SPACES OR REG-IND4 OF MCC103 OF PATH-RQST = SPACES OR REG-IND5 OF MCC103 OF PATH-RQST = SPACES ) #REPLACE 00715I20/00715I21 480-DATA-CHECK IF ( REG-IND6 OF MCC103 OF PATH-RQST NOT = SPACES AND REG-IND6 OF MCC103 OF PATH-RQST NOT = "E" ) #REPLACE 00715HDH 480-DATA-CHECK IF REG-IND6 OF MCC103 OF PATH-RQST = SPACES #REPLACE 00715HDT 480-DATA-CHECK IF REG-IND6 OF MCC103 OF PATH-RQST NOT = SPACES #ADD 00715HG0 480-DATA-CHECK IF WS-OVERLAY = 8 IF CARD-NUM-104 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CARD-NUM-8 IF MOVE-MESSAGE MOVE WC-ACCOUNT-NUMBER-MSG TO ERR-TXT SET NEW-CURSOR AT B-CARD-NUM-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 IF CARD-NUM-104 OF MCC104 OF PATH-RQST NOT = SPACES MOVE SPACES TO WS-ACCT-NUM MOVE CARD-NUM-104 OF MCC104 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-NOT-GOOD TO DIGIT-FLAG MOVE WC-GOOD TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 25 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CARD-NUM-8 IF MOVE-MESSAGE SET NEW-CURSOR AT B-CARD-NUM-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 IF CARD-NUM-104 OF MCC104 OF PATH-RQST NOT = SPACES MOVE SPACES TO WS-ACCT-NUM MOVE CARD-NUM-104 OF MCC104 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CARD-NUM-8 IF MOVE-MESSAGE MOVE WC-ACCOUNT-JUSTIFIED-MSG TO ERR-TXT SET NEW-CURSOR AT B-CARD-NUM-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF CUST-ID OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CUST-ID-8 IF MOVE-MESSAGE MOVE "PLEASE ENTER A CUSTOMER ID " TO ERR-TXT SET NEW-CURSOR AT B-CUST-ID-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" MOVE ENTRY-RSN OF MCC104 OF PATH-RQST TO MCC104-ENTRY-REASON IF NOT VALID-MCC104-ER MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ENTRY-REASON-8 IF MOVE-MESSAGE MOVE "MUST BE C, F, X OR O " TO ERR-TXT SET NEW-CURSOR AT B-ENTRY-REASON-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF CRD-PGM OF MCC104 OF PATH-RQST NOT = "CIR" AND "MBD" AND "MBE" AND "MCB" AND "MCC" AND "MCD" AND "MCE" AND "MCF" AND "MCG" AND "MCO" AND "MCP" AND "MCS" AND "MCT" AND "MCU" AND "MCW" AND "MDG" AND "MDO" AND "MDP" AND "MDR" AND "MDS" AND "MDU" AND "MEC" AND "MEO" AND "MIU" AND "MNS" AND "MPL" AND "MPP" AND "MSD" AND "MSI" AND "OTH" AND "PMC" AND "PMD" AND "PSC" AND "PSD" AND "SOL" AND "SWI" MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CRD-PGM-8 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID CARD PROGRAM " TO ERR-TXT SET NEW-CURSOR AT B-CRD-PGM-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 IF SECURITY-CDE OF FRQST OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-SECURITY-CODE-8 IF MOVE-MESSAGE MOVE "SECURITY CODE MUST BE ALL NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-SECURITY-CODE-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION1-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-NOT-GOOD AND ( (CNTRY1 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY1 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION1-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-NOT-GOOD AND PURG-DAT1 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION1-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND PURG-DAT1 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND ( (PURG-DAT1 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT1 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND PURG-DAT1 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT1 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY1 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY1 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY1-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY1-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION2-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-NOT-GOOD AND ( (CNTRY2 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY2 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION2-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-NOT-GOOD AND PURG-DAT2 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION2-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND PURG-DAT2 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND ((PURG-DAT2 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT2 OF MCC104 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND PURG-DAT2 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT2 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY2 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY2 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY2-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY2-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION3-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-NOT-GOOD AND ( (CNTRY3 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY3 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION3-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-NOT-GOOD AND PURG-DAT3 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION3-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND PURG-DAT3 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND ((PURG-DAT3 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT3 OF MCC104 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND PURG-DAT3 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT3 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY3 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY3 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY3-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY3-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION4-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-NOT-GOOD AND ( (CNTRY4 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY4 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION4-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-NOT-GOOD AND PURG-DAT4 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION4-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND PURG-DAT4 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND ((PURG-DAT4 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT4 OF MCC104 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND PURG-DAT4 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT4 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY4 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY4 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY4-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY4-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION5-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-NOT-GOOD AND ( (CNTRY5 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY5 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION5-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-NOT-GOOD AND PURG-DAT5 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION5-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND PURG-DAT5 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND ((PURG-DAT5 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT5 OF MCC104 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND PURG-DAT5 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT5 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY5 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY5 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY5-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY5-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION6-8 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-NOT-GOOD AND ( (CNTRY6 OF MCC104 OF PATH-RQST NOT = SPACES) OR (SUBCNTRY6 OF MCC104 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION6-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-NOT-GOOD AND PURG-DAT6 OF MCC104 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION6-8 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND PURG-DAT6 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-8 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND ((PURG-DAT6 OF MCC104 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT6 OF MCC104 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-8 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND PURG-DAT6 OF MCC104 OF PATH-RQST NUMERIC MOVE PURG-DAT6 OF MCC104 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-8 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-8 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-8 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 8 AND FILE-UPDT-CDE OF FRQST = "1" IF SUBCNTRY6 OF MCC104 OF FRQST OF PATH-RQST NOT = SPACES AND CNTRY6 OF MCC104 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CNTRY6-8 IF MOVE-MESSAGE MOVE "ENTER COUNTRY FIRST " TO ERR-TXT SET NEW-CURSOR AT B-CNTRY6-8 MOVE WC-NOT-GOOD TO FLAG-MOVE. #ADD 00715Q00 480-NUMERIC-CHECK / * PAYPASS-PAN BLANK IF WS-OVERLAY = 10 IF PAYPASS-PAN OF MCC106 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-PAN-10 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID PAYPASS PAN" TO ERR-TXT SET NEW-CURSOR AT B-PAYPASS-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS-PAN LEFT JUSTIFIED IF WS-OVERLAY = 10 IF PAYPASS-PAN OF MCC106 OF PATH-RQST NOT = SPACES MOVE SPACES TO WS-ACCT-NUM MOVE PAYPASS-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-PAN-10 IF MOVE-MESSAGE MOVE "PAYPASS PAN MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-PAYPASS-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS-PAN EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 10 IF PAYPASS-PAN OF MCC106 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE PAYPASS-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-PAN-10 IF MOVE-MESSAGE SET NEW-CURSOR AT B-PAYPASS-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAN BLANK IF WS-OVERLAY = 10 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PAN OF MCC106 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAN-10 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID PAN" TO ERR-TXT SET NEW-CURSOR AT B-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAN LEFT JUSTIFIED IF WS-OVERLAY = 10 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PAN OF MCC106 OF PATH-RQST NOT = SPACES MOVE PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PAN-10 IF MOVE-MESSAGE MOVE "PAN MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAN EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 10 IF ( ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND MOVE-MESSAGE AND PAN OF MCC106 OF PATH-RQST NOT = SPACES ) MOVE SPACES TO WS-ACCT-NUM MOVE PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAN-10 IF MOVE-MESSAGE SET NEW-CURSOR AT B-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * RPLMT-PAYPASS-PAN LEFT JUSTIFIED IF WS-OVERLAY = 10 IF RPLMT-PAYPASS-PAN OF MCC106 OF PATH-RQST NOT = SPACES MOVE RPLMT-PAYPASS-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-RPLMT-PAYPASS-PAN-10 IF MOVE-MESSAGE MOVE "REPLACEMENT PAYPASS PAN MUST BE LEFT JUSTIFI - "ED" TO ERR-TXT SET NEW-CURSOR AT B-RPLMT-PAYPASS-PAN-10 MOVE "N" TO FLAG-MOVE. * RPLMT-PAYPASS-PAN EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 10 IF RPLMT-PAYPASS-PAN OF MCC106 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE RPLMT-PAYPASS-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-RPLMT-PAYPASS-PAN-10 IF MOVE-MESSAGE SET NEW-CURSOR AT B-RPLMT-PAYPASS-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * RPLMT-PAN LEFT JUSTIFIED IF WS-OVERLAY = 10 IF RPLMT-PAN OF MCC106 OF PATH-RQST NOT = SPACES MOVE RPLMT-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-RPLMT-PAN-10 IF MOVE-MESSAGE MOVE "REPLACEMENT PAN MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-RPLMT-PAN-10 MOVE "N" TO FLAG-MOVE. * RPLMT-PAN EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 10 IF RPLMT-PAN OF MCC106 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE RPLMT-PAN OF MCC106 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-RPLMT-PAN-10 IF MOVE-MESSAGE SET NEW-CURSOR AT B-RPLMT-PAN-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * VALIDATE CARD EXPIRATION DATE NUMERIC IF WS-OVERLAY = 10 IF CRD-EXP-DAT OF MCC106 OF PATH-RQST NOT = SPACES AND CRD-EXP-DAT OF MCC106 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-10 IF MOVE-MESSAGE MOVE "MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-10 MOVE "N" TO FLAG-MOVE. * VALIDATE CARD EXPIRATION DATE (YYMM) IF WS-OVERLAY = 10 IF CRD-EXP-DAT OF MCC106 OF PATH-RQST NUMERIC MOVE CRD-EXP-DAT OF MCC106 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-10 IF MOVE-MESSAGE MOVE "CARD EXPIRATION DATE MUST BE 'YYMM' FORM - "AT" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-10 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CRD-EXP-DAT-10 IF MOVE-MESSAGE MOVE "CARD EXPIRATION DATE MUST BE 'YYMM' FORM - "AT" TO ERR-TXT SET NEW-CURSOR AT B-CRD-EXP-DAT-10 MOVE "N" TO FLAG-MOVE. * SECURITY CODE IF WS-OVERLAY = 10 IF SECURITY-CDE OF FRQST OF PATH-RQST NOT NUMERIC AND SECURITY-CDE OF FRQST OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-SECURITY-CDE-10 IF MOVE-MESSAGE MOVE "SECURITY CODE MUST BE ALL NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-SECURITY-CDE-10 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. / * LOW ACCOUNT NUMBER BLANK IF WS-OVERLAY = 12 IF LOW-PAN OF MCC107 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-LOW-PAN-12 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID LOW ACCOUNT NUMBER" TO ERR-TXT SET NEW-CURSOR AT B-LOW-PAN-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * LOW ACCOUNT NUMBER LEFT JUSTIFIED IF WS-OVERLAY = 12 IF LOW-PAN OF MCC107 OF PATH-RQST NOT = SPACES MOVE LOW-PAN OF MCC107 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-LOW-PAN-12 IF MOVE-MESSAGE MOVE "LOW ACCOUNT NUMBER MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-LOW-PAN-12 MOVE "N" TO FLAG-MOVE. * LOW ACCOUNT NUMBER EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 12 IF LOW-PAN OF MCC107 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE LOW-PAN OF MCC107 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-LOW-PAN-12 IF MOVE-MESSAGE SET NEW-CURSOR AT B-LOW-PAN-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * HIGH ACCOUNT NUMBER LEFT JUSTIFIED IF WS-OVERLAY = 12 IF ( ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" OR FILE-UPDT-CDE OF FRQST = "3" ) AND HIGH-PAN OF MCC107 OF PATH-RQST NOT = SPACES ) MOVE HIGH-PAN OF MCC107 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-HIGH-PAN-12 IF MOVE-MESSAGE MOVE "HIGH ACCOUNT NUMBER MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-HIGH-PAN-12 MOVE "N" TO FLAG-MOVE. * HIGH ACCOUNT NUMBER EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 12 IF ( ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" OR FILE-UPDT-CDE OF FRQST = "3" ) AND HIGH-PAN OF MCC107 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE ) MOVE SPACES TO WS-ACCT-NUM MOVE HIGH-PAN OF MCC107 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-HIGH-PAN-12 IF MOVE-MESSAGE SET NEW-CURSOR AT B-HIGH-PAN-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * HIGH ACCOUNT NUMBER > LOW ACCOUNT NUMBER IF WS-OVERLAY = 12 IF ( ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" OR FILE-UPDT-CDE OF FRQST = "3" ) AND HIGH-PAN OF MCC107 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE ) IF HIGH-PAN OF MCC107 OF PATH-RQST < LOW-PAN OF MCC107 OF PATH-RQST OR HIGH-PAN OF MCC107 OF PATH-RQST = LOW-PAN OF MCC107 OF PATH-RQST MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-HIGH-PAN-12 IF MOVE-MESSAGE MOVE "MUST BE SPACES OR GREATER THAN LOW ACCOUNT - "NUMBER" TO ERR-TXT SET NEW-CURSOR AT B-HIGH-PAN-12 MOVE "N" TO FLAG-MOVE. * HIGH ACCOUNT NUMBER MUST BE SPACES OR = TO LOW ACCOUNT NUMBER IF WS-OVERLAY = 12 IF ( FILE-UPDT-CDE OF FRQST = "5" AND HIGH-PAN OF MCC107 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE ) IF HIGH-PAN OF MCC107 OF PATH-RQST NOT = LOW-PAN OF MCC107 OF PATH-RQST MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-LOW-PAN-12 IF MOVE-MESSAGE MOVE "MUST BE SPACES OR EQUAL TO LOW ACCOUNT NUMBE - "R" TO ERR-TXT SET NEW-CURSOR AT B-HIGH-PAN-12 MOVE "N" TO FLAG-MOVE. * ACCOUNT CATEGORY IF WS-OVERLAY = 12 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND ACCT-CAT OF MCC107 OF PATH-RQST NOT = "B" MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-ACCT-CAT-12 IF MOVE-MESSAGE MOVE "ACCOUNT CATEGORY MUST BE 'B'" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-CAT-12 MOVE "N" TO FLAG-MOVE. * PURGE DATE BLANK IF WS-OVERLAY = 12 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PURGE-DAT OF MCC107 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "PURGE DATE IS REQUIRED" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PURGE DATE NUMERIC IF WS-OVERLAY = 12 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PURGE-DAT OF MCC107 OF PATH-RQST NOT = SPACES AND PURGE-DAT OF MCC107 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "PURGE DATE MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE "N" TO FLAG-MOVE. * PURGE DATE CHECK CENTURY, YEAR, MONTH, DAY IF WS-OVERLAY = 12 AND ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PURGE-DAT OF MCC107 OF PATH-RQST NUMERIC MOVE PURGE-DAT OF MCC107 OF PATH-RQST TO WS-DATE-CHECK-4 IF NOT VALID-CENTURY-4 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "INVALID CENTURY" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-YEAR-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "INVALID YEAR" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "INVALID MONTH" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-12 IF MOVE-MESSAGE MOVE "INVALID DAY" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PROGRAM ID IF WS-OVERLAY = 12 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PROG-ID OF MCC107 OF PATH-RQST = SPACES MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PROGRAM-ID-12 IF MOVE-MESSAGE MOVE "PROGRAM ID IS REQUIRED" TO ERR-TXT SET NEW-CURSOR AT B-PROGRAM-ID-12 MOVE "N" TO FLAG-MOVE. * SECURITY CODE IF WS-OVERLAY = 12 IF SECURITY-CDE OF FRQST OF PATH-RQST NOT NUMERIC AND SECURITY-CDE OF FRQST OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-SECURITY-CDE-12 IF MOVE-MESSAGE MOVE "SECURITY CODE MUST BE ALL NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-SECURITY-CDE-12 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. / * ACCOUNT NUMBER BLANK IF WS-OVERLAY = 14 IF ACCT-NUM OF MCC108 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-NUM-14 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID ACCOUNT NUMBER" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-NUM-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * ACCOUNT NUMBER LEFT JUSTIFIED IF WS-OVERLAY = 14 IF ACCT-NUM OF MCC108 OF PATH-RQST NOT = SPACES MOVE ACCT-NUM OF MCC108 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-ACCT-NUM-14 IF MOVE-MESSAGE MOVE "ACCOUNT NUMBER MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-NUM-14 MOVE "N" TO FLAG-MOVE. * ACCOUNT NUMBER EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 14 IF ACCT-NUM OF MCC108 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE ACCT-NUM OF MCC108 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-NUM-14 IF MOVE-MESSAGE SET NEW-CURSOR AT B-ACCT-NUM-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * ACCOUNT CATEGORY IF WS-OVERLAY = 14 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND ( ACCT-CAT OF MCC108 OF PATH-RQST NOT = "C" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = "D" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = "G" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = "H" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = "I" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = "J" ) MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-ACCT-CAT-14 IF MOVE-MESSAGE MOVE "ACCOUNT CATEGORY MUST BE 'C','D','G','H','I' - ", OR 'J'" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-CAT-14 MOVE "N" TO FLAG-MOVE. * PRODUCT CODE IF WS-OVERLAY = 14 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PROD-CDE OF MCC108 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PROD-CDE-14 IF MOVE-MESSAGE MOVE "PRODUCT CODE IS REQUIRED" TO ERR-TXT SET NEW-CURSOR AT B-PROD-CDE-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PURGE DATE BLANK IF WS-OVERLAY = 14 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PURGE-DAT OF MCC108 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "ENTER A DATE" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PURGE DATE NUMERIC IF WS-OVERLAY = 14 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) AND PURGE-DAT OF MCC108 OF PATH-RQST NOT = SPACES AND PURGE-DAT OF MCC108 OF PATH-RQST NOT NUMERIC MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE "N" TO FLAG-MOVE. * PURGE DATE CHECK CENTURY, YEAR, MONTH, DAY IF WS-OVERLAY = 14 AND ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF PURGE-DAT OF MCC108 OF PATH-RQST NUMERIC MOVE PURGE-DAT OF MCC108 OF PATH-RQST TO WS-DATE-CHECK-4 IF NOT VALID-CENTURY-4 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "INVALID CENTURY" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-YEAR-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "INVALID YEAR" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "INVALID MONTH" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY-4 MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT-14 IF MOVE-MESSAGE MOVE "INVALID DAY" TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * SECURITY CODE IF WS-OVERLAY = 14 IF SECURITY-CDE OF FRQST OF PATH-RQST NOT NUMERIC AND SECURITY-CDE OF FRQST OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-SECURITY-CDE-14 IF MOVE-MESSAGE MOVE "SECURITY CODE MUST BE ALL NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-SECURITY-CDE-14 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. #ADD 01015 400-SELECT-FUNCTION 400-SELECT-MCC102-ACCOUNTS, 300-NULL-ENTRY, 400-SELECT-MCC105-ACCOUNTS, 300-NULL-ENTRY, 400-SELECT-MCC103-ACCOUNTS, 300-NULL-ENTRY, #DELETE 01016 /01024 400-SELECT-FUNCTION #REPLACE 01025 /01025 OFFSET 0 400-SELECT-FUNCTION 400-SELECT-MCC104-ACCOUNTS, 300-NULL-ENTRY, 400-SELECT-MCC106-ACCOUNTS, 300-NULL-ENTRY, 400-SELECT-MCC107-ACCOUNTS, 300-NULL-ENTRY, 400-SELECT-MCC108-ACCOUNTS, 300-NULL-ENTRY, 300-NULL-ENTRY, 300-NULL-ENTRY, 300-NULL-ENTRY, 300-NULL-ENTRY, #DELETE 01026 /01033 400-SELECT-FUNCTION #ADD 01036 400-SELECT-FUNCTION 400-MOVE-RECORD. IF REG-IND1 OF MCC104 OF PATH-RQST = "1" MOVE "Y" TO WS-REG-IND1 ELSE MOVE "N" TO WS-REG-IND1. IF REG-IND2 OF MCC104 OF PATH-RQST = "A" MOVE "Y" TO WS-REG-IND2 ELSE MOVE "N" TO WS-REG-IND2. IF REG-IND3 OF MCC104 OF PATH-RQST = "B" MOVE "Y" TO WS-REG-IND3 ELSE MOVE "N" TO WS-REG-IND3. IF REG-IND4 OF MCC104 OF PATH-RQST = "C" MOVE "Y" TO WS-REG-IND4 ELSE MOVE "N" TO WS-REG-IND4. IF REG-IND5 OF MCC104 OF PATH-RQST = "D" MOVE "Y" TO WS-REG-IND5 ELSE MOVE "N" TO WS-REG-IND5. IF REG-IND6 OF MCC104 OF PATH-RQST = "E" MOVE "Y" TO WS-REG-IND6 ELSE MOVE "N" TO WS-REG-IND6. #ADD 01048C07 400-SELECT-MCC103-ACCOUNTS 400-SELECT-MCC104-ACCOUNTS. MOVE 2 TO WS-PAGE-NUMBER. MOVE 8 TO WS-OVERLAY. PERFORM 990-DISPLAY-MSG. PERFORM 595-CLEAR-DATA. PERFORM 570-DISPLAY-OVERLAY. 400-SELECT-MCC106-ACCOUNTS. MOVE 2 TO WS-PAGE-NUMBER. MOVE 10 TO WS-OVERLAY. PERFORM 990-DISPLAY-MSG. PERFORM 595-CLEAR-DATA. PERFORM 570-DISPLAY-OVERLAY. 400-SELECT-MCC107-ACCOUNTS. MOVE 2 TO WS-PAGE-NUMBER. MOVE 12 TO WS-OVERLAY. PERFORM 990-DISPLAY-MSG. PERFORM 595-CLEAR-DATA. PERFORM 570-DISPLAY-OVERLAY. 400-SELECT-MCC108-ACCOUNTS. MOVE 2 TO WS-PAGE-NUMBER. MOVE 14 TO WS-OVERLAY. PERFORM 990-DISPLAY-MSG. PERFORM 595-CLEAR-DATA. PERFORM 570-DISPLAY-OVERLAY. #ADD 01138C08 570-DISPLAY-OVERLAY ELSE IF FILE-NAME OF BNRLF = "MCC104 " PERFORM 570-DISPLAY-OVERLAY-9 #ADD 01138J06 570-DISPLAY-OVERLAY IF WS-OVERLAY = 8 PERFORM 570-DISPLAY-OVERLAY-8 ELSE IF WS-OVERLAY = 9 PERFORM 570-DISPLAY-OVERLAY-9 ELSE IF WS-OVERLAY = 10 PERFORM 570-DISPLAY-OVERLAY-10 ELSE IF FILE-NAME OF BNRLF = "MCC106" PERFORM 570-DISPLAY-OVERLAY-11 ELSE IF WS-OVERLAY = 11 PERFORM 570-DISPLAY-OVERLAY-11 ELSE IF WS-OVERLAY = 12 PERFORM 570-DISPLAY-OVERLAY-12 ELSE IF FILE-NAME OF BNRLF = "MCC107" PERFORM 570-DISPLAY-OVERLAY-13 ELSE IF WS-OVERLAY = 13 PERFORM 570-DISPLAY-OVERLAY-13 ELSE IF WS-OVERLAY = 14 PERFORM 570-DISPLAY-OVERLAY-14 ELSE IF FILE-NAME OF BNRLF = "MCC108" PERFORM 570-DISPLAY-OVERLAY-15 ELSE IF WS-OVERLAY = 15 PERFORM 570-DISPLAY-OVERLAY-15 ELSE #ADD 01200C0Y 570-DISPLAY-OVERLAY-7 570-DISPLAY-OVERLAY-8. MOVE "MCC104 FILE REQUEST " TO WS-TITLE. MOVE " F12-HELP " TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-8 AT OVERLAY-AREA. DISPLAY OVERLAY-8. SET NEW-CURSOR AT B-CARD-NUM-8. 570-DISPLAY-OVERLAY-9. MOVE "FILE REQUEST PERUSAL " TO WS-TITLE. MOVE "F1-READ F4-DELETE F6-READ NEXT F10-PRINT F1 - "6-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-9 AT OVERLAY-AREA. DISPLAY OVERLAY-9. MOVE 3 TO WS-PAGE-NUMBER. MOVE 9 TO WS-OVERLAY. SET NEW-CURSOR AT B-PERUSE-DAT-9. 570-DISPLAY-OVERLAY-10. MOVE "MCC106 FILE REQUEST " TO WS-TITLE. MOVE "F1-ENTER F3-ADD F4- DELETE F5-UPDATE F12-HELP - "F16-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-10 AT OVERLAY-AREA. DISPLAY OVERLAY-10. SET NEW-CURSOR AT B-PAYPASS-PAN-10. 570-DISPLAY-OVERLAY-11. MOVE "FILE REQUEST PERUSAL " TO WS-TITLE. MOVE "F1-READ F4-DELETE F6-READ NEXT F10-PRINT F1 - "6-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-11 AT OVERLAY-AREA. DISPLAY OVERLAY-11. MOVE 3 TO WS-PAGE-NUMBER. MOVE 11 TO WS-OVERLAY. SET NEW-CURSOR AT B-PERUSE-DAT-11. 570-DISPLAY-OVERLAY-12. MOVE "MCC107 FILE REQUEST " TO WS-TITLE. MOVE "F1-ENTER F2-READ F3-ADD F4- DELETE F5-UPDATE F1 - "2-HELP F16-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-12 AT OVERLAY-AREA. DISPLAY OVERLAY-12. SET NEW-CURSOR AT B-LOW-PAN-12. 570-DISPLAY-OVERLAY-13. MOVE "FILE REQUEST PERUSAL " TO WS-TITLE. MOVE "F1-READ F4-DELETE F6-READ NEXT F10-PRINT F1 - "6-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-13 AT OVERLAY-AREA. DISPLAY OVERLAY-13. MOVE 3 TO WS-PAGE-NUMBER. MOVE 13 TO WS-OVERLAY. SET NEW-CURSOR AT B-PERUSE-DAT-13. 570-DISPLAY-OVERLAY-14. MOVE "MCC108 FILE REQUEST " TO WS-TITLE. MOVE "F1-ENTER F2-READ F3-ADD F4- DELETE F5-UPDATE F1 - "2-HELP F16-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-14 AT OVERLAY-AREA. DISPLAY OVERLAY-14. SET NEW-CURSOR AT B-ACCT-NUM-14. 570-DISPLAY-OVERLAY-15. MOVE "FILE REQUEST PERUSAL " TO WS-TITLE. MOVE "F1-READ F4-DELETE F6-READ NEXT F10-PRINT F1 - "6-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-15 AT OVERLAY-AREA. DISPLAY OVERLAY-15. MOVE 3 TO WS-PAGE-NUMBER. MOVE 15 TO WS-OVERLAY. SET NEW-CURSOR AT B-PERUSE-DAT-15. #ADD 01200K08 575-SEND-RLF-MSG 575-SAVE-RECORD. IF WS-REG-IND1 = "Y" MOVE "1" TO REG-IND1 OF MCC104 OF PATH-RQST. IF WS-REG-IND2 = "Y" MOVE "A" TO REG-IND2 OF MCC104 OF PATH-RQST. IF WS-REG-IND3 = "Y" MOVE "B" TO REG-IND3 OF MCC104 OF PATH-RQST. IF WS-REG-IND4 = "Y" MOVE "C" TO REG-IND4 OF MCC104 OF PATH-RQST. IF WS-REG-IND5 = "Y" MOVE "D" TO REG-IND5 OF MCC104 OF PATH-RQST. IF WS-REG-IND6 = "Y" MOVE "E" TO REG-IND6 OF MCC104 OF PATH-RQST. #ADD 01240 580-KEYS-DISPLAYED 571-KEYS-DISPLAYED. MOVE WS-OVERLAY TO SAVE-OVERLAY. MOVE 52 TO WS-OVERLAY. MOVE "ANY FUNCTION KEY EXCEPT SF9-SF16, OR F16 RETURNS. F10 - "PRINTS AND RETURNS" TO WS-VARIABLE-INSTRUCTIONS. ?IF 1 MOVE "ANY FUNCTION KEY EXCEPT PF10, PF16, PA2 RETURNS. F10 P - "RINTS AND RETURNS" TO WS-VARIABLE-INSTRUCTIONS. ?ENDIF 1 TURN PROTECTED IN SC-DATA. DISPLAY OVERLAY OVERLAY-52 AT OVERLAY-AREA. DISPLAY OVERLAY-52. PERFORM 581-SPACE-ZERO-DISPLAY. PERFORM 200-ACCEPT-SCREEN. PERFORM ONE OF 581-RETURN-OVERLAY, 900-PRINT-SCREEN-RETURN, 800-EXIT, 800-QUIT, DEPENDING ON TERMINATION-STATUS. #ADD 01319 595-CLEAR-DATA MOVE 15 TO WS-OVERLAY-MAX. MOVE "N" TO WS-REG-IND1. MOVE "N" TO WS-REG-IND2. MOVE "N" TO WS-REG-IND3. MOVE "N" TO WS-REG-IND4. MOVE "N" TO WS-REG-IND5. MOVE "N" TO WS-REG-IND6. #REPLACE 01323J02/01323J02 OFFSET 0 595-SCREEN-INIT MOVE 15 TO WS-OVERLAY-MAX. MOVE "N" TO WS-REG-IND1. MOVE "N" TO WS-REG-IND2. MOVE "N" TO WS-REG-IND3. MOVE "N" TO WS-REG-IND4. MOVE "N" TO WS-REG-IND5. MOVE "N" TO WS-REG-IND6. #REPLACE 01431C02 800-SET-OVERLAY IF WS-SAVE-OVERLAY = 2 OR 3 OR 4 OR 8 OR 10 OR 12 OR 14 #REPLACE 01472J08/01472J08 OFFSET 0 800-GO-TO-PERUSAL MOVE 7 TO WS-OVERLAY ELSE IF WS-OVERLAY = 8 MOVE 9 TO WS-OVERLAY ELSE IF WS-OVERLAY = 10 MOVE 11 TO WS-OVERLAY ELSE IF WS-OVERLAY = 12 MOVE 13 TO WS-OVERLAY ELSE IF WS-OVERLAY = 14 MOVE 15 TO WS-OVERLAY. #ENDSCN = SW0B096 !#CMP2.28 02/13/07 SVBNRLFS6009 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6009 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6009 * ******************************************************************************** #SCN = SW0B098 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00005I0L * 13FEB2007 MURUGIS * Symptom: Banknet MCC104 Accounts Management File * Enhancement. * Problem: None. * Fix: Added support for MCC104 Accounts Management File * Enhancement. * Modified section: FILE SECTION * Dependency: BA10SC04 subvolume. Apply fix to BNETDDLS, * BNETLIBS, BNETS, BRL0207M, BRL0207R, BRL0207S, * RQBNRLFS, SCRNBRLF, SVBNRLFS, and Run Make. Make * the BNRLF conversion using BRL0207M. Run the BNRLF * conversion using BRL0207R. Replace BNETMAN and * BNETUPDT. * Reference: WO #061010-02 * 13FEB2007 SWIFTD * Symptom: Banknet Release 07.1 Mandates. * Problem: None. * Fix: Added support for PayPass Mapping Service data. * Modified section: FILE SECTION * Dependency: BA10SC04 subvolume. New files: BRL0207M, * BRL0207R, BRL0207S, ILB0207M, ILB0207R and * ILB0207S. Apply fixes to BNETDDLS, BNETG, * BNETLIBS, BNETS, RQBNRLFS, SCRNBRLF and SVBNRLFS. * Run Make. Make the BNRLF conversion using * BRL0207M. Run the BNRLF conversion using * BRL0207R. Make the ILF conversion using ILB0207M. * Run the ILF conversion using ILB0207R. Replace * BNETLOGM, BNETMAN and BNETUPDT. * Reference: WO #061120-01. #REPLACE 00165I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00185D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00214H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00214I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00218I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00238D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00267H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00267I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00271I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00291D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00320H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00320I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00324I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00344D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00373H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00373I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00377I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00397D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00426H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00426I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00430I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00450D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00479H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00479I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00483I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00503D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00532H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00532I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00536I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00556D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00585H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00585I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00589I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00609D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00638H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00638I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #REPLACE 00642I01 DATA DIVISION RECORD CONTAINS 380 CHARACTERS. #REPLACE 00662D01 DATA DIVISION 02 WS-BRLF-TXT PIC X(340). #ADD 00691H03 DATA DIVISION 03 WS-PAYPASS-PAN PIC X(19). 03 WS-RPLMT-PAN PIC X(19). 03 WS-RPLMT-PAYPASS-PAN PIC X(19). #REPLACE 00691I06 DATA DIVISION 03 WS-FILLER1 PIC X(134). #ENDSCN = SW0B098 !#CMP2.28 03/08/07 ILB0207S6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0207S ILB0207S 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0207S ILB0207S 6000 * ******************************************************************************** #SCN = SW0B168 , FILEID = ILB0207S #VOLUME = $ROOK.SW60BNET #FILE = ILB0207S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00039 ! ! 08MAR2007 SADERC ! Symptom: The new field DE 67 and SEs 33 and 38 of DE 48 ! are not being initialized to spaces in the new ! record format. ! Problem: The interface is moving special characters to the ! new fields. ! Fix: Modified the code to move spaces to DE 67 and SEs ! 33 and 38 of DE 48. ! Modified proc: convert ! Dependency: Apply fixes to ILB0207M and ILB0207S. Make the ILF ! conversion using ILB0207M. ! Reference: Case #431110 #REPLACE 00509 CONVERT dest ':=' " "; #REPLACE 00541 CONVERT dest ':=' " "; #ENDSCN = SW0B168 !#CMP2.28 03/08/07 ILB0207M6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0207M ILB0207M 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0207M ILB0207M 6000 * ******************************************************************************** #SCN = SW0B169 , FILEID = ILB0207M #VOLUME = $ROOK.SW60BNET #FILE = ILB0207M #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6000 #NEWVERSION = 6001 #ADD 0039 # # 08MAR2007 SADERC # Symptom: During the ilb0207s Make a Bind error #49 (Multiple # MAIN entry points are not allowed) was generated. # Problem: When a fix was added to ilb0207s, Fixer modified the # MAIN proc name to reflect the fix. This caused an # error since the first file added (=basc04_cnvo) during # the Bind process has a different Main proc name. # Fix: Modified the Make file to only bind the data from the # the =basc04_cnvo object file. # Dependency: Apply fixes to ILB0207M and ILB0207S. Make the ILF # conversion using ILB0207M. # Reference: Case #431110 #REPLACE 0106 /0107 = #APPEND :var add data * from =basc04_cnvo # 0106 = #APPEND :var add code * from =swbnet_ilb0207o # 0107 = #APPEND :var select search =basc04_cnvo #ENDSCN = SW0B169 !#CMP2.28 03/12/07 BNETLIBS60134FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60134 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60134 * ******************************************************************************** #SCN = SW0B175 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w000271C ! 09MAR2007 ENGELK ! Symptom: Acquired contactless mag stripe transactions are always ! treated as if they originated at self-service terminals. ! Problem: Contactless mag stripe transactions can also originate ! at attended terminals. For acquired contactless mag ! stripe transactions, if the point of service data token ! were not found, DE-61, SE-11 would not be set correctly. ! Fix: Eliminated code which hard-coded DE-61 (point of service ! data) SE-10 (Cardholder-activated terminal level) to ! "2", Authorized Level 2 CAT: Self-service terminal, for ! acquired contactless mag stripe and contactless m-chip ! transactions. If the point of service data (C4) token ! is present, DE-61, SE-10 will instead be set to the ! value contained in its cardholder activated terminal ! indicator. Added code to set DE-61, SE-11 (POS Card ! Data Terminal Input Capability) based upon the pstm POS ! entry mode for acquired contactless transactions prior ! to the interface searching for the point of service data ! token. Eliminated code which hard-coded the cardholder ! activated terminal indicator in the point of service ! data token for issuer contactless transactions. The C4 ! token's cardholder activated terminal indicator will be ! set to DE-61, SE-10 (cardholder-activated terminal ! level) for issuer contactless transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #430921 #ADD m0065902 PSTM^FRMT^0200^TO^XRQST movd( sem.pos^entry^mde, pan^auto^cntctlss^m^chip ); movd( sem.ntl^pos^data.cond^cde.byte[10], cntctlss^m^chip ); #DELETE m0065903 PSTM^FRMT^0200^TO^XRQST #ADD m0065907 PSTM^FRMT^0200^TO^XRQST movd( sem.pos^entry^mde, pan^auto^cntctlss^mag^stripe ); movd( sem.ntl^pos^data.cond^cde.byte[10], cntctlss^mag^stripe ); #DELETE m0065908 PSTM^FRMT^0200^TO^XRQST #DELETE m006590E/m006590F PSTM^FRMT^0200^TO^XRQST #DELETE m006590M/m006590N PSTM^FRMT^0200^TO^XRQST #DELETE m0359404/m0359405 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE m035940E/m035940F SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0B175 !#CMP2.28 03/16/07 BNETLIBS60135FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60135 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60135 * ******************************************************************************** #SCN = SW0B187 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x000270T ! 16MAR2007 frederr ! Symptom: Valid gambling transactions are being denied by the ! interface. ! Problem: The interface is denying all gambling transactions that ! do not contain a CVC2 value. Only non face to face ! gambling transactions require a CVC2 value (per ! MasterCard). Face to face gambling transactions that do ! not contain a CVC2 value should be forwarded on to ! MasterCard. ! Fix: Modified the interface to check DE-61 (point of service ! data) to figure out if a gambling transaction is face to ! face. If this is a gambling transaction but not face to ! face, then require CVC2 to be present in the request ! message. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #430922 #ADD K007000W PSTM^FRMT^0200^TO^XRQST if sem.merch^typ = "7995" and ( sem.ntl^pos^data.cond^cde.byte[ 0 ] <> "0" or sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "0" or sem.ntl^pos^data.cond^cde.byte[ 4 ] <> "0" ) and sem.addl^data.info.visa^cvv2^sub^fld^92.tag^data = [ $len( sem.addl^data.info.visa^cvv2^sub^fld^92.tag^data ) * [" "] ] then begin return resp^tran^bad^pos^l; end; #DELETE K007000X/00700&0W PSTM^FRMT^0200^TO^XRQST #REPLACE w0154101 PSTM^FRMT^SEM^ADDL^DATA end;! of cvd^fld not blanks ! #DELETE w0154102/w015410C PSTM^FRMT^SEM^ADDL^DATA #REPLACE w015410E PSTM^FRMT^SEM^ADDL^DATA end; #DELETE w015410F/01541m0S PSTM^FRMT^SEM^ADDL^DATA #REPLACE w015410R PSTM^FRMT^SEM^ADDL^DATA end;! of PS51 token exists ! #DELETE w015410S/w015410b PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0B187 !#CMP2.28 03/20/07 BNETLIBS60136FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60136 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60136 * ******************************************************************************** #SCN = SW0B194 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y000270J ! 20MAR2007 frederr ! Symptom: POS non face to face gambling transactions are being ! denied by the interface. ! Problem: The fix for case #430922 is requiring a CVV2 value for ! all non face to face gambling transactions. It should ! be requiring a CVC2 value for these transactions. ! Fix: Modified the interface to require a CVC2 value for all ! non face to face gambling transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #431790. #REPLACE y0070005/y0070006 PSTM^FRMT^0200^TO^XRQST sem.addl^data.info.cvc2^sub^fld^92.tag^data = [ $len( sem.addl^data.info.cvc2^sub^fld^92.tag^data ) #ENDSCN = SW0B194 !#CMP2.28 03/21/07 BNETLIBS60137FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60137 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60137 * ******************************************************************************** #SCN = SW0B199 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z000270C ! 21MAR2007 SADERC ! Symptom: DE 61 SE 7 is not formatted correctly when there is ! UCAF information present. ! Problem: The conditional statement is not coded correctly. ! Fix: Modified the code to format DE 61 SE 7 when the ! ucaf^ind of DE 48 SE 42 in the SEM is either a '1' ! or a '2'. ! Modified proc: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #431920 #REPLACE w0065902/w0065902 OFFSET 0 PSTM^FRMT^0200^TO^XRQST lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then #REPLACE w0065909/w0065909 OFFSET 0 PSTM^FRMT^0200^TO^XRQST lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then #REPLACE w007000T/w007000T OFFSET 0 PSTM^FRMT^0200^TO^XRQST lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then #ENDSCN = SW0B199 !#CMP2.28 03/22/07 BNETLIBS60138FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60138 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60138 * ******************************************************************************** #SCN = SW0B203 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #000270B ! 22MAR2007 frederr ! Symptom: The interface is dumping due to attempting to convert ! DE-5 (Settlement Amount) from an ascii value to a ! fixed value when the field is not sent. ! Problem: When converting the transaction amount from an external ! message to the PSTM, the interface checks for a value ! of non zeroes before doing an ascii to fixed call on ! DE-5. If DE-5 is not sent, then the conversion will ! dump as spaces will be the value trying to be converted. ! Fix: Modified the code to check for the presence of DE-5 ! before attempting to convert it from ascii to fixed. ! Modified proc: sem^frmt^amt^to^pstm^amt. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #431145. #REPLACE o020120B/o020120B OFFSET 0 SUB^CONVERT^AMT $len ( sem.setl^amt ) and setl^amt^bit^d then #REPLACE u020400M/u020400M OFFSET 0 SUB^CONVERT^AMT $len ( sem.setl^amt ) and setl^amt^bit^d then #ENDSCN = SW0B203 !#CMP2.28 03/26/07 BNETLIBS60139FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60139 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60139 * ******************************************************************************** #SCN = SW0B207 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $000270F ! 26MAR2007 bracewm ! Symptom: The interface is not always populating DE-48 ! (Additional Data-Private Use) SE-42 (Electronic ! Commerce Indicators) when the transaction is an ! e-commerce transaction. It is mandatory in these ! transactions. ! Problem: The interface is only populating DE-48 SE-42 for ! e-commerce transactions when the value in the ps51^token ! e^com field is set to a 7 or 8. The token field can ! also be set to a 5, 6 or 9 for e-commerce transactions. ! Fix: Modified the code to set DE-48 SE 42 when the token ! field is set to 5,6 or a 9 for e-commerce transactions. ! Modified proc: pstm^frmt^sem^addl^data. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #429849. #ADD V0154118 PSTM^FRMT^SEM^ADDL^DATA 5,6,7 -> begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. #DELETE 01541d2S PSTM^FRMT^SEM^ADDL^DATA #REPLACE 01541d2T/01541d2T OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec, "21" ); end; 8,9 -> begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. #DELETE 01541d2U PSTM^FRMT^SEM^ADDL^DATA #REPLACE 01541d2V/01541d2V OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec, "91" ); end; #ENDSCN = SW0B207 !#CMP2.28 03/30/07 BNETDDLS6025 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6025 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6025 * ******************************************************************************** #SCN = SW0B229 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6025 #NEWVERSION = 6026 #ADD 00262Y0Q * 30MAR2007 SADERC * Symptom: BankNet Release 06.2 Healthcare Eligibility Transaction * Support * Problem: None. * Fix: Modified DE 124 to support 199 bytes of data for the * Healthcare Eligibility inquiry transaction. * Dependency: BA10SC04 subvolume. New files: ILB0307M, ILB0307R and * ILB0307S. Apply fixes to BNETDDLS, BNETG and BNETLIBS. * Run Make. Make the ILF conversion using ILB0307M. Run * the ILF conversion using ILB0307R. Replace BNETLOGM, * BNETMAN and BNETUPDT. * Reference: WO #070212-03. #REPLACE 01403M0B/01403M0B OFFSET 0 SEM 04 info pic x(199). * * Format for request data only. * 04 rqst redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 provider-id. 10 tag pic x(2). ! 01 ! 10 lgth pic x(2). 10 tag-data pic x(9). 08 typ-cde. 10 tag pic x(2). ! 02 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(84). * * Format for response data only. * 04 resp redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 payer-id. 10 tag pic x(2). ! 03 ! 10 lgth pic x(2). 10 tag-data pic x(6). 08 rsn-cde. 10 tag pic x(2). ! 04 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(99). * * Format for request and response data. * 04 hlth redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 provider-id. 10 tag pic x(2). ! 01 ! 10 lgth pic x(2). 10 tag-data pic x(9). 08 typ-cde. 10 tag pic x(2). ! 02 ! 10 lgth pic x(2). 10 tag-data pic x(2). 08 payer-id. 10 tag pic x(2). ! 03 ! 10 lgth pic x(2). 10 tag-data pic x(6). 08 rsn-cde. 10 tag pic x(2). ! 04 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(4). #ENDSCN = SW0B229 !#CMP2.28 03/30/07 BNETG 6045 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6045 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6045 * ******************************************************************************** #SCN = SW0B230 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6045 #NEWVERSION = 6046 #ADD 00026s0G ! 30MAR2007 SADERC ! Symptom: BankNet Release 06.2 Healthcare Eligibility Transaction ! Support ! Problem: None ! Fix: 1. Sourced in hlthcr^srvc^tkn from baddltal. ! 2. Added define hlthcr^srvc^sub^d. ! Dependency: BA10SC04 subvolume. New files: ILB0307M, ILB0307R and ! ILB0307S. Apply fixes to BNETDDLS, BNETG and BNETLIBS. ! Run Make. Make the ILF conversion using ILB0307M. Run ! the ILF conversion using ILB0307R. Replace BNETLOGM, ! BNETMAN and BNETUPDT. ! Reference: WO #070212-03 #ADD 00026n0C ? hlthcr^srvc^tkn #ADD 00026n0F ! hlthcr^srvc^tkn, #ADD 00176n01 define hlthcr^srvc^sub^d = "C002"#; #ENDSCN = SW0B230 !#CMP2.28 03/30/07 BNETLIBS60140FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60140 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60140 * ******************************************************************************** #SCN = SW0B231 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %000270G ! 30MAR2007 SADERC ! Symptom: BankNet Release 06.2 Healthcare Eligibility Transaction ! Support ! Problem: None ! Fix: Added support for Healthcare Eligibilty Inquiry ! transaction in the Authorization Request/0100 and ! Authorization Request Response/0110 messages in ! the acquirer and issuer processing of the interface. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^amt^to^pstm^amt ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: BA10SC04 subvolume. New files: ILB0307M, ILB0307R and ! ILB0307S. Apply fixes to BNETDDLS, BNETG and BNETLIBS. ! Run Make. Make the ILF conversion using ILB0307M. Run ! the ILF conversion using ILB0307R. Replace BNETLOGM, ! BNETMAN and BNETUPDT. ! Reference: WO #070212-03 #ADD 00535m00 PSTM^FRMT^0200^TO^XRQST int de^lgth := 0; int .hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); int hlthcr^srvc^tkn^lgth := 0; int idx := 0; #ADD 00535m02 PSTM^FRMT^0200^TO^XRQST int se^lgth := 0; #ADD 00540705 PSTM^FRMT^0200^TO^XRQST int .txn^subtyp^tkn( txn^subtyp^tkn^def ); int txn^subtyp^tkn^lgth := 0; #ADD 00569 PSTM^FRMT^0200^TO^XRQST if base24^rel^g >= 5 and sem.proc^cde = sem^bal^inq^d then begin tkn^id ':=' txn^subtyp^tkn^id^d; ! ! If Transaction Subtype token with subtype value 'C002' ! and the Healthcare Service token are present in request, ! then format SE 1 of DE 3, DE 4 and SE1 and SE2 of DE 124. ! Turn bit 124 on. ! if hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ) and txn^subtyp^tkn.txn^subtyp = hlthcr^srvc^sub^d then begin movd( sem.proc^cde, sem^hlthcr^d ); tkn^id ':=' hlthcr^srvc^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^srvc^tkn, hlthcr^srvc^tkn^lgth ) then begin init( sem.mbr^def, " ", $len( sem.mbr^def ) ); idx := 0; de^lgth := 0; while idx < hlthcr^srvc^tkn.num^srvc do begin se^lgth := 0; call integer^ascii^( sem.mbr^def.rqst.srvc[ idx ]. tag, ( idx + 1 ) ); movd( sem.mbr^def.rqst.srvc[ idx ].provider^id. tag, "01" ); call integer^ascii^( sem.mbr^def.rqst. srvc[ idx ].provider^id. lgth, $len( sem.mbr^def.rqst. srvc[ idx ]. provider^id. tag^data ) ); move( sem.mbr^def.rqst.srvc[ idx ].provider^id. tag^data, hlthcr^srvc^tkn.srvc[ idx ].provider^id ); se^lgth := se^lgth + $len( sem.mbr^def.rqst. srvc[ idx ]. provider^id ); movd( sem.mbr^def.rqst.srvc[ idx ].typ^cde.tag, "02" ); call integer^ascii^( sem.mbr^def.rqst. srvc[ idx ].typ^cde. lgth, $len( sem.mbr^def.rqst. srvc[ idx ]. typ^cde. tag^data ) ); move( sem.mbr^def.rqst.srvc[ idx ].typ^cde. tag^data, hlthcr^srvc^tkn.srvc[ idx ].typ^cde ); se^lgth := se^lgth + $len( sem.mbr^def.rqst. srvc[ idx ]. typ^cde ); call integer^ascii^( sem.mbr^def.rqst. srvc[ idx ].lgth, se^lgth ); de^lgth := de^lgth + se^lgth + 4; idx := idx + 1; end; ! of while idx < hlthcr^srvc^tkn.num^srvc do call integer^ascii^( sem.mbr^def.lgth, de^lgth ); mbr^def^bit^d := 1; end; ! of Healthcare Service token exists end; ! of Transaction Subtype exists and subtype = end; ! of if base24^rel^g >= 5 and pstm.tran.tran^cde.tc = #ADD q0074600 PSTM^FRMT^0210^TO^XRESP int cnt := 0; int de^lgth := 0; int hlthcr^tkn^lgth := 0; int .hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); int .hlthcr^transit^tkn( hlthcr^transit^tkn^def ); int idx := 0; #ADD q0074602 PSTM^FRMT^0210^TO^XRESP int se^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); int txn^subtyp^tkn^lgth := 0; #ADD q008020x PSTM^FRMT^0210^TO^XRESP tkn^id ':=' txn^subtyp^tkn^id^d; ! ! If Transaction Subtype token with subtype value 'C002' ! and the Healthcare Transit token and Healthcare Service ! token are present, then format DE 54 and DE 124 ! respectively. Turn bits 54 and 124 on. ! if hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ) and txn^subtyp^tkn.txn^subtyp = hlthcr^srvc^sub^d then begin tkn^id ':=' hlthcr^transit^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^transit^tkn, hlthcr^tkn^lgth ) and hlthcr^transit^tkn.adnl^amt[ 0 ].amt^typ = "3S" then begin call fixed^ascii^( sem.addl^amt.info[ 0 ].amt, hlthcr^transit^tkn. adnl^amt[ 0 ].amt ); movl( sem.addl^amt.info[ 0 ].acct^typ, hlthcr^transit^tkn.adnl^amt[ 0 ].acct^typ, $len( sem.addl^amt.info[ 0 ].acct^typ ) ); movd( sem.addl^amt.info[ 0 ].amt^typ, "80" ); movl( sem.addl^amt.info[ 0 ].typ^amt, hlthcr^transit^tkn.adnl^amt[ 0 ].amt^sign, $len( sem.addl^amt.info[ 0 ].typ^amt ) ); movl( sem.addl^amt.info[ 0 ].crncy^cde, hlthcr^transit^tkn.adnl^amt[ 0 ].crncy^cde, $len( sem.addl^amt.info[ 0 ].crncy^cde ) ); addl^amt^bit^d := 1; call integer^ascii^( sem.addl^amt.lgth, $len( sem.addl^amt.info ) ); end; ! of Healthcare Transit token exists tkn^id ':=' hlthcr^srvc^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^srvc^tkn, hlthcr^tkn^lgth ) then begin init( sem.mbr^def, " ", $len( sem.mbr^def ) ); cnt := hlthcr^srvc^tkn.num^srvc; idx := 0; de^lgth := 0; while idx < cnt do begin se^lgth := 0; call integer^ascii^( sem.mbr^def.resp. srvc[ idx ].tag, ( idx + 1 ) ); movd( sem.mbr^def.resp.srvc[ idx ].payer^id.tag, "03" ); call integer^ascii^( sem.mbr^def.resp. srvc[ idx ].payer^id. lgth, $len( sem.mbr^def.resp. srvc[ idx ]. payer^id. tag^data ) ); move( sem.mbr^def.resp.srvc[ idx ].payer^id. tag^data, hlthcr^srvc^tkn.srvc[ idx ].payer^id ); se^lgth := se^lgth + $len( sem.mbr^def.resp. srvc[ idx ]. payer^id ); movd( sem.mbr^def.resp.srvc[ idx ].rsn^cde.tag, "04" ); call integer^ascii^( sem.mbr^def.resp. srvc[ idx ].rsn^cde. lgth, $len( sem.mbr^def.resp. srvc[ idx ]. rsn^cde. tag^data ) ); move( sem.mbr^def.resp.srvc[ idx ].rsn^cde. tag^data, hlthcr^srvc^tkn.srvc[ idx ].rsn^cde ); se^lgth := se^lgth + $len( sem.mbr^def.resp. srvc[ idx ]. rsn^cde ); call integer^ascii^( sem.mbr^def.resp. srvc[ idx ].lgth, se^lgth ); de^lgth := de^lgth + se^lgth + 4; idx := idx + 1; end; ! of while idx < cnt do call integer^ascii^( sem.mbr^def.lgth, de^lgth ); mbr^def^bit^d := 1; end; ! of Healthcare Service token exists end; ! of Tran Subtyep token exists and subtype = #ADD c0196604 SEM^FRMT^AMT^TO^PSTM^AMT int copay^amt^found := false; #ADD 02033 SUB^CONVERT^AMT if base24^rel^g >= 5 and sem.typ = sem^auth^response^d and addl^amt^bit^d and ! bit 54 sem.proc^cde = sem^hlthcr^d then begin init( hlthcr^tkn, " ", wlen( hlthcr^tkn ) ); hlthcr^tkn.num^adnl^amt := 0; hlthcr^tkn.adnl^amt[ 0 ].amt := 0f; copay^amt^found := false; if ascii^integer( sem.addl^amt.lgth, $len( sem.addl^amt.lgth ), cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end ! of if ascii^integer( sem.addl^amt.lgth, else begin cnt := 0; end; ! of NOT if ascii^integer( sem.addl^amt.lgth, i := 0; while not ( copay^amt^found or ( i = cnt) ) do begin if sem.addl^amt.info[ i ].amt^typ = "80" then begin movl( hlthcr^tkn.adnl^amt[ 0 ].acct^typ, sem.addl^amt.info[ i ].acct^typ, $len( hlthcr^tkn.adnl^amt[ 0 ]. acct^typ ) ); movd( hlthcr^tkn.adnl^amt[ 0 ].amt^typ, "3S" ); movl( hlthcr^tkn.adnl^amt[ 0 ].crncy^cde, sem.addl^amt.info[ i ].crncy^cde, $len( hlthcr^tkn.adnl^amt[ 0 ]. crncy^cde ) ); movl( hlthcr^tkn.adnl^amt[ 0 ].amt^sign, sem.addl^amt.info[ i ].typ^amt, $len( hlthcr^tkn.adnl^amt[ 0 ]. amt^sign ) ); call ascii^fixed^( sem.addl^amt.info[ i ].amt, hlthcr^tkn.adnl^amt[ 0 ]. amt ); hlthcr^tkn.num^adnl^amt := 1; tkn^id ':=' hlthcr^transit^tkn^id^d; tkn^add^lgth := $len( hlthcr^tkn. num^adnl^amt ) + $len( hlthcr^tkn. adnl^amt[ 0 ] ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, hlthcr^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3157, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data. ref^num, @sem.setl^dat ); end ! of if tkn^result = over^max^limit^l else begin call log^message^( 3159, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3159 ); end; ! of NOT if result = over^max^limit end; ! of if tkn^result copay^amt^found := true; end ! of if sem.addl^amt.info[ i ].amt^typ = "80" else begin i := i + 1; end; ! of NOT if sem.addl^amt.info[ i ].amt^typ = "80" end; ! of while not ( copay^amt^found or ( i = cnt) ) do if copay^amt^found then begin return true; end; ! of if copay^amt^found end; ! of if base24^rel^g >= 5 and .... #REPLACE O0261801 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN literal b24^pos^number^tran^types^l = 15, #ADD 02639p02 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN "39", ! hlthcr inquiry ! "17", ! balance inquiry #ADD 03138700 SEM^FRMT^XRESP^TO^PSTM^0210 int cnt := 0; int .hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); int hlthcr^srvc^tkn^lgth := 0; int idx := 0; int num^srvcs := 0; int resp^only := true; #ADD 03138701 SEM^FRMT^XRESP^TO^PSTM^0210 int resp^lgth := 0; #ADD 03208Q3V SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 and sem.typ = sem^auth^response^d and mbr^def^bit^d and ! bit 124 sem.proc^cde = sem^hlthcr^d then begin tkn^id ':=' hlthcr^srvc^tkn^id^d; ! ! Map data from DE 124 to Healthcare Service token. ! if hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^srvc^tkn, hlthcr^srvc^tkn^lgth ) then begin resp^only := true; cnt := 5; num^srvcs := 0; idx := 0; call ascii^integer^( sem.mbr^def.resp.srvc[ idx ].lgth, resp^lgth ); if resp^lgth > 16 then begin resp^only := false; end; ! of if sem.mbr^def.resp.srvc[ idx ].lgth > 16 while idx < cnt do begin if resp^only and ( sem.mbr^def.resp.srvc[ idx ].tag <> blanks for $len( sem.mbr^def.resp.srvc[ idx ]. tag ) and sem.mbr^def.resp.srvc[ idx ].tag <> zeroes for $len( sem.mbr^def.resp.srvc[ idx ]. tag ) ) then begin if sem.mbr^def.resp.srvc[ idx ].payer^id. tag = "03" and sem.mbr^def.resp.srvc[ idx ].payer^id. lgth = "06" then begin movl( hlthcr^srvc^tkn.srvc[ idx ].payer^id, sem.mbr^def.resp.srvc[ idx ].payer^id. tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. payer^id ) ); end; ! of if sem.mbr^def.resp... payer^id if sem.mbr^def.resp.srvc[ idx ].rsn^cde. tag = "04" and sem.mbr^def.resp.srvc[ idx ].rsn^cde. lgth = "02" then begin movl( hlthcr^srvc^tkn.srvc[ idx ].rsn^cde, sem.mbr^def.resp.srvc[ idx ].rsn^cde. tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. rsn^cde ) ); end; ! of if sem.mbr^def.resp... rsn^cde num^srvcs := num^srvcs + 1; end ! of if resp^only^g and .... else if sem.mbr^def.hlth.srvc[ idx ].tag <> blanks for $len( sem.mbr^def.hlth.srvc[ idx ]. tag ) and sem.mbr^def.hlth.srvc[ idx ].tag <> zeroes for $len( sem.mbr^def.hlth.srvc[ idx ]. tag ) then begin if sem.mbr^def.hlth.srvc[ idx ].payer^id. tag = "03" and sem.mbr^def.hlth.srvc[ idx ].payer^id. lgth = "06" then begin movl( hlthcr^srvc^tkn.srvc[ idx ].payer^id, sem.mbr^def.hlth.srvc[ idx ].payer^id. tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. payer^id ) ); end; ! of if sem.mbr^def.hlth... payer^id if sem.mbr^def.hlth.srvc[ idx ].rsn^cde. tag = "04" and sem.mbr^def.hlth.srvc[ idx ].rsn^cde. lgth = "02" then begin movl( hlthcr^srvc^tkn.srvc[ idx ].rsn^cde, sem.mbr^def.hlth.srvc[ idx ].rsn^cde. tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. rsn^cde ) ); end; ! of if sem.mbr^def.hlth... rsn^cde num^srvcs := num^srvcs + 1; end; ! of if sem.mbr^def.hlth... tag <> blanks idx := idx + 1; end; ! of while idx < cnt do hlthcr^srvc^tkn.num^srvc := num^srvcs; end; ! of Healthcare Service token exists end; ! of if base24^rel^g >= 5 and .... #ADD 0350970L SEM^FRMT^XRQST^TO^PSTM^0200 struct .hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); #ADD 03510k03 SEM^FRMT^XRQST^TO^PSTM^0200 int cnt := 0; int idx := 0; int num^srvcs := 0; #ADD 03594t62 SEM^FRMT^XRQST^TO^PSTM^0200 if mbr^def^bit^d and ! S-124 sem.proc^cde = sem^hlthcr^d then begin ! ! Initialize the Transaction Subtype token. Add ! Transaction Subtype token with subtype 'C002' and ! map date from DE 124 to the Healthcare Service token. ! init( txn^subtyp^tkn, " ", wlen( txn^subtyp^tkn )); tkn^id ':=' txn^subtyp^tkn^id^d; movd( txn^subtyp^tkn.txn^subtyp, hlthcr^srvc^sub^d ); move( txn^subtyp^tkn.iss^proc^cde, sem.proc^cde ); tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, txn^subtyp^tkn, $len( txn^subtyp^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin call log^message^( 3250, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3250 ); end; ! of if tkn^result init( hlthcr^srvc^tkn, " ", wlen( hlthcr^srvc^tkn ) ); hlthcr^srvc^tkn.num^srvc := 0; cnt := 5; num^srvcs := 0; idx := 0; while idx < cnt do begin if ( sem.mbr^def.rqst.srvc[ idx ].tag <> blanks for $len( sem.mbr^def.rqst.srvc[ idx ]. tag ) and sem.mbr^def.rqst.srvc[ idx ].tag <> zeroes for $len( sem.mbr^def.rqst.srvc[ idx ]. tag ) ) then begin if sem.mbr^def.rqst.srvc[ idx ].provider^id. tag = "01" and sem.mbr^def.rqst.srvc[ idx ].provider^id. lgth = "09" then begin movl( hlthcr^srvc^tkn.srvc[ idx ]. provider^id, sem.mbr^def.rqst.srvc[ idx ]. provider^id.tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. provider^id ) ); end; ! of if sem.mbr^def.rqst... provider^id if sem.mbr^def.rqst.srvc[ idx ].typ^cde. tag = "02" and sem.mbr^def.rqst.srvc[ idx ].typ^cde. lgth = "02" then begin movl( hlthcr^srvc^tkn.srvc[ idx ].typ^cde, sem.mbr^def.rqst.srvc[ idx ].typ^cde. tag^data, $len( hlthcr^srvc^tkn.srvc[ idx ]. rsn^cde ) ); end; ! of if sem.mbr^def.rqst... typ^cde if hlthcr^srvc^tkn.srvc[ idx ].provider^id <> blanks for $len( hlthcr^srvc^tkn. srvc[ idx ]. provider^id ) or hlthcr^srvc^tkn.srvc[ idx ].typ^cde <> blanks for $len( hlthcr^srvc^tkn. srvc[ idx ]. typ^cde ) then begin num^srvcs := num^srvcs + 1; end; ! of if hlthcr^srvc^tkn.srvc[ idx ]... end; ! of if ( sem.mbr^def.rqst... tag <> blanks idx := idx + 1; end; ! of while idx < cnt do if num^srvcs > 0 then begin hlthcr^srvc^tkn.num^srvc := num^srvcs; tkn^id ':=' hlthcr^srvc^tkn^id^d; tkn^add^lgth := $len( hlthcr^srvc^tkn.num^srvc ) + ( $len( hlthcr^srvc^tkn.srvc[ 0 ] ) * num^srvcs ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, hlthcr^srvc^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin call log^message^( 3252, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3252 ); end; ! of if tkn^result then end; ! of if num^srvcs > 0 end; ! of if mbr^def^bit^d and .... #ENDSCN = SW0B231 !#CMP2.28 04/13/07 BNETLIBS60141FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60141 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60141 * ******************************************************************************** #SCN = SW0B255 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &000270L ! 13APR2007 RobinsB ! Symptom: The interface is not always populating DE-48 ! (Additional Data-Private Use) SE-42 (Electronic ! Commerce Indicators) when the transaction is an ! e-commerce transaction. It is mandatory in these ! transactions. ! Problem: The interface is only populating DE-48 SE-42 for ! e-commerce transactions when the value in the ps51^token ! e^com field is set to a 5, 6, 7 or 8. The token field ! can also be set to a 9 for e-commerce transactions. ! Fix: Modified the code to also set DE-48 SE-42 when the token ! field is set to a 9 for e-commerce transactions. ! Modified proc: pstm^frmt^sem^addl^data. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #433246. #REPLACE 01541l02 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.e^com^flg <= "9" ) then #ENDSCN = SW0B255 !#CMP2.28 04/16/07 ILB0207S6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0207S ILB0207S 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0207S ILB0207S 6001 * ******************************************************************************** #SCN = SW0B256 , FILEID = ILB0207S #VOLUME = $ROOK.SW60BNET #FILE = ILB0207S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6001 #NEWVERSION = 6002 #ADD 00039A0E ! 16APR2007 SaderC ! Symptom: The last 42 bytes of the original ILF record are not ! being moved to the new ILF record. ! Problem: The problem occurs when the final^move^lgth is ! calculated. The current code is subtracting ofst2 ! from sem^lgth, which is the old ILF sem length. The ! final^move^lgth should be the difference of ! subtracting ofst2 from the new^sem^lgth. ! Fix: Modified the code to subtract ofst2 from the new ! sem length. ! Modified proc: convert ! Dependency: Apply fixes to ILB0207S. Make the ILF conversion ! using ILB0207M. ! Reference: Case #433215 #REPLACE 00555 CONVERT final^move^lgth := $max( ( new^sem^lgth - ofst2 ), 0 ); #ENDSCN = SW0B256 !#CMP2.28 04/17/07 RQBNRLFS6019 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6019 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6019 * ******************************************************************************** #SCN = SW0B258 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6019 #NEWVERSION = 6020 #ADD 00018S1N * 10APR2007 ENGELK * Symptom: Not all data in a MCC105 BNRLF perusal record is * saved or displayed. * Problem: When the BNRLF record size was increased from * 260 to 380, neither the requester nor the server * was modified to save it, read it, or display it * for this new length. * Fix: Modified the requester to display a BNRLF record * in the perusal screen for its full length. * Modified: WORKING-STORAGE * 420-MOVE-DATA * 420-SAVE-DATA * Dependency: Apply fixes to RQBNRLFS & SVBNRLFS. Run Make. * Reference: Case #432825 * * 10APR2007 ENGELK * Symptom: Edit checks on MCC103 product id field were too * restrictive. * Problem: Edit checks for these values have to change * regularly and data entry folks know what values * need to be used. Testing them causes data entry * to be delayed waiting for code changes. * Fix: Removed MCC103 product id edit checks. * Modified: 480-DATA-CHECK * Dependency: Apply fix to RQBNRLFS. Run Make. * Reference: Case #432452 * * 11APR2007 ENGELK * Symptom: When perusing the BNRLF file, MCC106, MCC107, and * MCC108 records are displayed on the MCC104 screen. * Problem: The code which determines which perusal screen to * use makes the determination based either upon the * overlay currently displayed or the file name in * the next BNRLF record. The check on file name in * the next BNRLF record needs to precede the overlay * check. * Fix: Modified code to determine which perusal screen * to use so it tests the file name in the BNRLF * record prior to overlay check. * Modified: 570-DISPLAY-OVERLAY * Dependency: Apply fixes to SCRNBRLF & RQBNRLFS. Run Make. * Reference: Case #433236 #REPLACE 00073Q03 DATA DIVISION 05 PART-SIX PIC X(64). #DELETE 00679H0P/00679H11 480-DATA-CHECK #REPLACE 01075Q03 420-MOVE-DATA MOVE LINE-DATA OF MSG-LIST(6) TO PART-SIX. #REPLACE 01075Q06 OFFSET 1/01075Q06 OFFSET 1 420-MOVE-DATA MOVE LINE-DATA OF MSG-LIST-EXT(6) TO PART-SIX. ?ENDIF 5 #REPLACE 01086Q03 420-SAVE-DATA MOVE PART-SIX TO LINE-DATA OF MSG-LIST(6). #REPLACE 01086Q06 OFFSET 1/01086Q06 OFFSET 1 420-SAVE-DATA MOVE PART-SIX TO LINE-DATA OF MSG-LIST-EXT(6). ?ENDIF 5 #ADD 01138S03 570-DISPLAY-OVERLAY ELSE IF FILE-NAME OF BNRLF = "MCC106" PERFORM 570-DISPLAY-OVERLAY-11 ELSE IF FILE-NAME OF BNRLF = "MCC107" PERFORM 570-DISPLAY-OVERLAY-13 ELSE IF FILE-NAME OF BNRLF = "MCC108" PERFORM 570-DISPLAY-OVERLAY-15 #DELETE 01138S0F/01138S0H 570-DISPLAY-OVERLAY #DELETE 01138S0N/01138S0P 570-DISPLAY-OVERLAY #DELETE 01138S0W/01138S0Y 570-DISPLAY-OVERLAY #ENDSCN = SW0B258 !#CMP2.28 04/17/07 SVBNRLFS6010 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6010 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6010 * ******************************************************************************** #SCN = SW0B259 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6010 #NEWVERSION = 6011 #ADD 00005J0V * 10APR2007 ENGELK * Symptom: Not all of the data in a 0312 message is displayed * on the BNRLF perusal screen. * Problem: When the length of the BNRLF record was increased * from 260 to 380, the BNRLF server was not updated * to read the larger record. * Fix: Updated the RLF-LGTH for which a BNRLF record is * read. Increased the amount of data moved in the * BNRLF record. * Modified: WORKING-STORAGE * 201-MOVE-LINE * 300-BUILD-LINE-DATA * Dependency: Apply fixes to RQBNRLFS & SVBNRLFS. Run Make. * Reference: Case #432825 #REPLACE 00725I01 DATA DIVISION 01 RLF-LGTH PIC S9(4) VALUE 380. #REPLACE 00800I03 DATA DIVISION 03 PART-SIX PIC X(64). #REPLACE 01373I03 205-GOOD-REC-CHECK MOVE PART-SIX TO LINE-DATA OF MESSAGE-OUT(6). #REPLACE 01401I03 350-END-OF-FILE MOVE PART-SIX TO LINE-DATA OF MESSAGE-OUT(6). #ENDSCN = SW0B259 !#CMP2.28 04/30/07 BNETLIBS60142FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 60142 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 60142 * ******************************************************************************** #SCN = SW0B296 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *000270G ! 30APR2007 fuhsc ! Symptom: The initial symptom in Case 403963 involved the setting ! of ptlf.auth.pin^ind in POS Router Auth, based on ! pstm.pin^tries = "Z", and finding out that the pin^ind ! is almost always being set to "1", because the pin^tries ! is almost always equal to "Z" coming in. ! Problem: We are setting pstm.pin^tries to "Z" regardless of ! whether the pin has already been verified or not. ! Fix: Add an additional check on DE-48 SE-80 to determine ! if the pin has already been verified. If so, set the ! pstm.pin^tries to "Z"; if not set it to "0". ! Modified proc: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #431857. #ADD 03542D07 SEM^FRMT^XRQST^TO^PSTM^0200 begin if sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" and sem.addl^data.info.pin^svc^cde^sub^fld^80.cde = "PV" then #REPLACE 03542D08/03542D08 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 movd( pstm.pin^tries, "Z" ) else movd( pstm.pin^tries, "0" ) end #ENDSCN = SW0B296 !#CMP2.28 08/02/07 BNETDDLS6026 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6026 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6026 * ******************************************************************************** #SCN = SW0B443 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6026 #NEWVERSION = 6027 #ADD 00262Z0D * 01AUG2007 swiftd * Symptom: Banknet Release 07.2 Mandates. * Problem: None. * Fix: 1. Added four new fields in the bnet-swi-tkn-data * definition. * 2. Added definitions for 5 new subelements of DE 48 in * section SEM, and updated the definition of SE 61. * 3. Added new value MCC109 for DE 101 in section FRQST. * 4. Added a new redefine of FILE-REC for MCC109 data in * section PATH-RQST. * 5. Added a new field (atc-val) in section BNRLF. * Dependency: New files: ILB0807M, ILB0807R, and ILB0807S. * Apply fixes to BNETEMVS, BNETDDLS, BNETG, BNETLIBS, * BNETS, COBTKN, DDLPSTKN, PSTKNCVS, PSTKNID, RQBNRLFS, * and SCRNBRLF. Run Make. Make the ILF conversion using * ILB0807M. Run the ILF conversion using ILB0807R. * Replace BNETLOGM and BNETUPDT. New interface * documentation file BNETMNWD (Microsoft Word) supersedes * BNETMAN. * Reference: WO #070419-01 * 01AUG2007 SaderC * Symptom: BankNet Acquiring Institution ID Enhancement * Problem: None. * Fix: Modified to support CUST-ID-IND and six MC-CUST-IDs * and their corresponding CRNCY-CDEs. * Modified sections: BNIIF * FIID-MCI * Dependency: BA10SC04 subvolume. New files: BII0807M, BII0807R and * BII0807S. Apply fixes to BNETDDLS, BNETLIBS and * BNETS. Run Make. Make the BNIIF conversion using * BII0807M. Run the BNIIF conversion using BII0807R. * Replace BNETUPDT. New interface documentation file * BNETMNWD (Microsoft Word) supersedes BNETMAN. * Reference: WO #060925-03. #ADD 00588Y04 FRQST * MCC109 PayPass Application Transaction Counter (ATC) File #ADD 00680Y30 FRQST 04 mcc109 redefines txt. * * Number that is assigned to the PayPass card or non-card form * factor (NCFF) and transmitted from the card or NCFF to the * PayPass terminal. Left-justified, blank filled. * 06 paypass-acct-num pic x(19). * * Application PAN Sequence Number (EMV tag 5F34) * 06 crd-seq-num pic x. * * Expiration date that is embossed, encoded, or both on the * card that represents the cardholder PAN. Format is YYMM. * 06 acct-exp-dat pic x(4). * * PayPass Application Transaction Counter (ATC) Value. * Right justified, zero-filled. * 06 atc-val pic x(5). * * Last transaction date for valid ATC. * 06 last-txn-dat pic x(6). * * Last transaction time for valid ATC. * 06 last-txn-tim pic x(4). * * Indicates how the ATC value was last changed. * B = batch entry * O = online entry * T = transaction * 06 entry-chng-ind pic x. * * Date of last activity. Format MMDDYY. * 06 dat-last-activity pic x(6). * * Time of last activity. Format HHMM. * 06 tim-last-activity pic x(4). * * Filler for remaider of the txt field. * 06 filler9 pic x(949). #ADD 01157Y01 SEM * 13 - Static CVC 3 Validation in Stand-In Processing #ADD 01157Y02 SEM * 15 - Dynamic CVC 3 Pre-validation * 16 - Dynamic CVC 3 in Stand-In Processing #ADD 01157R0B SEM * A - ATC outside allowed range (applicable when ATC value is * dynamic [varying value]). #ADD 01157R0J SEM * N - Unpredictable Number Mismatch (applicable when the UN is * dynamic [varying value]). #ADD 01157R0P SEM * #ADD 01157W0B SEM * Valid values position 2 * (Purchase Amount Only Terminal Support Indicator): * 0 = Merchant terminal does not support receipt of purchase only * approvals * 1 = Merchant terminal supports receipt of purchase only approvals * * Valid values position 3 * (IIAS Substantiation Indicator): * 0 = Merchant terminal did not verify the purchased items against * an Inventory Information Approval System (IIAS) * 1 = Merchant terminal verified the purchased items against an * Inventory Information Approval System (IIAS) * * Positions 4 and 5 are reserved for future use and will be * zero-filled. * #DELETE 01157W0C/01157W0E SEM #ADD 01157W0J SEM 10 purch-amt-only-ind pic 9. 10 iias-ind pic 9. 10 user-fld pic 9(2). #DELETE 01157W0K SEM #ADD 01157Y0b SEM * * Chip CVR/TVR Bit Error Results Listing * Subfield tag = 79 * Provides the TVR and CVR bitmask and expected values registered * by the issuer. 06 chip-bit-err-rslts-sub-fld-79. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(50). * * Card Verification Method * Subfield tag = 20 * Contains a value indicating the Card Verification Method that is * used in an Authorization * 06 crd-vrfy-mthd-sub-fld-20. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. * * Dynamic CVC3 ATC Information * Subfield tag = 34 * Contains supporting information for PayPass Dynamic CVC3 On-behalf * services * * Valid values for subfield 3 (ATC Discrepancy Indicator): * G = The ATC value is greater than the maximum value allowed * L = The ATC value is less than the minimum value allowed * W = The ATC value is within the issuer defined limits * 06 dyn-atc-cvc3-info-sub-fld-34. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 atc-val pic 9(5). 10 atc-discrp-val pic 9(5). 10 atc-discrp-ind pic x. * * Payment Transaction Type Indicator * Subfield tag = 77 * Value that identifies the type of payment transaction taking * place. * 06 pmnt-txn-typ-ind-sub-fld-77. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(3). * * PayPass NCFF Request/Response * Subfield tag = 35 * Indicates a request, approval or decline for NCFF Issuance Request * Verification * 06 ncff-rqst-resp-sub-fld-35. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #ADD 02476Y0w ICF-BNET 04 mcc109 redefines file-rec. 06 paypass-acct-num pic x(19). 06 crd-seq-num pic x. 06 acct-exp-dat pic x(4). 06 atc-val pic x(5). 06 filler9 pic x(75). #ADD 02566W08 BNRLF 04 atc-val pic x(5). #REPLACE 02566Y01 BNRLF 04 filler1 pic x(12). #ADD 02607 FIID-MCI 02 mc-cust-id-ctr type binary 16. 02 mc-cust-id occurs 6 times. 04 num pic x(6). 04 crncy-cde pic x(3). 02 cust-id-ind pic x. 02 filler pic x. #REPLACE 02618 /02618 OFFSET 0 FIID-MCI * as well as up to 20 MasterCard prefixes used by that FI and up to ! * 6 MasterCard assigned Customer IDs corresponding to terminal * currency codes for the FIID. #ADD 02672 BNIIF * * Customer IDs corresponding to terminal currency codes for the FIID. * 02 mc-cust-id occurs 6 times. 04 num pic x(6). 04 crncy-cde pic x(3). * * The Customer ID Indicator is used to indicate what the MasterCard * assigned Customer ID, to be mapped to DE 32, will be configured by. * Valid values will include: * * "0" = TERMINAL FIID (default) Value configured in BANKNET MCI ID * field in BNIIF for the * PSTM.TERM^FIID will be mapped to * DE 32. * "1" = ACQ INST ID FROM PTD Value in PSTM.ACQ^INST^ID^NUM will * be mapped to DE 32. * "2" = CRNCY CDE PER TERM FIID Value configured in MC CUST ID * field, corresponding to the * PSTM.ORIG^CRNCY^CDE in the CRNCY * CDE field, in BNIIF for the * PSTM.TERM^FIID, will be mapped to * DE 32. * "3" = ACQ INST ID FROM ICFE Value configured in INSTITUTION ID * field in ICFE will be mapped to * DE 32. * 02 cust-id-ind pic x. 02 filler pic x. #REPLACE 02760Y01 SAF-BNET * Switch token version (ver-id) will be "08". #ADD 02760Y0D SAF-BNET 02 advc-detl-cde pic 9(4). 02 auth-agent-id-cde pic x(6). 02 pmnt-txn-typ-ind pic x(3). 02 chip-bit-err-rslts pic x(50). #ENDSCN = SW0B443 !#CMP2.28 08/02/07 BNETG 6046 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6046 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6046 * ******************************************************************************** #SCN = SW0B445 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6046 #NEWVERSION = 6047 #ADD 00026t0D ! 01AUG2007 SaderC ! Symptom: BankNet Cardholder Billing Currency per BIN Enhancement ! Problem: None ! Fix: Added INT variable sppt^multi^crncy^g. ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Replace BNETUPDT. New interface documentation file ! BNETMNWD (Microsoft Word) supersedes BNETMAN. ! Reference: WO #070425-01 ! 01AUG2007 swiftd ! Symptom: Banknet Release 07.2 Mandates. ! Problem: None. ! Fix: 1. Added new globals ntwk^assign^tcc^g and ! deny^if^atc^discrp^g. ! 2. Added defines for DE 48 SE 34 subfield 3 (ATC ! Discrepancy Indicator). ! 3. Added a define for the new prescription amount type, ! bnet^amt^rx^d. ! Dependency: New files: ILB0807M, ILB0807R, and ILB0807S. ! Apply fixes to BNETEMVS, BNETDDLS, BNETG, BNETLIBS, ! BNETS, COBTKN, DDLPSTKN, PSTKNCVS, PSTKNID, RQBNRLFS, ! and SCRNBRLF. Run Make. Make the ILF conversion using ! ILB0807M. Run the ILF conversion using ILB0807R. ! Replace BNETLOGM and BNETUPDT. New interface ! documentation file BNETMNWD (Microsoft Word) supersedes ! BNETMAN. ! Reference: WO #070419-01 #ADD 00026f0J ? auto^substan^data^tkn #ADD 00026k0J ? txn^spcf^data^tkn #ADD 00026T1V ! auto^substan^data^tkn, #ADD 00026k0M ! txn^spcf^data^tkn #ADD 00078n01 define bnet^amt^rx^d = "11"#; #ADD 00176n00 define pmnt^from^3rd^prty^d = "B000"#; #ADD 00194W02 define atc^greater^than^max^d = "G"#; define atc^less^than^min^d = "L"#; #ADD 00448d01 int deny^if^atc^discrp^g := false; #ADD 00448l00 int ntwk^assign^tcc^g := false; int sppt^multi^crncy^g := false; #ADD 01366d01 int deny^if^atc^discrp^g; #ADD 01366l00 int ntwk^assign^tcc^g; int sppt^multi^crncy^g; #ENDSCN = SW0B445 !#CMP2.28 08/02/07 BNETLIBS6100 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6100 * ******************************************************************************** #SCN = SW0B446 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6100 #NEWVERSION = 6101 #ADD 04419 ! 01AUG2007 SaderC ! Symptom: Banknet Acquiring Institution ID Enhancement ! Problem: None. ! Fix: Modified the interface to support different MasterCard ! assigned customer IDs to be used for the same ! institution, based on transaction currency. ! Modified procs: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! util^get^bniif ! Dependency: BA10SC04 subvolume. New files: BII0807M, BII0807R and ! BII0807S. Apply fixes to BNETDDLS, BNETLIBS, BNETS, ! RQBNIIFS, SCRNBIIF and SVBNIIFS. Run Make. ! Replace BNETUPDT. New interface documentation file ! BNETMNWD (Microsoft Word) supersedes BNETMAN. ! Reference: WO #060925-03. ! 01AUG2007 SaderC ! Symptom: Banknet Cardholder Billing Currency per BIN Enhancement ! Problem: None ! Fix: Added support for new LCONF parameter SPPT-MULTI-CRNCY ! (Support Multi-Currency). ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Replace BNETUPDT. New interface documentation file ! BNETMNWD (Microsoft Word) supersedes BNETMAN. ! Reference: WO #070425-01 ! 01AUG2007 swiftd ! Symptom: Banknet Release 07.2 Mandates. ! Problem: None. ! Fix: 1. Added processing to map DE 48 SE 38 to the Switch ! Common Data token. ! 2. Added code to set bnet^tkn^buf.auth^agent^id^cde to ! sem.auth^inst.cde if the auth^inst^bit^d is on. ! 3. Added processing to init, collapse, and expand ! subelements 20, 34, 35, 79 in DE 48. ! 4. Added code to echo DE 48 SE 72 in the external ! response message when it is present in the external ! request. ! 5. Added code to support new subelement 20 of DE 48 to ! update the pt^srv^data^tkn. ! 6. Added processing to format and send DE 48, SE 61 ! based on data from the auto-substan-data-tkn. ! 7. Modified the existing processing that formats and ! adds the hlthcr^transit^tkn. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^rvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^xrqst^to^pstm^0200 ! util^add^swi^cmn^data^tkn ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: New files: ILB0807M, ILB0807R, and ILB0807S. ! Apply fixes to BNETEMVS, BNETDDLS, BNETG, BNETLIBS, ! BNETS, COBTKN, DDLPSTKN, PSTKNCVS, PSTKNID, RQBNRLFS, ! and SCRNBRLF. Run Make. Make the ILF conversion using ! ILB0807M. Run the ILF conversion using ILB0807R. ! Replace BNETLOGM and BNETUPDT. New interface ! documentation file BNETMNWD (Microsoft Word) supersedes ! BNETMAN. ! Reference: WO #070419-01 #ADD 04594 PATH^FRMT^FILE^RQST end ! of if path.frqst.file^name = "MCC108" else if path.frqst.file^name = "MCC109" then begin pan ':=' path.frqst.mcc109.paypass^acct^num for $len( path.frqst.mcc109.paypass^acct^num ); end; ! of if path.frqst.file^name = "MCC109" #DELETE 04595 PATH^FRMT^FILE^RQST #REPLACE 05251 /05251 OFFSET 0 PATH^FRMT^FILE^RQST end ! of if path.frqst.file^name = "MCC108" ! else if path.frqst.file^name = "MCC109" then begin if path.frqst.mcc109.paypass^acct^num <> blanks for $len( path.frqst.mcc109.paypass^acct^num) and path.frqst.mcc109.paypass^acct^num <> zeroes for $len( path.frqst.mcc109.paypass^acct^num ) then begin pan^bit^d := 1; scan path.frqst.mcc109.paypass^acct^num until " " -> @ptr; lgth := $min( $len( sem.pan.num ), ( @ptr '-' @path.frqst.mcc109.paypass^acct^num ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, path.frqst.mcc109.paypass^acct^num, lgth ); end; ! of if path.frqst.mcc109.paypass^acct^num <> blanks file^rec^bit^d := 1; move( sem.file^rec.mcc109.paypass^acct^num, path.frqst.mcc109.paypass^acct^num ); move( sem.file^rec.mcc109.crd^seq^num, path.frqst.mcc109.crd^seq^num ); move( sem.file^rec.mcc109.acct^exp^dat, path.frqst.mcc109.acct^exp^dat ); lgth := $len( sem.file^rec.mcc109.paypass^acct^num ) + $len( sem.file^rec.mcc109.crd^seq^num ) + $len( sem.file^rec.mcc109.acct^exp^dat ); if path.frqst.file^updt^cde = file^add^d or path.frqst.file^updt^cde = file^chg^d then begin move( sem.file^rec.mcc109.atc^val, path.frqst.mcc109.atc^val ); lgth := lgth + $len(sem.file^rec.mcc109.atc^val); end; ! of if path.frqst.file^updt^cde = file^add^d call integer^ascii^( sem.file^rec.lgth, lgth ); end; ! of if path.frqst.file^name = "MCC109" #ADD 05268 PATH^FRMT^FILE^RQST !# CUST^ID^IND : Customer ID Indicator # #REPLACE 05277 PSTM^FRMT^0200^TO^XRQST avs^typ, cust^id^ind ) extensible; #ADD 05283 PSTM^FRMT^0200^TO^XRQST string .cust^id^ind; #ADD 05319 PSTM^FRMT^0200^TO^XRQST int found^txn^sub^tkn := 0; int fnd^txn^spcf^data^tkn := 0; #ADD 05323 PSTM^FRMT^0200^TO^XRQST int ofst; #ADD 05324 PSTM^FRMT^0200^TO^XRQST int pos^userdata; #ADD 05360 PSTM^FRMT^0200^TO^XRQST int .txn^spcf^data^tkn( txn^spcf^data^tkn^def ); int txn^spcf^data^tkn^lgth := 0; string .acq^inst^cde[ 0:( $len( sem.acq^inst.cde ) - 1 ) ]; init( acq^inst^cde, " ", $len( sem.acq^inst.cde ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); tkn^id ':=' txn^spcf^data^tkn^id^d; fnd^txn^spcf^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^spcf^data^tkn , txn^spcf^data^tkn^lgth ); #ADD 05548 PSTM^FRMT^0200^TO^XRQST if cust^id^ind = "0" or cust^id^ind = "2" then begin #ADD 05550 PSTM^FRMT^0200^TO^XRQST end ! of if cust^id^ind = "0" or else begin if cust^id^ind = "1" and ( pstm.acq^inst^id^num <> zeroes for $len( pstm.acq^inst^id^num ) and pstm.acq^inst^id^num <> blanks for $len( pstm.acq^inst^id^num ) ) then begin call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); call hiswutil^justify^field( pstm.acq^inst^id^num, $len( pstm.acq^inst^id^num ), acq^inst^cde, $occurs( acq^inst^cde ), left^justify^l ); movl( sem.acq^inst.cde, acq^inst^cde, max^group^lgth^g ); end; ! of if cust^id^ind = "1" and end; ! of NOT if cust^id^ind = "0" or if sem.acq^inst.cde = zeroes for $len( sem.acq^inst.cde ) or sem.acq^inst.cde = blanks for $len( sem.acq^inst.cde ) then begin call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); movl( sem.acq^inst.cde, prikey.term^id, max^group^lgth^g ); end; ! of if sem.acq^inst.cde = zeroes or if cust^id^ind = "3" or ( sem.acq^inst.cde = zeroes for $len( sem.acq^inst.cde ) or sem.acq^inst.cde = blanks for $len( sem.acq^inst.cde ) ) then begin call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); movl( sem.acq^inst.cde, pct.inst, max^group^lgth^g ); end; ! of if cust^id^ind = "3" or #ADD 05708 PSTM^FRMT^0200^TO^XRQST if ( found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = pmnt^from^3rd^prty^d ) then begin movd( sem.proc^cde, sem^pmnt^txn^d ); if fnd^txn^spcf^data^tkn then begin if sem.addl^data.lgth = " " then begin addl^data^bit^d := 1; movd( sem.addl^data.lgth, "001" ); end; if ntwk^assign^tcc^g then begin movd( sem.addl^data.info.tran^cat^cde, " " ); end else begin movd( sem.addl^data.info.tran^cat^cde, "P" ); end; call ascii^integer^( sem.addl^data.lgth, lgth ); call integer^ascii^( sem.addl^data.lgth, ( lgth + $len(sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77) ) ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, $len( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data ) ); ! ! Initialize to default value "C05" ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C05" ); if fnd^txn^spcf^data^tkn then begin if txn^spcf^data^tkn.dataset^id = "57" then begin if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C1" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C01" ); end; if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C2" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C02" ); end; if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C3" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C03" ); end; if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "OG" or txn^spcf^data^tkn.related^txn^data. bus^appl^id = "GP" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C04" ); end; end; ! of if txn^spcf^data^tkn.dataset^id = "57" end; ! of if fnd^txn^spcf^data^tkn end; end; ! of if ( found^txn^sub^tkn and #ADD 05740 PSTM^FRMT^0200^TO^XRQST if ( ( pstm.rte.srv = "MD" ) and ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe ) ) then begin return resp^format^error^pos^l; end; #ADD 06033 PSTM^FRMT^0200^TO^XRQST ! ! DE 48 SE 20 will not be sent in the external request, but only ! stored in the suspense record so that it can be logged to the ! ILF. ! if pin^bit^d then begin movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "P" ) end else begin movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "S" ); end; !of if pin^bit^d #ADD 06430 PSTM^FRMT^0210^TO^XRESP if addl^data^bit^d and sem.addl^data.info.iss^chip^auth^sub^fld^72.tag = "72" and sem.addl^data.info.iss^chip^auth^sub^fld^72.tag^data <> blanks for $len( sem.addl^data.info. iss^chip^auth^sub^fld^72.tag^data ) and sem.addl^data.info.iss^chip^auth^sub^fld^72.tag^data <> zeroes for $len( sem.addl^data.info. iss^chip^auth^sub^fld^72. tag^data ) then begin ! ! if iss^chip^auth^sub^fld^72.tag data was sent in the request, ! field 48, it must be sent back in the response with all of ! the subelements it contained in the original message ! send^addl^data := true; end; #ADD 07064 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.ncff^rqst^resp^sub^fld^35. tag^data = "R" then begin if ( sem.addl^data.info.avs^resp.result = "X" or sem.addl^data.info.avs^resp.result = "Y" ) and sem.addl^data.info.cvc^sub^fld^87.tag^data = "M" then begin movd( sem.addl^data.info.ncff^rqst^resp^sub^fld^35, "A" ); end else begin movd( sem.addl^data.info.ncff^rqst^resp^sub^fld^35, "D" ); end; !of sem.addl^data.info.avs^resp.result = "X" call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. ncff^rqst^resp^sub^fld^35 ); call integer^ascii^( sem.addl^data.lgth, lgth ); addl^data^bit^d := 1; send^addl^data := true; end; !of if sem.addl^data.info.ncff^rqst^resp^sub^fld^35. #ADD 07149 PSTM^FRMT^0210^TO^XRESP !# CUST^ID^IND : Customer ID Indicator # #REPLACE 07158 PSTM^FRMT^0220^TO^XADV avs^typ, cust^id^ind ) extensible; #ADD 07164 PSTM^FRMT^0220^TO^XADV string .cust^id^ind; #REPLACE 07171 /07172 PSTM^FRMT^0220^TO^XADV if response := pstm^frmt^0200^to^xrqst( pstm, sem, prikey, avs^typ, cust^id^ind ) then #ADD 07342 PSTM^FRMT^0420^TO^ACQ^XRVSL int .pt^srv^data^tkn( pt^srv^data^tkn^def ); int pt^srv^data^tkn^lgth; int pt^srv^data^tkn^found := false; string tkn^id[ 0:1 ]; #ADD 07377 PSTM^FRMT^0420^TO^ACQ^XRVSL if base24^rel^g >= 5 then begin tkn^id ':=' pt^srv^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pt^srv^data^tkn, pt^srv^data^tkn^lgth ) then begin pt^srv^data^tkn^found := true; end; end; ! of if bas24^rel^g #ADD 07466 PSTM^FRMT^0420^TO^ACQ^XRVSL ! ! Format SE 20 ! if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. tag^data <> blanks for $len( sem.addl^data.info. crd^vrfy^mthd^sub^fld^20. tag^data ) then begin movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag, "20" ); movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.lgth, "01" ); move( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, orig^sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. tag^data ); de48^lgth := de48^lgth + $len( sem.addl^data.info. crd^vrfy^mthd^sub^fld^20 ); end; ! of if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^ #ADD 07543 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 = "77" then begin movl( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77, orig^sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77, $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); end; #ADD 07754 PSTM^FRMT^AMT^TO^SEM^AMT int i := 0; int lgth := 0; #ADD 07850 SUB^CONVERT^AMT hlthcr^tkn^lgth ) then begin lgth := 0; for i := 0 to $max( 0, ( hlthcr^get^tkn. num^adnl^amt - 1 ) ) do begin if hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4S" or hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4T" or hlthcr^get^tkn.adnl^amt[ i ]. amt^typ = "4U" then begin lgth := lgth + $len( sem.addl^amt.info ); move( sem.addl^amt.info[ i ].acct^typ, hlthcr^get^tkn.adnl^amt[ i ]. acct^typ ); if hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4S" or hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4T" then begin movd( sem.addl^amt.info[ i ].amt^typ, bnet^amt^fsa^eligbl^d ); end; if hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4U" then begin movd( sem.addl^amt.info[ i ].amt^typ, bnet^amt^rx^d ); end; move( sem.addl^amt.info[ i ].crncy^cde, hlthcr^get^tkn.adnl^amt[ i ]. crncy^cde ); move( sem.addl^amt.info[ i ].typ^amt, hlthcr^get^tkn.adnl^amt[ i ].amt^sign ); call fixed^ascii^( sem.addl^amt.info[ i ].amt, hlthcr^get^tkn. adnl^amt[ i ].amt ); end; ! of if hlthcr^get^tkn if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, $len( sem.addl^amt. info ) ); addl^amt^bit^d := 1; end; end; ! of i := 0 to $max end; ! of if hiswtkn^get^tkn end; ! of if base24^rel^g >= 5 #DELETE 07851 /07875 SUB^CONVERT^AMT #ADD 08493 PSTM^FRMT^SEM^ADDL^DATA int .auto^substan^data^tkn( auto^substan^data^tkn^def ); int auto^substan^data^tkn^lgth; int found^auto^substan^data^tkn := 0; #ADD 08687 PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data, "00000" ); if sem.typ = sem^auth^request^d and pstm.pre^auth^opt = "P" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. partial^apprv^ind, "1" ); if base24^rel^g >= 5 then begin tkn^id ':=' auto^substan^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @auto^substan^data^tkn, auto^substan^data^tkn^lgth ) then begin if auto^substan^data^tkn.iias^ind = "1" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.iias^ind, "1" ) end; end; ! of if auto^substan^data^tkn end; ! of if release>= 5 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data <> "00000" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag, "61" ); movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.lgth, "05" ); end; #DELETE 08688 /08699 PSTM^FRMT^SEM^ADDL^DATA #ADD 09460 PSTM^FRMT^SEM^ADDL^DATA if ntwk^assign^tcc^g then begin movd( sem.addl^data.info.tran^cat^cde, " " ); end; #ADD 10021 SEM^FRMT^AMT^TO^PSTM^AMT int .txn^subtyp^tkn^ptr( txn^subtyp^tkn^def ); #REPLACE 10079 /10079 OFFSET 0 SUB^CONVERT^AMT $len(pct.crncy.in^cde) or sppt^multi^crncy^g then #ADD 10202 SUB^CONVERT^AMT tkn^add^lgth := 0; #ADD 10217 SUB^CONVERT^AMT for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ = bnet^amt^fsa^eligbl^d or sem.addl^amt.info[ i ].amt^typ = bnet^amt^rx^d then begin move( hlthcr^tkn.adnl^amt[ i ].acct^typ, sem.addl^amt.info[ i ].acct^typ ); move( hlthcr^tkn.adnl^amt[ i ].crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); move( hlthcr^tkn.adnl^amt[ i ].amt^sign, sem.addl^amt.info[ i ].typ^amt ); call ascii^fixed^( sem.addl^amt.info[ i ].amt, hlthcr^tkn.adnl^amt[ i ]. amt ); if sem.addl^amt.info[ i ].amt^typ = bnet^amt^fsa^eligbl^d then begin call ascii^fixed^( sem.addl^amt.info[ i ].amt, pstm.tran.amt^1 ); movd( hlthcr^tkn.adnl^amt[ i ].amt^typ, "4S" ); call tkn^main^convert ( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, txn^subtyp^tkn ); movd( txn^subtyp^tkn.txn^subtyp, hlthcr^trnst^auto^sub^d ); move( txn^subtyp^tkn.iss^proc^cde, sem.proc^cde ); end; ! of if sem.addl^amt.info[ i ].amt^typ if sem.addl^amt.info[ i ].amt^typ = bnet^amt^rx^d then begin movd( hlthcr^tkn.adnl^amt[ i ].amt^typ, "4U" ); end; ! of if sem.addl^amt.info[ i ].amt^typ hlthcr^tkn.num^adnl^amt := hlthcr^tkn.num^adnl^amt + 1; tkn^add^lgth := $len( hlthcr^tkn.adnl^amt[ i ] ) + tkn^add^lgth ; end; ! of if sem.addl^amt.info[ i ].amt^typ end; ! of for i := 0 #DELETE 10218 /10251 SUB^CONVERT^AMT #DELETE 10253 SUB^CONVERT^AMT #ADD 10258 SUB^CONVERT^AMT tkn^add^lgth := tkn^add^lgth + $len( hlthcr^tkn.num^adnl^amt ); #DELETE 10259 /10260 SUB^CONVERT^AMT #ADD 10298 SUB^CONVERT^AMT ! ! Check here to see if the txn^subtyp^tkn exists, if ! it does not, then add it. ! tkn^id ':=' txn^subtyp^tkn^id^d; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @txn^subtyp^tkn^ptr, tkn^lgth, ! ascii format flag !, pos^userdata ); if tkn^result = tkn^does^not^exist^l then begin if txn^subtyp^tkn <> blanks for $len( txn^subtyp^tkn ) then begin tkn^id ':=' txn^subtyp^tkn^id^d; tkn^result := tkn^add^info ( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^subtyp^tkn, $len( txn^subtyp^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^ ( 3156, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^ ( 3158, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3158 ); end; end; ! of if tkn^result end; ! of if txn^subtyp^tkn <> spaces end; !of if tkn^result = tkn^does^not^exist^l #DELETE 10299 /10347 SUB^CONVERT^AMT #ADD 12260 SEM^FRMT^XRESP^TO^PSTM^0210 begin #ADD 12261 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! The tag and subfield length are not set as the field was not ! sent in the original request, only logged to allow the value ! to be preserved for a subsequent reversal. ! move( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, rqst.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data ); end; #REPLACE 12503 SEM^FRMT^XRESP^TO^PSTM^0210 if ( sem.addl^data.info.cvc^sub^fld^87.tag = "87" and #ADD 12508 SEM^FRMT^XRESP^TO^PSTM^0210 tag^data ) * [ " " ] ] ) ) or auth^inst^bit^d then #DELETE 12509 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12520 SEM^FRMT^XRESP^TO^PSTM^0210 if auth^inst^bit^d then begin if rqst.auth^inst.cde = "000000" then begin ! ! Issuer is not available for processing ! movd( pos^data1^tkn.resp^src^rsn^cde, "4" ); end else begin ! ! Third party agent ! movd( pos^data1^tkn.resp^src^rsn^cde, "A" ); end; end else begin ! ! Response provided by issuer ! movd( pos^data1^tkn.resp^src^rsn^cde, "5" ); end; #ADD 12633 SEM^FRMT^XRESP^TO^PSTM^0210 if auth^inst^bit^d then begin if rqst.auth^inst.cde = "000000" then begin ! ! Issuer is not available for processing ! movd( pos^data1^tkn.resp^src^rsn^cde, "4" ); end else begin ! ! Third party agent ! movd( pos^data1^tkn.resp^src^rsn^cde, "A" ); end; end else begin ! ! Response provided by issuer ! movd( pos^data1^tkn.resp^src^rsn^cde, "5" ); end; #ADD 13685 SEM^FRMT^XRQST^TO^PSTM^0200 wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") #ADD 13686 SEM^FRMT^XRQST^TO^PSTM^0200 .auto^substan^data^tkn( auto^substan^data^tkn^def ), #ADD 13709 SEM^FRMT^XRQST^TO^PSTM^0200 struct .txn^spcf^data^tkn ( txn^spcf^data^tkn^def ); #ADD 13878 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" then begin if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind = "1" then begin ! ! initialize the auto-substantiation data token. ! call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, auto^substan^data^tkn ); movd ( auto^substan^data^tkn.iias^ind, "1" ); end; end; if auto^substan^data^tkn <> [ $len( auto^substan^data^tkn ) * [ " " ] ] then begin tkn^id ':=' auto^substan^data^tkn^id^d; tkn^add^lgth := $offset( auto^substan^data^tkn.user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, auto^substan^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3258, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3260, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result end; #ADD 13941 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Initialize the Transaction Specific Data token. ! call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, txn^subtyp^tkn ); if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag = "77" then begin if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C01" then begin ! ! person to person ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C1" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C02" then begin ! ! rebate ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C2" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C03" then begin ! ! load value ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C3" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C04" then begin ! ! gaming re-pay ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "GP" ); end else begin ! ! reason other than defined ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "FD" ); end; tkn^add^lgth := $offset(txn^spcf^data^tkn. related^txn^data.src^of^fund ); end; ! of if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld if txn^spcf^data^tkn <> blanks for tkn^add^lgth then begin tkn^id ':=' txn^spcf^data^tkn^id^d; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^spcf^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3262, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3264, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3264 ); end; end; ! of if tkn^result end; ! of if txn^spcf^data^tkn <> blanks #REPLACE 14619 OFFSET 1 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[3] = "2" then #ADD 16327 UTIL^ADD^SWI^CMN^DATA^TKN if addl^data^bit^d then ! DE 48 begin if sem.addl^data.info.acct^cat^sub^fld^38. tag = "38" then begin move( swi^cmn^data^tkn.crd^lvl^prod^id^val, sem.addl^data.info.acct^cat^sub^fld^38. tag^data ); end; end; #ADD 16452 UTIL^ADD^SWI^CMN^DATA^TKN if addl^data^bit^d then ! DE 48 begin if sem.addl^data.info.acct^cat^sub^fld^38.tag = "38" then begin move( tkn^buf^ptr.crd^lvl^prod^id^val, sem.addl^data.info.acct^cat^sub^fld^38. tag^data ); end; end; #ADD 17023 UTIL^COLLAPSE^SEM if hdr.addl^data.info. crd^vrfy^mthd^sub^fld^20.tag = "20" then begin call ascii^integer( hdr.addl^data.info. crd^vrfy^mthd^sub^fld^20. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. crd^vrfy^mthd^sub^fld^20.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; if hdr.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag = "34" then begin call ascii^integer( hdr.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; if hdr.addl^data.info. ncff^rqst^resp^sub^fld^35.tag = "35" then begin call ascii^integer( hdr.addl^data.info. ncff^rqst^resp^sub^fld^35. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. ncff^rqst^resp^sub^fld^35.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 17326 UTIL^COLLAPSE^SEM if hdr.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag = "77" then begin call ascii^integer( hdr.addl^data.info. pmnt^txn^typ^ind^sub^fld^77. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 17341 UTIL^COLLAPSE^SEM if hdr.addl^data.info. chip^bit^err^rslts^sub^fld^79. tag = "79" then begin call ascii^integer ( hdr.addl^data.info. chip^bit^err^rslts^sub^fld^79. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. chip^bit^err^rslts^sub^fld^79.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 18502 UTIL^EXPAND^SEM if ptr[ length ] = "20" then begin movl( sem^ptr.addl^data.info. crd^vrfy^mthd^sub^fld^20.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else if ptr[ length ] = "34" then begin movl( sem^ptr.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else if ptr[ length ] = "35" then begin movl( sem^ptr.addl^data.info. ncff^rqst^resp^sub^fld^35.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 18575 UTIL^EXPAND^SEM while cnt <= num^idx do #DELETE 18576 UTIL^EXPAND^SEM #REPLACE 18584 UTIL^EXPAND^SEM @on^behalf^ptr '+' 8; #ADD 18634 UTIL^EXPAND^SEM if ptr[ length ] = "77" then begin movl( sem^ptr.addl^data.info. pmnt^txn^typ^ind^sub^fld^77. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 18643 UTIL^EXPAND^SEM if ptr[ length ] = "79" then begin movl( sem^ptr.addl^data.info. chip^bit^err^rslts^sub^fld^79. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 19866 UTIL^GENERATE^APPROVAL^CODE !# CRNCY^CDE : Original Currency Code from the PSTM # #ADD 19878 UTIL^GENERATE^APPROVAL^CODE !# CUST^ID^IND : Customer ID Indicator # #REPLACE 19885 UTIL^GET^BNIIF prefix, prefix^lgth, avs^typ, cust^id^ind, crncy^cde ) variable; #ADD 19887 UTIL^GET^BNIIF string .crncy^cde; string .cust^id^ind; #ADD 19906 UTIL^GET^BNIIF int idx := -1; #ADD 19920 UTIL^GET^BNIIF begin if bniif^tbl.mci^id <> zeroes for $len( bniif^tbl.mci^id ) and bniif^tbl.mci^id <> blanks for $len( bniif^tbl.mci^id ) then begin group ':=' bniif^tbl.mci^id for $len( bniif^tbl.mci^id ); end; ! of if bniif^tbl.mci^id <> zeroes if bniif^tbl.cust^id^ind = "2" and ( bniif^tbl.mc^cust^id^ctr > 0 and bniif^tbl.mc^cust^id^ctr <= 6 ) then begin idx := -1; ! ! Loop thru the bniif^tbl until a match on ! crncy^cde is found. ! while ( idx := idx + 1 ) < bniif^tbl.mc^cust^id^ctr and bniif^tbl.mc^cust^id[ idx ]. crncy^cde <> crncy^cde for $len( bniif^tbl.mc^cust^id[ idx ]. crncy^cde ) do begin ! ! Do nothing. ! end; ! of while ( idx := idx + 1 ) < if idx < bniif^tbl.mc^cust^id^ctr and ( bniif^tbl.mc^cust^id[ idx ].num <> zeroes for $len( bniif^tbl.mc^cust^id[ idx ]. num ) and bniif^tbl.mc^cust^id[ idx ].num <> blanks for $len( bniif^tbl.mc^cust^id[ idx ]. num ) ) then begin group ':=' bniif^tbl.mc^cust^id[ idx ].num for $len( bniif^tbl.mc^cust^id[ idx ]. num ); end; ! of if idx < bniif^tbl.mc^cust^... end; ! of if bniif^tbl.cust^id^ind = "2" and end; ! of if $param( group ) then #DELETE 19921 UTIL^GET^BNIIF #ADD 19945 UTIL^GET^BNIIF if $param( cust^id^ind ) then begin mov^ ( cust^id^ind, bniif^tbl.cust^id^ind ); end; #ADD 24994 UTIL^SWI^TKN^INIT int .sbit^map := wordaddr( @sem.sbit^map ); #ADD 24997 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "08"; #DELETE 24998 UTIL^SWI^TKN^INIT #ADD 25010 UTIL^SWI^TKN^INIT begin move( bnet^tkn^buf.advice^rsn^cde, sem.advice^cde.reason^cde ); move( bnet^tkn^buf.advc^detl^cde, sem.advice^cde.detail^cde ); end else begin mov^( bnet^tkn^buf.advice^rsn^cde, blanks ); mov^( bnet^tkn^buf.advc^detl^cde, blanks ); end; #DELETE 25011 /25013 UTIL^SWI^TKN^INIT #ADD 25114 UTIL^SWI^TKN^INIT if sem.addl^data.info. chip^bit^err^rslts^sub^fld^79.tag = "79" then begin movl( bnet^tkn^buf.chip^bit^err^rslts, sem.addl^data.info.chip^bit^err^rslts^sub^fld^79. tag^data, $len( bnet^tkn^buf.chip^bit^err^rslts ) ); end; #ADD 25140 UTIL^SWI^TKN^INIT if auth^inst^bit^d then begin move( bnet^tkn^buf.auth^agent^id^cde, sem.auth^inst.cde ); end; #ADD 25225 UTIL^SWI^TKN^UPDT ! ! The token must end on a word boundary ! if swi^tkn^lgth.<15> then begin swi^tkn^lgth := swi^tkn^lgth + 1; end; #ADD 25404 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.auth^agent^id^cde <> blanks for $len( bnet^tkn^buf.auth^agent^id^cde ) then begin movl( bnet^tkn.auth^agent^id^cde, bnet^tkn^buf.auth^agent^id^cde, $len( bnet^tkn.auth^agent^id^cde ) ); end; ! of if bnet^tkn^buf.auth^agent^id^cde if bnet^tkn^buf.chip^bit^err^rslts <> blanks for $len( bnet^tkn^buf.chip^bit^err^rslts ) then begin movl( bnet^tkn.chip^bit^err^rslts, bnet^tkn^buf.chip^bit^err^rslts, $len( bnet^tkn.chip^bit^err^rslts ) ); end; ! of if bnet^tkn^buf.chip^bit^err^rslts if bnet^tkn^buf.advc^detl^cde <> blanks for $len( bnet^tkn^buf.advc^detl^cde ) then begin movl( bnet^tkn.advc^detl^cde , bnet^tkn^buf.advc^detl^cde , $len( bnet^tkn.advc^detl^cde ) ); end; ! of if bnet^tkn^buf.advc^detl^cde #ENDSCN = SW0B446 !#CMP2.28 08/02/07 BNETS 6089 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6089 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6089 * ******************************************************************************** #SCN = SW0B447 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6089 #NEWVERSION = 6090 #ADD D000260j ! 01AUG2007 SaderC ! Symptom: BankNet Acquiring Institution ID Enhancement ! Problem: None. ! Fix: Modified the interface to support different MasterCard ! assigned customer IDs to be used for the same ! institution, based on transaction currency. ! Modified procs: init^bniif ! pstm^0200^request ! pstm^0220^force^post ! Dependency: BA10SC04 subvolume. New files: BII0807M, BII0807R and ! BII0807S. Apply fixes to BNETDDLS, BNETLIBS and ! BNETS. Run Make. Make the BNIIF conversion using ! BII0807M. Run the BNIIF conversion using BII0807R. ! Replace BNETUPDT. New interface documentation file ! BNETMNWD (Microsoft Word) supersedes BNETMAN. ! Reference: WO #060925-03. ! 01AUG2007 SaderC ! Symptom: BankNet Cardholder Billing Currency per BIN Enhancement ! Problem: None ! Fix: Added support for new LCONF parameter SPPT-MULTI-CRNCY ! (Support Multi-Currency). ! Procs modified: cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^paramproc ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Replace BNETUPDT. New interface documentation file ! BNETMNWD (Microsoft Word) supersedes BNETMAN. ! Reference: WO #070425-01 ! 01AUG2007 swiftd ! Symptom: Banknet Release 07.2 Mandates ! Problem: None ! Fix: 1. Added code to store and retrieve new global variable ! ntwk^assign^tcc^g. ! 2. Added support for new values that may be received in ! DE 48 SE 71 to the existing on-behalf processing. ! 3. Added processing for MCC109 specific data in a 0312 ! file request response. ! Procs modified: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! sem^file^request^response ! sem^request ! Dependency: New files: ILB0807M, ILB0807R, and ILB0807S. ! Apply fixes to BNETEMVS, BNETDDLS, BNETG, BNETLIBS, ! BNETS, COBTKN, DDLPSTKN, PSTKNCVS, PSTKNID, RQBNRLFS, ! and SCRNBRLF. Run Make. Make the ILF conversion using ! ILB0807M. Run the ILF conversion using ILB0807R. ! Replace BNETLOGM and BNETUPDT. New interface ! documentation file BNETMNWD (Microsoft Word) supersedes ! BNETMAN. ! Reference: WO #070419-01 #ADD D0259901 CMD^WARMBOOT^STORE^GLOBALS store^d( sppt^multi^crncy^g ); store^d( ntwk^assign^tcc^g ); store^d( deny^if^atc^discrp^g ); #ADD D0259904 CMD^WARMBOOT^STORE^GLOBALS ntwk^assign^tcc^g := false; deny^if^atc^discrp^g := false; sppt^multi^crncy^g := false; #ADD D0259907 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( ntwk^assign^tcc^g ); retrieve^d( deny^if^atc^discrp^g ); retrieve^d( sppt^multi^crncy^g ); #ADD 02973R02 INIT^BNIIF move( bniif^entry.cust^id^ind, bniif.cust^id^ind ); set ( k, 0 ); for j := 0 to ( $occurs( bniif.mc^cust^id ) - 1 ) do begin if ( bniif.mc^cust^id[ j ].num <> blanks for $len( bniif.mc^cust^id.num ) ) and ( bniif.mc^cust^id[ j ].num <> nulls for $len( bniif.mc^cust^id.num ) ) then begin move( bniif^entry.mc^cust^id[ k ].num, bniif.mc^cust^id[ j ].num ); move( bniif^entry.mc^cust^id[ k ].crncy^cde, bniif.mc^cust^id[ j ].crncy^cde ); increment^d( k ); end; ! of if ( bniif.mc^cust^id[ j ].num <> blanks end; ! of for j := 0 to ( $occurs( bniif.mc^.... bniif^entry.mc^cust^id^ctr := k; ! ! Initialize the remaining mc cust id entries in the ! table. ! if k < $occurs( bniif.mc^cust^id ) then for j := k to ( $occurs( bniif.mc^cust^id ) - 1 ) do begin mov^( bniif^entry.mc^cust^id[ j ].num, blanks ); mov^( bniif^entry.mc^cust^id[ j ].crncy^cde, blanks ); end; ! of for j := k to ( $occurs( bniif.mc^.... #ADD D0394501 INIT^PARAMPROC "P", "NTWK-ASSIGN-TCC ", "P", "DENY-IF-ATC-DISCRP ", #ADD D0394502 INIT^PARAMPROC "P", "SPPT-MULTI-CRNCY ", #ADD D039960B INIT^PARAMPROC ! ! NTWK-ASSIGN-TCC ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin ntwk^assign^tcc^g := true; end; end; ! of if not ferror ! ! DENY-IF-ATC-DISCRP ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin deny^if^atc^discrp^g := true; end; end; ! of if not ferror ! ! SPPT-MULTI-CRNCY ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin sppt^multi^crncy^g := true; end; ! of if lconf.param^msg.ptxt = "Y" end; ! of if not ferror #ADD 04721j05 PSTM^0200^REQUEST string cust^id^ind := "0"; #REPLACE 04751(01/04751(01 OFFSET 0 PSTM^0200^REQUEST if not util^get^bniif( fiid^l, pstm.term^fiid, susp.prikey.term^id, logon^acq, !logon^iss!, logon^cr, logon^db, !service^typ!, !traffic^typ!, !security!, !prefix!, !prefix^lgth!, avs^typ, cust^id^ind, pstm.orig^crncy^cde ) then #DELETE 04751(02/04751(04 PSTM^0200^REQUEST #REPLACE 04808(02/04808(02 OFFSET 0 PSTM^0200^REQUEST avs^typ, cust^id^ind ) then #ADD 04986j02 PSTM^0220^FORCE^POST string cust^id^ind := "0"; #REPLACE 04999R01/04999R01 OFFSET 0 PSTM^0220^FORCE^POST if not util^get^bniif( fiid^l, pstm.term^fiid, susp.prikey.term^id, !logon^acq!, !logon^iss!, !logon^cr!, !logon^db!, !service^typ!, !traffic^typ!, !security!, !prefix!, !prefix^lgth!, avs^typ, cust^id^ind, pstm.orig^crncy^cde ) then #DELETE 04999(00/04999(04 PSTM^0220^FORCE^POST #REPLACE 05011(02/05011(02 OFFSET 0 PSTM^0220^FORCE^POST avs^typ, cust^id^ind ) then #ADD D060992F SEM^FILE^REQUEST^RESPONSE if frqst.file^name.nam = "MCC109" then begin move( bnrlf.mcc.acct^num, frqst.file^rec.mcc109.paypass^acct^num ); move( bnrlf.mcc.crd^seq^num, frqst.file^rec.mcc109.crd^seq^num ); move( bnrlf.mcc.crd^exp^dat, frqst.file^rec.mcc109.acct^exp^dat ); move( bnrlf.mcc.atc^val, frqst.file^rec.mcc109.atc^val ); move( bnrlf.mcc.entry^reason, frqst.file^rec.mcc109.entry^chng^ind ); move( bnrlf.mcc.dat^last^activity, frqst.file^rec.mcc109.last^txn^dat ); move( bnrlf.mcc.tim^last^activity, frqst.file^rec.mcc109.last^txn^tim ); end; ! of if frqst.file^name.nam = "MCC109" #ADD 06612]0H SEM^REQUEST if deny^if^atc^discrp^g then begin if sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag = "34" and ( sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind = atc^greater^than^max^d or sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind = atc^less^than^min^d ) then begin if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to ! 'Y' and frmt^err = false, then forward ! to Router Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frmt^err call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frwd^dcln^advc^g end; ! of if tag = "34" end; ! of if deny^if^atc^dicsrp^g #REPLACE D066120E/D066120E OFFSET 0 SEM^REQUEST tag^data[ 0 ].svc = "12" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "13" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "15" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "16" ) and #REPLACE D066120g/D066120g OFFSET 0 SEM^REQUEST tag^data[ 1 ].svc = "12" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "13" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "15" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "16" ) and #ENDSCN = SW0B447 !#CMP2.28 08/02/07 RQBNIIFS6007 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNIIFS RQBNIIFS 6007 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNIIFS RQBNIIFS 6007 * ******************************************************************************** #SCN = SW0B448 , FILEID = RQBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00017G0D * 01AUG2007 SaderC * Symptom: BankNet Acquiring Institution ID Enhancement * Problem: None. * Fix: Modified to support CUST-ID-IND and six * MC-CUST-IDs and their corresponding CRNCY-CDEs. * Added paragraphs: 400-MOVE-MC-CUST-ID * 400-SAVE-MC-CUST-ID * Modified paragraphs: 400-MOVE-RECORD * 400-SAVE-RECORD * 480-DATA-CHECK * 550-TABLE-LOOK-UP * 595-CLEAR-DATA * 800-BACK-ONE-OVERLAY * 800-NEXT-OVERLAY * Dependency: BA10SC04 subvolume. New files: BII0807M, * BII0807R and BII0807S. Apply fixes to BNETDDLS, * BNETLIBS and BNETS. Run Make. Make the BNIIF * conversion using BII0807M. Run the BNIIF * conversion using BII0807R. Replace BNETUPDT. * New interface documentation file BNETMNWD * (Microsoft Word) supersedes BNETMAN. * Reference: WO #060925-03. #ADD 00031D0B DATA DIVISION 01 WS-ID-IND-DESCR PIC X(18) VALUE SPACES. * * The data in this table is used to fill the screen customer * IDs and currency codes. * 01 WS-RSLTS-ID. 05 WS-MC-CUST-ID OCCURS 6 TIMES. 10 WS-NUM PIC X(6). 10 WS-CRNCY-CDE PIC X(3). 10 FILLER PIC X. 01 WS-MC-CUST-ID-CNT PIC S9(4) COMP VALUE 1. #REPLACE 00063G02/00063G03 DATA DIVISION 03 REC-IMAGE-BNIIF PIC X(936). 03 WS-FILLER PIC X(88). #ADD 00320D03 400-MOVE-RECORD MOVE WS-MC-CUST-ID-CNT TO J. PERFORM 400-MOVE-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I > 6. #ADD 00323D04 400-SAVE-RECORD MOVE WS-MC-CUST-ID-CNT TO J PERFORM 400-SAVE-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I > 6. #ADD 00351D0H 440-SET-UP-FETCH * * The occurrences of customer ID and currency code information * on the screen will need to be updated with the current * BNIIF customer ID and currency code information. * 400-MOVE-MC-CUST-ID. MOVE NUM OF MC-CUST-ID(J) TO WS-NUM OF WS-MC-CUST-ID(I). MOVE CRNCY-CDE OF MC-CUST-ID(J) TO WS-CRNCY-CDE OF WS-MC-CUST-ID(I). ADD 1 TO J. * * All changes to the screen occurrences of customer ID and * currency code will need to be moved to the BNIIF customer ID * and currency code information. * 400-SAVE-MC-CUST-ID. MOVE WS-NUM OF WS-MC-CUST-ID(I) TO NUM OF MC-CUST-ID(J). MOVE WS-CRNCY-CDE OF WS-MC-CUST-ID(I) TO CRNCY-CDE OF MC-CUST-ID(J). ADD 1 TO J. #ADD 00420 480-DATA-CHECK IF CUST-ID-IND NOT = "0" AND NOT = "1" AND NOT = "2" AND NOT = "3" MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN B-CUST-ID-IND IF MOVE-MESSAGE MOVE "CUST ID IND MUST BE 0, 1, 2 OR 3. " TO ERR-TXT SET NEW-CURSOR AT B-CUST-ID-IND MOVE "N" TO FLAG-MOVE. #ADD 00438 570-DISPLAY-OVERLAY MOVE SPACES TO WS-ID-IND-DESCR. IF CUST-ID-IND = "0" MOVE "(TERM FIID)" TO WS-ID-IND-DESCR ELSE IF CUST-ID-IND = "1" MOVE "(PTD ACQ INST ID)" TO WS-ID-IND-DESCR ELSE IF CUST-ID-IND = "2" MOVE "(CRNCY CDE)" TO WS-ID-IND-DESCR ELSE IF CUST-ID-IND = "3" MOVE "(ICFE ACQ INST ID)" TO WS-ID-IND-DESCR ELSE MOVE "(****************)" TO WS-ID-IND-DESCR. #ADD 00496D03 595-CLEAR-DATA MOVE ZEROES TO CUST-ID-IND. MOVE WS-MC-CUST-ID-CNT TO J. PERFORM 400-MOVE-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I > 6. #ADD 00586D05 800-BACK-ONE-OVERLAY MOVE WS-MC-CUST-ID-CNT TO J PERFORM 400-MOVE-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I > 6 #ADD 00626D05 800-NEXT-OVERLAY MOVE WS-MC-CUST-ID-CNT TO J PERFORM 400-MOVE-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I > 6 #ENDSCN = SW0B448 !#CMP2.28 08/02/07 SVBNIIFS6010 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNIIFS SVBNIIFS 6010 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNIIFS SVBNIIFS 6010 * ******************************************************************************** #SCN = SW0B450 , FILEID = SVBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6010 #NEWVERSION = 6011 #ADD 00012J0F * 01AUG2007 SaderC * Symptom: BankNet Acquiring Institution ID Enhancement * Problem: None. * Fix: Modified to support six MC-CUST-IDs and their * corresponding CRNCY-CDEs. * Added paragraphs: 700-SORT-BY-MC-CUST-ID * 705-REORDER-BY-MC-CUST-ID * Modified paragraphs: 310-UPDATE-REC * 500-ADD-RCD * Dependency: BA10SC04 subvolume. New files: BII0807M, * BII0807R and BII0807S. Apply fixes to BNETDDLS, * BNETLIBS and BNETS. Run Make. Make the BNIIF * conversion using BII0807M. Run the BNIIF * conversion using BII0807R. Replace BNETUPDT. * New interface documentation file BNETMNWD * (Microsoft Word) supersedes BNETMAN. * Reference: WO #060925-03. #REPLACE 00092J02/00092J03 DATA DIVISION 03 REC-IMAGE-BNIIF PIC X(936). 03 LEFTOVER PIC X(88). #REPLACE 00099J01 DATA DIVISION 02 FILLER PIC X(932). #REPLACE 00105J01 DATA DIVISION 02 FILLER PIC X(932). #REPLACE 00111J01 DATA DIVISION 02 FILLER PIC X(932). #REPLACE 00117J01 DATA DIVISION 02 FILLER PIC X(932). #REPLACE 00123J01 DATA DIVISION 02 FILLER PIC X(932). #REPLACE 00141J01 DATA DIVISION 01 WS-RECORD-HOLD PIC X(936). #ADD 00263 DATA DIVISION 05 MAX-MC-CUST-ID PIC S9(4) COMP VALUE 6. 05 WS-TEMP-MC-CUST-ID. 10 WS-NUM PIC X(6) VALUE SPACES. 10 WS-CRNCY-CDE PIC X(3) VALUE SPACES. #ADD 00424G03 310-UPDATE-REC PERFORM 700-SORT-BY-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I >= MAX-MC-CUST-ID #ADD 00493G03 500-ADD-RCD PERFORM 700-SORT-BY-MC-CUST-ID VARYING I FROM 1 BY 1 UNTIL I >= MAX-MC-CUST-ID #ADD 00603G01 610-READ-BNIIF * * Start of internal loop comparing the I occurrence of * customer ID to each J occurrence of customer ID to determine * which is less. When the total sort process is done all * empty (space filled) customer IDs will be at the bottom of * the table while the rest of the customer IDs are sorted in * ascending order. * 700-SORT-BY-MC-CUST-ID. MOVE I TO J. ADD 1 TO J. PERFORM 705-REORDER-MC-CUST-ID VARYING J FROM J BY 1 UNTIL J > MAX-MC-CUST-ID. #ADD 00603G0E 700-SORT-BY-PREFIX-NUM * * All empty customer ID occurrences are moved to the bottom, * while sorting the customer IDs in ascending order. * 705-REORDER-MC-CUST-ID. IF NUM OF MC-CUST-ID(I) = SPACES AND NUM OF MC-CUST-ID(J) NOT = SPACES MOVE MC-CUST-ID(I) TO WS-TEMP-MC-CUST-ID MOVE MC-CUST-ID(J) TO MC-CUST-ID(I) MOVE WS-TEMP-MC-CUST-ID TO MC-CUST-ID(J). #ENDSCN = SW0B450 !#CMP2.28 08/02/07 RQBNRLFS6020 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6020 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6020 * ******************************************************************************** #SCN = SW0B451 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6020 #NEWVERSION = 6021 #ADD 00018T0h * 01AUG2007 bensone * Symptom: Banknet Release 07.2 Mandates. * Problem: None. * Fix: Added support for MCC109 as the PayPass * Application Transaction Counter (ATC) File. * Modified paragraphs: 100-BEGIN * 200-GET-DATA * 200-ACCEPT-SCREEN * 240-FETCH-RECORD * 250-ADD-RECORD * 260-DELETE-RECORD * 270-UPDATE-RECORD * 400-SELECT-FUNCTION * 480-DATA-CHECK * 570-DISPLAY-OVERLAY * 595-CLEAR-DATA * 595-SCREEN-INIT * 800-GO-TO-PERUSAL * 800-SET-OVERLAY * Added paragraphs : 200-ACCEPT-SCREEN-OVERLAY-16 * 200-ACCEPT-SCREEN-OVERLAY-17 * 400-SELECT-MCC109 * 570-DISPLAY-OVERLAY-16 * 570-DISPLAY-OVERLAY-17 * Dependency: BA10SC04 subvolume. * New files: ILB0807M, ILB0807R, and ILB0807S. * Apply fixes to BNETEMVS, BNETDDLS, BNETG, * BNETLIBS, BNETS, COBTKN, DDLPSTKN, PSTKNCVS, * PSTKNID, RQBNRLFS and SCRNBRLF. Run Make. * Make the ILF conversion using ILB0807M. * Run the ILF conversion using ILB0807R. * Replace BNETLOGM, BNETMAN and BNETUPDT. * Reference: WO #070419-01. #ADD 00127S08 DATA DIVISION 05 RLF16 PIC X(4) VALUE "BNET". 05 RLF17 PIC X(4) VALUE "BNET". #REPLACE 00130S01 DATA DIVISION 05 PROD-DESC PIC X(4) OCCURS 17 TIMES. #ADD 00173S04 DATA DIVISION COPY SC-MCC109-1 OF =SWBNET_SCNBRLFO. #ADD 00173S0A DATA DIVISION COPY SC-MCC109-P OF =SWBNET_SCNBRLFO. #REPLACE 00203S01 100-BEGIN MOVE 8 TO WS-PAGE-OF. #REPLACE 00290S28/00290S28 OFFSET 0 200-GET-DATA DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 16 PERFORM ONE OF 300-VALIDATE-DATA , 900-PRINT-SCREEN , 240-FETCH-RECORD , 250-ADD-RECORD , 260-DELETE-RECORD , 270-UPDATE-RECORD , 800-GO-TO-SCREEN , 895-CLEAR-DATA , 800-GO-TO-PERUSAL , 800-FILE-REQ-PAGE-BACK , 595-KEYS-DISPLAYED , 295-CHANGE-LOGICAL-NET , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS ELSE IF WS-OVERLAY = 17 PERFORM ONE OF 420-REQUEST-DATA , 423-DELETE-DATA , 900-PRINT-SCREEN , 425-NEXT-PAGE , 800-SET-NEXT-VALID-OVERLAY , 800-PERUSAL-PAGE-BACK , 590-KEYS-DISPLAYED , 800-EXIT , 990-INVALID-MENU-KEY , 800-QUIT , DEPENDING ON TERMINATION-STATUS. #ADD 00307S0R 200-ACCEPT-SCREEN IF WS-OVERLAY = 16 PERFORM 200-ACCEPT-SCREEN-OVERLAY-16 ELSE IF WS-OVERLAY = 17 PERFORM 200-ACCEPT-SCREEN-OVERLAY-17 ELSE #ADD 00360S15 200-ACCEPT-SCREEN-OVERLAY-15 200-ACCEPT-SCREEN-OVERLAY-16. ACCEPT SC-MAIN, OVERLAY-16 UNTIL ENTER-KEY, PRINT-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY7, CLEAR-KEY, FKEY9, FKEY11, FKEY12, FKEY13 EXIT-KEY, ESCAPE (FKEY6, FKEY7, FKEY14 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-17. ACCEPT SC-MAIN, OVERLAY-17 UNTIL ENTER-KEY, FKEY4, PRINT-KEY, FKEY6, FKEY9, FKEY11, FKEY12, EXIT-KEY, ESCAPE ( FKEY2 FKEY3, FKEY5, FKEY7, FKEY8, FKEY13 THRU FKEY15 SFKEY1 THRU SFKEY8, SFKEY15 ), ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #REPLACE 00408S0A/00408S0A OFFSET 0 240-FETCH-RECORD MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 16 MOVE "MCC109 " TO FILE-NAME OF FRQST OF PATH-RQST. #REPLACE 00421S0D/00421S0D OFFSET 0 250-ADD-RECORD MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 16 MOVE "MCC109 " TO FILE-NAME OF FRQST OF PATH-RQST. #REPLACE 00431S0D/00431S0D OFFSET 0 260-DELETE-RECORD MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 16 MOVE "MCC109 " TO FILE-NAME OF FRQST OF PATH-RQST. #REPLACE 00441S0E/00441S0E OFFSET 0 270-UPDATE-RECORD MOVE "MCC108 " TO FILE-NAME OF FRQST OF PATH-RQST ELSE IF WS-OVERLAY = 16 MOVE "MCC109 " TO FILE-NAME OF FRQST OF PATH-RQST. #REPLACE 00444S04 270-UPDATE-RECORD PERFORM 575-FILL-A-MESSAGE. #REPLACE 00444S09/00444S0A 270-UPDATE-RECORD PERFORM 400-MOVE-RECORD. PERFORM 990-DISPLAY-RESPONSE. #ADD 00715SOu 480-DATA-CHECK * PAYPASS ACCOUNT NUMBER BLANK IF WS-OVERLAY = 16 IF PAYPASS-ACCT-NUM OF MCC109 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-ACCT-NUM-16 IF MOVE-MESSAGE MOVE "PLEASE ENTER A VALID ACCOUNT NUMBER" TO ERR-TXT SET NEW-CURSOR AT B-PAYPASS-ACCT-NUM-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS ACCOUNT NUMBER LEFT JUSTIFIED IF WS-OVERLAY = 16 IF PAYPASS-ACCT-NUM OF MCC109 OF PATH-RQST NOT = SPACES MOVE PAYPASS-ACCT-NUM OF MCC109 OF PATH-RQST TO WS-ACCT-NUM IF DIGIT (1) = SPACE MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-ACCT-NUM-16 IF MOVE-MESSAGE MOVE "ACCOUNT NUMBER MUST BE LEFT JUSTIFIED" TO ERR-TXT SET NEW-CURSOR AT B-PAYPASS-ACCT-NUM-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS ACCOUNT NUMBER EMBEDDED SPACES/NOT NUMERIC IF WS-OVERLAY = 16 IF PAYPASS-ACCT-NUM OF MCC109 OF PATH-RQST NOT = SPACES AND MOVE-MESSAGE MOVE SPACES TO WS-ACCT-NUM MOVE PAYPASS-ACCT-NUM OF MCC109 OF PATH-RQST TO WS-ACCT-NUM MOVE WC-DO-NOT-MOVE TO DIGIT-FLAG MOVE WC-MOVE TO ACCT-FLAG PERFORM 480-ACCT-NUM-CHECK VARYING I FROM 1 BY 1 UNTIL I > 19 IF ACCT-FLAG = WC-BAD-DATA MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PAYPASS-ACCT-NUM-16 IF MOVE-MESSAGE SET NEW-CURSOR AT B-PAYPASS-ACCT-NUM-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS CARD SEQUENCE NUMBER NOT NUMERIC - Default of 0 IF WS-OVERLAY = 16 IF CRD-SEQ-NUM OF MCC109 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-CRD-SEQ-NUM-16 IF MOVE-MESSAGE MOVE "MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-CRD-SEQ-NUM-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS ACCOUNT EXPIRATION DATE NOT NUMERIC IF WS-OVERLAY = 16 IF ACCT-EXP-DAT OF MCC109 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-EXP-DAT-16 IF MOVE-MESSAGE MOVE "MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-EXP-DAT-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. * PAYPASS ACCOUNT EXPIRATION DATE FORMAT = YYMM IF WS-OVERLAY = 16 IF ACCT-EXP-DAT OF MCC109 OF PATH-RQST NUMERIC MOVE ACCT-EXP-DAT OF MCC109 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-EXP-DAT-16 IF MOVE-MESSAGE MOVE "ACCOUNT EXPIRATION DATE MUST BE 'YYMM' - "FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-EXP-DAT-16 MOVE "N" TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ACCT-EXP-DAT-16 IF MOVE-MESSAGE MOVE "ACCOUNT EXPIRATION DATE MUST BE 'YYMM' - "FORMAT" TO ERR-TXT SET NEW-CURSOR AT B-ACCT-EXP-DAT-16 MOVE "N" TO FLAG-MOVE. * PAYPASS APPLICATION TRANSACTION COUNTER VALUE NOT NUMERIC IF WS-OVERLAY = 16 IF ( FILE-UPDT-CDE OF FRQST = "1" OR FILE-UPDT-CDE OF FRQST = "2" ) IF ATC-VAL OF MCC109 OF PATH-RQST NOT NUMERIC MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-ATC-VAL-16 IF MOVE-MESSAGE MOVE "MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT B-ATC-VAL-16 MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. #DELETE 01011 /01012 400-SELECT-FUNCTION #ADD 01025S08 400-SELECT-FUNCTION 400-SELECT-MCC109, 300-NULL-ENTRY, #ADD 01048S0U 400-SELECT-MCC108-ACCOUNTS 400-SELECT-MCC109. MOVE 2 TO WS-PAGE-NUMBER. MOVE 16 TO WS-OVERLAY. PERFORM 990-DISPLAY-MSG. PERFORM 595-CLEAR-DATA. PERFORM 570-DISPLAY-OVERLAY. #ADD 01138T09 570-DISPLAY-OVERLAY ELSE IF FILE-NAME OF BNRLF = "MCC109" PERFORM 570-DISPLAY-OVERLAY-17 #ADD 01138S0c 570-DISPLAY-OVERLAY IF WS-OVERLAY = 16 PERFORM 570-DISPLAY-OVERLAY-16 ELSE IF WS-OVERLAY = 17 PERFORM 570-DISPLAY-OVERLAY-17 ELSE #ADD 01200S1w 570-DISPLAY-OVERLAY-15 570-DISPLAY-OVERLAY-16. MOVE "MCC109 FILE REQUEST " TO WS-TITLE. MOVE "F1-ENTER F2-READ F3-ADD F4- DELETE F5-UPDATE F1 - "2-HELP F16-EXIT" TO WS-VARIABLE-INSTRUCTIONS. MOVE ZEROES TO CRD-SEQ-NUM OF MCC109 OF PATH-RQST. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-16 AT OVERLAY-AREA. DISPLAY OVERLAY-16. SET NEW-CURSOR AT B-PAYPASS-ACCT-NUM-16. 570-DISPLAY-OVERLAY-17. MOVE "FILE REQUEST PERUSAL " TO WS-TITLE. MOVE "F1-READ F4-DELETE F6-READ NEXT F10-PRINT F1 - "6-EXIT" TO WS-VARIABLE-INSTRUCTIONS. TURN PROTECTED IN SC-DATA. DISPLAY SC-TITLE. DISPLAY SC-DATA. DISPLAY SC-SYSTEM. DISPLAY SC-VARIABLE-INSTRUCTIONS. DISPLAY SC-INFORMATION-LINE. DISPLAY OVERLAY OVERLAY-17 AT OVERLAY-AREA. DISPLAY OVERLAY-17. MOVE 3 TO WS-PAGE-NUMBER. MOVE 17 TO WS-OVERLAY. SET NEW-CURSOR AT B-PERUSE-DAT-17. #ADD 01319S00 595-CLEAR-DATA MOVE ZEROES TO CRD-SEQ-NUM OF MCC OF BNRLF. #REPLACE 01319S01 595-CLEAR-DATA MOVE 17 TO WS-OVERLAY-MAX. #REPLACE 01323S01 595-SCREEN-INIT MOVE 17 TO WS-OVERLAY-MAX. #REPLACE 01431S01 800-SET-OVERLAY IF WS-SAVE-OVERLAY = 2 OR 3 OR 4 OR 8 OR 10 OR 12 OR 14 OR 16 #REPLACE 01472S0D/01472S0D OFFSET 0 800-GO-TO-PERUSAL MOVE 15 TO WS-OVERLAY ELSE IF WS-OVERLAY = 16 MOVE 17 TO WS-OVERLAY. #ENDSCN = SW0B451 !#CMP2.28 09/12/07 BNETLIBS6101 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6101 * ******************************************************************************** #SCN = SW0B536 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6101 #NEWVERSION = 6102 #ADD 04419A15 ! 11SEP2007 engelk ! Symptom: Acquired transactions initiated at EMV capable terminals ! reflect only mag stripe and key entry capability. ! Problem: The interface sets the SEM POS Card Data Terminal Input ! Capability (DE-61.11) based upon up to 3 different data ! sources: ! 1) EMV Stat (B4) token's terminal input capability ! 2) Point of Service Data (C4) token's terminal input ! capability indicator ! 3) POS entry mode ! The EMV stat (B4) token is only present if the ! transaction is initiated at an EMV capable terminal. ! The C4 token is the most granular and reliable, but is ! not always present. Using the POS entry mode, results ! in a terminal capability value which merely mirrors how ! the card data was actually read. ! ! The EMV stat token is the first of these data sources ! sought and used to set DE-61.11. The interface later ! checks for and uses Point of Service Data (C4) token, if ! present, to populate DE-61.11. However, if the Point of ! Service Data token is not present, the code always used ! the PSTM's point of service entry mode mode field to set ! DE-61.11, without verifying whether the EMV stat token ! had already provided more accurate terminal input ! capability information. The PSTM's point of service ! entry mode field should only be used if neither the B4 ! nor the C4 tokens are present. ! Fix: Modified the interface to use the PSTM's point of ! service entry mode to populate DE-61.11 only if neither ! the B4 nor the C4 tokens are present. Also modified the ! code to more clearly define the terminal capabilities if ! the B4 token indicates EMV capability but the card ! details were mag stripe read. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #440757 #ADD 05950 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 10 ] = " " or sem.ntl^pos^data.cond^cde.byte[ 10 ] = "0" and pstm.pt^srv^entry^mde = "02" then #DELETE 05951 PSTM^FRMT^0200^TO^XRQST #ADD 05961 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 10 ] = "9" and pstm.pt^srv^entry^mde = "02" then begin ! ! Mag stripe & EMV compatible chip reader ! movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "5" ); end; #DELETE 05962 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0B536 !#CMP2.28 09/20/07 BNETLIBS6102 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6102 * ******************************************************************************** #SCN = SW0B545 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6102 #NEWVERSION = 6103 #ADD 04419B0c ! 19SEP2007 bracewm ! Symptom: The PSTM's retl^sic^cde is not being populated on ! receipt of reversals from Banknet. This field can be ! used for accurate risk scoring within Auth. ! Problem: The PSTM's retl^sic^cde is not being populated either ! from the ILF, or from the reversal SEM. ! Fix: On matched reversals, retrieve the merchant type from ! the ILF and place it in the PSTM. For unmatched ! reversals, retrieve the merchant type from the ! reversal SEM and place in the PSTM. ! Procs modified: sem^frmt^unmatched^xrvsl^to^pstm ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #441250 #ADD 11846 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if merch^typ^bit^d then begin move( pstm.retl^sic^cde, rvsl.merch^typ ); end; #ADD 15762 SEM^FRMT^XRVSL^TO^PSTM^0420 if merch^typ^bit^d then begin move( pstm.retl^sic^cde, sem.merch^typ ); end; #ENDSCN = SW0B545 !#CMP2.28 09/26/07 BNETLIBS6103 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6103 * ******************************************************************************** #SCN = SW0B570 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6103 #NEWVERSION = 6104 #ADD 04419C0F ! 24SEP2007 bracewm ! Symptom: The Release 07.2 Mandates, specifically the support of ! healthcare items has resulted in the length field ! element of DE-54 (additional amounts) being set ! incorrectly. ! Problem: The total length of DE-54 is calculated by adding to an ! INT value in a loop. When setting the length field ! element of DE-54 at the termination of the loop, this ! INT value is not used. ! Fix: Ensure that the INT value is used to populate the length ! field element of DE-54. Also, move this processing ! outside of the loop to its logical place. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443294 ! 25SEP2007 bracewm ! Symptom: The Release 07.2 Mandates, specifically the support of ! Subelement 20 (Cardholder Verification Method) within ! DE-48 (Additional Data-Private Use) is not populating ! this subelement in 0400 reversals. ! Problem: The prescence of this field in the original response is ! checked in the SEM retrieved from the ILF. However, ! DE-48 in this SEM is blank-filled before this check is ! done, so nothing is found, and nothing is moved into ! DE-48 SE-20 of the 0400 reversal. ! Fix: Check for the presence of SE-20 in a saved copy of the ! SEM, (known as ORIG^SEM). If present, populate SE-20 ! in the 0400 form the original SEM response. ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443252 #REPLACE 07466A04 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. #REPLACE 07850A0f SUB^CONVERT^AMT end; ! of addl^amt[i] has valid data ! #DELETE 07850A0g/07850A0m SUB^CONVERT^AMT #ADD 07850A0n SUB^CONVERT^AMT if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; #REPLACE 07850A0o SUB^CONVERT^AMT end; ! of if hiswthn^get^tkn ! #ENDSCN = SW0B570 !#CMP2.28 10/03/07 BNETLIBS6104 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6104 * ******************************************************************************** #SCN = SW0B574 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6104 #NEWVERSION = 6105 #ADD 04419D0X ! 02OCT2007 bracewm ! Symptom: The Auto Substantiation Data token is being added ! to the PSTM on all incoming 0100 POS transactions, ! regardless of whether the IIAS (Inventory Information ! Approval System ) Substantiation Indicator in the ! external message is set. When this indicator is not set ! the token contains garbage. ! Problem: The token data is only being initialized when the IIAS ! Substantiation Indicator is set. The check to determine ! whether to add the token is incorrect, so the token is ! always added, often uninitialized. ! Fix: Only add the Auto Substantiation Data Token when the ! IIAS substantiation indicator is set in the external ! message, and always initialize the token before ! populating it. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443730 #ADD 13878 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind = "1" then begin tkn^id ':=' auto^substan^data^tkn^id^d; ! ! initialize the auto-substantiation data token ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, auto^substan^data^tkn ); movd( auto^substan^data^tkn.iias^ind, "1" ); tkn^add^lgth := $offset( auto^substan^data^tkn.user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, auto^substan^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3258, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3260, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result end; ! of iias^ind = 1 #DELETE 13878A00/13878A1C SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0B574 !#CMP2.28 10/03/07 BNETLIBS6105 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6105 * ******************************************************************************** #SCN = SW0B575 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6105 #NEWVERSION = 6106 #ADD 04419E0J ! 03OCT2007 frederr ! Symptom: The transaction subtype token (token id = BM) has an ! incorrect value on payment transactions from MasterCard. ! Problem: The interface is hardcoding a value of "B001" as the ! transaction subtype in the BM token on payment ! transactions from MasterCard. A "B001" for this token ! is referenced as a payment to 3rd party transaction. ! This transaction is really a payment from 3rd party, so ! the subtype should be "B000". ! Fix: Modified the interface to hardcode a value of "B000" as ! the transaction subtype for payment transactions from ! MasterCard. ! Proc modified: sem^frmt^xrqst^to^pstm^0200. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443151. #REPLACE 13893 SEM^FRMT^XRQST^TO^PSTM^0200 movd( txn^subtyp^tkn.txn^subtyp, pmnt^from^3rd^prty^d ); #ENDSCN = SW0B575 !#CMP2.28 10/04/07 BNETLIBS6106 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6106 * ******************************************************************************** #SCN = SW0B576 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6106 #NEWVERSION = 6107 #ADD 04419F0G ! 04OCT2007 frederr ! Symptom: MasterCard is rejecting Host session activation and ! Host session deactivation Network Management requests ! due to DE-127 (Private data) being present and having a ! length of "000". Host session activation and Host ! session deactivation request messages should not contain ! DE-127. ! Problem: The interface is turning DE-127 on and initializing it ! with zeroes when formatting a Host session activation ! or Host session deactivation message. ! Fix: Modified the interface to not turn DE-127 on when ! formatting Host session activation and Host session ! deactivation messages. ! Proc modified: sem^frmt^nmm^request. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443656. #REPLACE 11169 /11170 SEM^FRMT^NMM^REQUEST nmm^info^cde <> nmm^echo^l and nmm^info^cde <> nmm^actvt^l and nmm^info^cde <> nmm^deactvt^l then #ENDSCN = SW0B576 !#CMP2.28 10/11/07 BNETLIBS6107 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6107 * ******************************************************************************** #SCN = SW0B583 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6107 #NEWVERSION = 6108 #ADD 04419G0H ! 11OCT2007 bracewm ! Symptom: DE-48 (Additional Data-Private Use) SE-20 (card ! verification method) is not being populated in 0400 ! reversals. ! Problem: The interface is coded to use what is on the ILF to ! populate DE-48 on a reversal message. If DE-48 is not ! returned in a response message from Mastercard, it will ! save DE-48 from the request to use on a subsequent ! reversal. But DE-48.20 will never be returned by ! Mastercard in a response message. So when Mastercard ! does return DE-48 in a response message, DE-48.20 sent ! in the request message will not be logged to the ILF ! and thus will not be sent in a subsequent reversal. ! Fix: If DE-48 is returned by Mastercard in a response message ! update DE-48.20 with the value sent out in the request ! for ILF logging purposes. This way if a subsequent ! reversal is received by the interface, the ILF will ! contain DE-48.20 and thus the reversal will also contain ! DE-48.20. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #443252 #ADD 12261 SEM^FRMT^XRESP^TO^PSTM^0210 end else #ADD 12261A05 SEM^FRMT^XRESP^TO^PSTM^0210 begin #ENDSCN = SW0B583 !#CMP2.28 10/30/07 BNETS 6090 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6090 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6090 * ******************************************************************************** #SCN = SW0B592 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD E000260s ! 30OCT2007 swiftd ! Symptom: Fix to Banknet Release 07.2 Mandates ! Problem: Found bug in code during research. Opened internal ! case. ! Fix: In proc sem^request, the first occurence of the tag^data ! [0] was being checked in the three new values. This ! should have been the second occurence [1]. Changed ! the code to correct this. ! Proc modified: sem^request ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #446554 (internal) #REPLACE E0661219 SEM^REQUEST tag^data[ 1 ].svc = "13" or #REPLACE E066121B SEM^REQUEST tag^data[ 1 ].svc = "15" or #REPLACE E066121D SEM^REQUEST tag^data[ 1 ].svc = "16" ) and #ENDSCN = SW0B592 !#CMP2.28 11/02/07 RP09BNTS6008 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6008 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RP09BNTS RP09BNTS 6008 * ******************************************************************************** #SCN = SW0B596 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00008H0C * 12OCT2007 KrishnG * Symptom: PCI - Masking on Reports. * Problem: None. * Fix: Added logic to mask the PAN based on parameters * configured in ICF by copying PAN masking sections * from RP09SWIS. * Modified sections: * A100-HOUSEKEEPING SECTION. * Dependency: Apply fixes to RP09BNTS, RP09SWIS and run Make. * Refer to BA60UD0B.SCNRMSK for a complete listing * of dependencies. * Reference: WO #070104-02 #ADD 00169E01 DATA DIVISION COPY PAN-MASK-GLOBALS OF "=SWRPT_RP09SWIS". #REPLACE 00228F1Z OFFSET 1/00228F1Z OFFSET 2 PROCEDURE DIVISION IF MASKING-FLG OF ICFBASE NOT = "N" MOVE "Y" TO MASKING-FLG OF ICFBASE END-IF IF MAX-LEFT-UNMASKED OF ICFBASE = SPACES MOVE "0" TO MAX-LEFT-UNMASKED OF ICFBASE END-IF IF MIN-MASKED OF ICFBASE = SPACES MOVE "9" TO MIN-MASKED OF ICFBASE END-IF IF RIGHT-UNMASKED OF ICFBASE = SPACES MOVE "4" TO RIGHT-UNMASKED OF ICFBASE END-IF MOVE MASKING-FLG OF ICFBASE TO WS-MASKING-FLAG OF WS-PAN-MASK MOVE MAX-LEFT-UNMASKED OF ICFBASE TO WS-MAX-LEFT-UNMASKED OF WS-PAN-MASK MOVE MIN-MASKED OF ICFBASE TO WS-MIN-MASKED OF WS-PAN-MASK MOVE RIGHT-UNMASKED OF ICFBASE TO WS-RIGHT-UNMASKED OF WS-PAN-MASK ?ENDIF 4 ?IF 5 #REPLACE 00228F24 OFFSET 1/00228F24 OFFSET 1 PROCEDURE DIVISION IF MASKING-FLG OF ICFEBASE NOT = "N" MOVE "Y" TO MASKING-FLG OF ICFEBASE END-IF IF MAX-LEFT-UNMASKED OF ICFEBASE = SPACES MOVE "0" TO MAX-LEFT-UNMASKED OF ICFEBASE END-IF IF MIN-MASKED OF ICFEBASE = SPACES MOVE "9" TO MIN-MASKED OF ICFEBASE END-IF IF RIGHT-UNMASKED OF ICFEBASE = SPACES MOVE "4" TO RIGHT-UNMASKED OF ICFEBASE END-IF MOVE MASKING-FLG OF ICFEBASE TO WS-MASKING-FLAG OF WS-PAN-MASK MOVE MAX-LEFT-UNMASKED OF ICFEBASE TO WS-MAX-LEFT-UNMASKED OF WS-PAN-MASK MOVE MIN-MASKED OF ICFEBASE TO WS-MIN-MASKED OF WS-PAN-MASK MOVE RIGHT-UNMASKED OF ICFEBASE TO WS-RIGHT-UNMASKED OF WS-PAN-MASK ?ENDIF 5 #ADD 00382E1L C630-ADMIN-TEXT-MESSAGE COPY G100-SECTION OF "=SWRPT_RP09SWIS". COPY G101-SECTION OF "=SWRPT_RP09SWIS". COPY G110-SECTION OF "=SWRPT_RP09SWIS". COPY G111-SECTION OF "=SWRPT_RP09SWIS". #ENDSCN = SW0B596 !#CMP2.28 11/14/07 BNETLIBS6108 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6108 * ******************************************************************************** #SCN = SW0B615 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6108 #NEWVERSION = 6109 #ADD 04419H0N ! 14NOV2007 frederr ! Symptom: This interface is failing certification due to ! Transaction Category Code (part of DE-48, additional ! data) being set incorrectly when performing an ! E-commerce tran at an Betting/Internet Gambling merchant ! (MCC = 7995). ! Problem: The interface is setting the Transaction Category Code ! correctly at first for a Betting/Internet Gambling ! merchant. But then overwrites the field when it ! determines that this is an E-Commerce transaction. ! Fix: Modified the interface to always set the Transaction ! Category Code to a "U" for Betting/Internet Gambling ! merchants. ! Proc modified: pstm^frmt^sem^addl^data. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #446010. #ADD 09459 PSTM^FRMT^SEM^ADDL^DATA if pstm.retl^sic^cde = "7995" then begin ! ! All Betting/Internet Gambling transaction must contain ! a transaction Category Code of "U". ! movd( sem.addl^data.info.tran^cat^cde, "U" ); end; #ENDSCN = SW0B615 !#CMP2.28 12/04/07 RQBNRLFS6021 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6021 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6021 * ******************************************************************************** #SCN = SW0B663 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6021 #NEWVERSION = 6022 #ADD 00018U0Y * 12OCT2007 NataraM * Symptom: BASE24 Audit Enhancements for PABP Compliance. * Problem: None. * Fix: Added logic to support auditing of user access to * sensitive information. * Modified paragraphs: * 600-SET-UP * Dependency: Apply fix to RQBNRLFS. Run Make. * Refer to BA60UD0B.SCNAUDT for a complete listing * of dependencies. * Reference: WO #070423-02 * 12OCT2007 DwivediS * Symptom: Base24 Pathway PCI Masking. * Problem: None. * Fix: Masking of sensitive information is supported in * accordance to PCI data security standards. This is * based on MASKING-FLG value in DDLGSEC. The data * elements defined as 'sensitive information' on the * Base24 screens are PAN, Card's Expiration Date and * Cardholder's Name. If the PAN is configured for * masking for the user, then the other sensitive * data will be masked completely. * Modified Proc: * 600-SET-UP * Dependency: Apply fixes to RQBNRLFS and run Make. * Refer to BA60UD0B.SCNMASK for a complete listing * of dependencies. * Reference: WO #061122-03 #ADD 01337 600-SET-UP MOVE MASKING-FLG OF USER-CONTEXT TO MASKING-FLG OF MSG-LIST. MOVE 9999 TO ERR-CDE OF MSG-LIST. MOVE TERMINAL-FILENAME TO TERM-ID OF MSG-LIST. MOVE OMF-AUDIT OF USER-CONTEXT TO OMF-AUDIT OF MSG-LIST. MOVE USER-NUM OF USER-CONTEXT TO USER-NUM OF MSG-LIST. MOVE FIID OF USER-CONTEXT TO FIID OF MSG-LIST. #ADD 01338M06 600-SET-UP MOVE MASKING-FLG OF USER-CONTEXT-EXT TO MASKING-FLG OF MSG-LIST-EXT. MOVE 9999 TO ERR-CDE OF MSG-LIST-EXT. MOVE TERMINAL-FILENAME TO TERM-ID OF MSG-LIST-EXT. MOVE OMF-AUDIT OF USER-CONTEXT-EXT TO OMF-AUDIT OF MSG-LIST-EXT. MOVE USER-NUM OF USER-CONTEXT-EXT TO USER-NUM OF MSG-LIST-EXT. MOVE FIID OF USER-CONTEXT-EXT TO FIID OF MSG-LIST-EXT. #ENDSCN = SW0B663 !#CMP2.28 12/04/07 SVBNRLFS6011 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6011 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6011 * ******************************************************************************** #SCN = SW0B664 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6011 #NEWVERSION = 6012 #ADD 00005K0F * 12OCT2007 NataraM * Symptom: BASE24 Audit Enhancements for PABP Compliance. * Problem: None. * Fix: Added logic to support auditing of user access to * sensitive information. * Added paragraphs: * 60-FETCH-PRESENT-TIME * Modified paragraphs: * B-BUILD-LIST * 200-DELETE-LOG-REC * 200-FILE-READ * 905-CLOSE-ALL-FILES * Dependency: Apply fix to BACOUTLS and SVBNRLFS. Run Make. * Refer to BA60UD0B.SCNAUDT for a complete listing * of dependencies. * Reference: WO #070423-02 * * 12OCT2007 DwivediS * Symptom: Base24 Pathway PCI Masking. * Problem: None. * Fix: Added support for the masking of sensitive * information in accordance to PCI data security * standards. Masking of PAN is based on the LCONF * parameter AFT-PAN-DIGITS which contain a 3-digit * numeric value. * Digit 1 - The maximum number of leftmost digits to * be displayed unmasked.Default value is 0 * Digit 2 - The minimum number of digits to be * masked. Default value is 9 * Digit 3 - The number of rightmost digits to be * displayed unmasked. Default value is 4 * Modified Procs: * 100-RETRIEVE-LCONF-INFO * 210-BUFFER-FILL * Added proc: * 100-GET-AFT-PAN-DIGITS-PARAM * Dependency: Apply fixes to SVBNRLFS and run Make. * Refer to BA60UD0B.SCNMASK for a complete listing * of dependencies. * Reference: WO #061122-03 #ADD 00135 ENVIRONMENT DIVISION COPY FILE-CONTROL-OMF OF "=BASRC_BACOUTLS". COPY FILE-CONTROL-OMF-TEMPLATE OF "=BASRC_BACOUTLS". #ADD 00144 DATA DIVISION FD OMF-REC LABEL RECORDS ARE OMITTED. COPY OMF OF "=BASRC_BADDLCOB". COPY FD-OMF-TEMPLATE OF "=BASRC_BACOUTLS". #ADD 00698F01 DATA DIVISION COPY MLF-REC OF "=BASRC_BADDLCOB". #ADD 00739 DATA DIVISION 05 AFT-PAN-DIGITS-HOLD. 07 LCONF-MAX-LEFT-UNMASKED PIC X. 07 LCONF-MIN-MASKED PIC X. 07 LCONF-RIGHT-UNMASKED PIC X. #ADD 00788 DATA DIVISION 01 WS-AUDIT-HOLD. 03 WS-AUDIT-REC-AREA PIC X(4010). 01 WS-LAST-FM. 03 WS-FM-DATE PIC X(16). 03 WS-FM-TYPE PIC X. #ADD 00813F08 DATA DIVISION COPY PAN-MASK-GLOBALS OF "=BASRC_BACOUTLS". #ADD 00852 DECLARATIVES ?IF 4 COPY OMF-ERR-DECLARATIVE-MSG-LIST OF "=BASRC_BACOUTLS". ?ENDIF 4 ?IF 5 COPY OMF-ERR-DECLARATV-MSG-LIST-EXT OF "=BASRC_BACOUTLS". ?ENDIF 5 #ADD 00873 DECLARATIVES COPY G100-CALC-PAN-LGTH OF "=BASRC_BACOUTLS". COPY G110-MASK-PAN OF "=BASRC_BACOUTLS". #ADD 00893 BEGIN-COBOL-LIST-SERVER ?IF 4 COPY AUDIT-ASSIGN-MSG-LIST OF "=BASRC_BACOUTLS". COPY AUDIT-CODE-MSG-LIST OF "=BASRC_BACOUTLS". ?ENDIF 4 ?IF 5 COPY AUDIT-ASSIGN-MSG-LIST-EXT OF "=BASRC_BACOUTLS". COPY AUDIT-CODE-MSG-LIST-EXT OF "=BASRC_BACOUTLS". ?ENDIF 5 #ADD 00926 B-BUILD-LIST IF AUDIT-ASSIGN-FLAG = SPACES PERFORM B-AUDIT-ASSIGN. IF NO-ERROR MOVE "Y" TO AUDIT-ASSIGN-FLAG #ADD 00991 B-BUILD-LIST-CONT 60-FETCH-PRESENT-TIME. ENTER TAL "TIMESTAMP" USING TIME-PARAMETER. MOVE TIME-PARAMETER TO WS-TIMESTAMP. ENTER TAL "CONTIME" USING CON-TIME, TIME1, TIME2, TIME3. MOVE CON-TIME TO TIME-RETURN. IF ( RETURN-DAY = DAY-CHECK ) OR OPENING-OMF MOVE RETURN-DATE TO DATE-CHECK MOVE SPACE TO NEW-DAY-FLAG ELSE MOVE "N" TO NEW-DAY-FLAG. MOVE RETURN-YEAR TO CONVERT-YEAR. MOVE RETURN-MONTH TO CONVERT-MONTH. MOVE RETURN-DAY TO CONVERT-DAY. MOVE RETURN-HOUR TO CONVERT-HOUR. MOVE RETURN-MINUTES TO CONVERT-MINUTES. MOVE CONVERT-TIME TO WS-FM-DATE. #ADD 01027 100-INITIALIZE-FOR-READ MOVE 0 TO REC-IMAGE-LEN. #ADD 01053 100-RETRIEVE-LCONF-INFO PERFORM 100-GET-AFT-PAN-DIGITS-PARAM #ADD 01065 100-GET-RLF-ASSIGN 100-GET-AFT-PAN-DIGITS-PARAM. MOVE "P" TO ITEM-TYP OF LCONF MOVE SPACES TO AFT-PAN-DIGITS-HOLD MOVE "****************" TO PRO-NAME OF LCONF MOVE "AFT-PAN-DIGITS" TO ITEM-NAME OF LCONF READ LCONF-FILE IF FILE-STAT-ELEMENT = 0 MOVE PTXT OF LCONF TO AFT-PAN-DIGITS-HOLD IF AFT-PAN-DIGITS-HOLD IS NOT NUMERIC MOVE "094" TO AFT-PAN-DIGITS-HOLD END-IF ELSE MOVE "094" TO AFT-PAN-DIGITS-HOLD. #ADD 01322 200-FILE-READ PERFORM 60-FETCH-PRESENT-TIME MOVE "E" TO WS-FM-TYPE MOVE 40 TO REC-IMAGE-LEN MOVE "BNET" TO FIID OF MLF-REC MOVE DAT OF HDR OF BNRLF TO SWI-DAT OF MLF-REC MOVE TIM OF HDR OF BNRLF TO SWI-TIM OF MLF-REC MOVE PAN OF MCC OF BNRLF TO PAN OF MLF-REC MOVE "000" TO MBR-NUM OF MLF-REC MOVE MLF-REC TO WS-AUDIT-HOLD MOVE SPACES TO MLF-REC IF REC-IMAGE-LEN > 0 PERFORM 1000-CALL-AUDIT #ADD 01354 200-DELETE-LOG-REC PERFORM 60-FETCH-PRESENT-TIME MOVE "D" TO WS-FM-TYPE MOVE 40 TO REC-IMAGE-LEN MOVE "BNET" TO FIID OF MLF-REC MOVE DAT OF HDR OF BNRLF TO SWI-DAT OF MLF-REC MOVE TIM OF HDR OF BNRLF TO SWI-TIM OF MLF-REC MOVE PAN OF MCC OF BNRLF TO PAN OF MLF-REC MOVE "000" TO MBR-NUM OF MLF-REC MOVE MLF-REC TO WS-AUDIT-HOLD MOVE SPACES TO MLF-REC IF REC-IMAGE-LEN > 0 PERFORM 1000-CALL-AUDIT #ADD 01387 210-BUFFER-FILL ?IF 4 IF MASKING-FLG OF MSG-LIST OF MESSAGE-IN = "Y" ?ENDIF 4 ?IF 5 IF MASKING-FLG OF MSG-LIST-EXT OF MESSAGE-IN = "Y" ?ENDIF 5 MOVE LCONF-MAX-LEFT-UNMASKED TO WS-MAX-LEFT-UNMASKED MOVE LCONF-MIN-MASKED TO WS-MIN-MASKED MOVE LCONF-RIGHT-UNMASKED TO WS-RIGHT-UNMASKED MOVE ACCT-NUM OF MCC OF BNRLF TO WS-PAN OF WS-PAN-MASK PERFORM G100-PAN-LGTH-CALC IF WS-PAN-LGTH > 0 AND < 20 PERFORM G110-PAN-MASK MOVE WS-PAN OF WS-PAN-MASK TO ACCT-NUM OF MCC OF BNRLF MOVE "******" TO CRD-EXP-DAT OF MCC OF BNRLF. #ADD 01424 905-CLOSE-ALL-FILES CLOSE OMF-REC. #ENDSCN = SW0B664 !#CMP2.28 12/10/07 BNETLIBS6109 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6109 * ******************************************************************************** #SCN = SW0C007 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6109 #NEWVERSION = 6110 #ADD 04419I0H ! 10DEC2007 engelk ! Symptom: No fully authenticated MasterCard SecureCode ! transactions were treated as secure electronic commerce ! transactions. ! Problem: When BASE24 defined values for the PS51 (C0) token's ! electronic commerce flag, they were based upon Visa's ! SET (Secure Electronic Transaction) implementation. ! This technology used cardholder certificates and has ! since fallen out of favor. Both MasterCard and Visa now ! support schemes involving authentication values. ! However, BASE24's descriptions have not kept up with the ! technology shift. New descriptions have now been ! developed which allow for identification of secure ! electronic commerce transactions. Therefore, the way ! MasterCard's DE-48, SE-42 (Security Level Indicator) and ! the presence of DE-48, SE-43 (UCAF data) map to these ! PS51 token e^com^flg values had to change. ! Fix: Modified the code to identify MasterCard SecureCode ! fully authenticated transactions with an e^com^flg value ! of "5", Secure electronic commerce transaction. Also ! added code to identify transactions where SecureCode ! authentication was attempted, but couldn't be completed, ! because either the issuer or the cardholder did not ! participate in the SecureCode program. Such ! non-authenticated security transactions will be ! identified by a value of "6", Non-authenticated security ! transaction, in the PS51 token's electronic commerce ! flag. These are differentiated from other ! non-authenticated security transactions where a ! non-approved security protocol was used, by the ! assignment of a value of "7" to the PS51 token's ! electronic commerce flag. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #446602 #ADD 14771 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! MasterCard SecureCode transaction ! if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" and sem.addl^data.info.ucaf^sub^fld^43 <> [ $len( sem.addl^data.info.ucaf^sub^fld^43 ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43 <> [ $len( sem.addl^data.info.ucaf^sub^fld^43 ) * ["0"] ] then begin ! ! Fully authenticated SecureCode transaction ! Secure electronic commerce transaction ! movd( ps51^tkn^data.e^com^flg, "5" ); end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "211" then begin ! ! Non-authenticated security transaction ! No AAV; merchant only liability shift ! movd( ps51^tkn^data.e^com^flg, "6" ); end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "21" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "23" then begin ! ! Non-authenticated Security Transaction ! movd( ps51^tkn^data.e^com^flg, "7" ); end else begin ! ! Non-secure transaction ! movd( ps51^tkn^data.e^com^flg, "8" ); end; end ! MasterCard SecureCode transaction else if sem.addl^data.info.cert.crd^hldr.tag = "02" then ! ! Visa SET transaction ! #DELETE 14772 /14783 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0C007 !#CMP2.28 12/26/07 BNETLIBS6110 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6110 * ******************************************************************************** #SCN = SW0C039 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6110 #NEWVERSION = 6111 #ADD 04419J0a ! 20DEC2007 engelk ! Symptom: Healthcare Transit (CV) token amounts contain spaces and ! some of the amounts are missing. ! Problem: SEM field DE-54, additional amounts, contains many ! different amount types, some of which are healthcare ! and prescription eligibility amounts, and some of which ! are balances. Only the healthcare and prescription ! eligibility amounts from DE-54 are placed in the ! healthcare transit token and accounted for in the ! healthcare transit token amount count. However, the ! index used to pass through the SEM amount fields is used ! as the index into the healthcare transit token amount ! fields. This means that numerous amount fields can be ! space filled and the actual amount fields cut off when ! the length of the healthcare transit token is computed. ! This same issue is present when moving amounts from the ! healthcare transit token to SEM field DE-54. ! Fix: Modified code to use the healthcare transit token amount ! count field as the index into the healthcare token when ! placing healthcare and prescription eligibility amounts ! in the healthcare transit token. Added a new variable ! to keep track of the number of healthcare transit token ! amounts moved to SEM field DE-54, incrementing it only ! when an amount field is moved from one to the other. ! Procs modified: pstm^frmt^amt^to^sem^amt ! sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #448263 ! ! 20DEC2007 engelk ! Symptom: Healthcare transit (CV) token is not added if both the ! prescription and healthcare eligibility amounts are ! present and loaded into the token from the SEM, but ! the first amount contains zero. ! Problem: Code designed to determine whether to add the healthcare ! transit token checked only the first amount field for a ! non-zero amount. It should test the healthcare transit ! token's amount counter instead. ! Fix: Modified the code to test the healthcare transit token's ! amount counter when determining whether to add the ! healthcare transit token to the PSTM. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #448244 ! 20DEC2007 engelk ! Symptom: Transactions appoved for $0.00 resulted in approvals to ! MasterCard for amounts greater than zero. ! Problem: When the acquirer provides the real-time substantiation ! indicator in DE 48, subelement 61 (POS Data, Extended ! Condition Codes), subfield 3 (IIAS Substantiation ! Indicator), the Healthcare Eligibility amount contained ! in DE 54 (additional amounts) allows the acquirer to ! indicate the portion of DE 4 (Amount, Transaction) that ! is eligible for real-time substantiation. However, code ! present in the amount formatting proc replaced the PSTM ! transaction amount with the substantiation amount from ! DE 54. There are some cases where the substantiation ! amount is zero. If these transactions were approved, ! they were approved back to MasterCard for the amount ! contained in the SEM transaction amount (DE 4). The ! PSTM transaction amount should not be replaced by the ! healthcare eligibility amount as the healthcare ! eligibility amount is a subset of the transaction ! amount. ! Fix: Eliminated the code which replaced the PSTM transaction ! amount as set based upon DE 4 from the SEM with the ! healthcare eligibility amount from DE 54. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #448266 #REPLACE 07754A00 PSTM^FRMT^AMT^TO^SEM^AMT int amt^num := 0; #ADD 07850A0C SUB^CONVERT^AMT move( sem.addl^amt.info[ amt^num ].acct^typ, #DELETE 07850A0D SUB^CONVERT^AMT #ADD 07850A0K SUB^CONVERT^AMT movd( sem.addl^amt.info[ amt^num ].amt^typ, #DELETE 07850A0L SUB^CONVERT^AMT #ADD 07850A0Q SUB^CONVERT^AMT movd( sem.addl^amt.info[ amt^num ].amt^typ, #DELETE 07850A0R SUB^CONVERT^AMT #ADD 07850A0U SUB^CONVERT^AMT move( sem.addl^amt.info[ amt^num ].crncy^cde, #DELETE 07850A0V SUB^CONVERT^AMT #ADD 07850A0Y SUB^CONVERT^AMT move( sem.addl^amt.info[ amt^num ].typ^amt, #DELETE 07850A0Z SUB^CONVERT^AMT #ADD 07850A0b SUB^CONVERT^AMT call fixed^ascii^( sem.addl^amt.info[ amt^num ].amt, hlthcr^get^tkn.adnl^amt[ i ].amt ); amt^num := amt^num + 1; #DELETE 07850A0c/07850D00 SUB^CONVERT^AMT #ADD 10217A06 SUB^CONVERT^AMT move( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].acct^typ, #DELETE 10217A07 SUB^CONVERT^AMT #ADD 10217A09 SUB^CONVERT^AMT move( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].crncy^cde, #DELETE 10217A0A SUB^CONVERT^AMT #ADD 10217A0C SUB^CONVERT^AMT move( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].amt^sign, #DELETE 10217A0D SUB^CONVERT^AMT #ADD 10217A0G SUB^CONVERT^AMT hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ]. amt ); #DELETE 10217A0H/10217A0I SUB^CONVERT^AMT #ADD 10217A0L SUB^CONVERT^AMT movd( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].amt^typ, #DELETE 10217A0M/10217A0P SUB^CONVERT^AMT #ADD 10217A0j SUB^CONVERT^AMT movd( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].amt^typ, #DELETE 10217A0k SUB^CONVERT^AMT #ADD 10254 SUB^CONVERT^AMT if hlthcr^tkn.num^adnl^amt > 0 then #DELETE 10255 SUB^CONVERT^AMT #ENDSCN = SW0C039 !#CMP2.28 01/07/08 BNETLIBS6111 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6111 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6111 * ******************************************************************************** #SCN = SW0C040 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6111 #NEWVERSION = 6112 #ADD 04419K1A ! 07JAN2008 frederr ! Symptom: The interface is not sending back the correct response ! code to MasterCard when the max number of card usages ! is reached. This was found during certification ! testing. ! Problem: The interface is mapping an internal PSTM response code ! of "082" (card usages exceeded) to an external response ! code of '61' (exceeds withdrawal limits). A better ! mapping would be to use an external response code of ! '65' (exceeds withdrawal count). ! Fix: Modified the interface to map a PSTM response code of ! '082' to an external response code of '65'. ! Proc modified: pstm^frmt^resp^cde^to^sem. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #452457. #ADD 08145 PSTM^FRMT^RESP^CDE^TO^SEM "082",! Usage exceeded ! "65",! Exceeds withdraw count #DELETE 08146 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0C040 !#CMP2.28 01/10/08 SVBNRLFS6012 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6012 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6012 * ******************************************************************************** #SCN = SW0C048 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6012 #NEWVERSION = 6013 #ADD 00005L0f * 09JAN2008 NataraM * Symptom: Audit records are not being written in all * required cases. * Problem: The call to 1000-CALL-AUDIT was not correct. * The lack of an 'END-IF' statement means the 'ELSE' * clause relates to the wrong 'IF' statement. * Fix: Because the logic above the problem sets the value * of OMF-REC-LEN, paragraph 1000-CALL-AUDIT can be * invoked unconditionally and the 'IF' statement * removed. * Modified procs: * 200-FILE-READ * 200-DELETE-LOG-REC * Dependency: Apply fix to SVBNRLFS and run Make. * Replace BA60UD0B.SCNAUDT. * Reference: Case #451002 #DELETE 01322L0B 200-FILE-READ #REPLACE 01322L0C 200-FILE-READ PERFORM 1000-CALL-AUDIT #DELETE 01354L0B 200-DELETE-LOG-REC #REPLACE 01354L0C 200-DELETE-LOG-REC PERFORM 1000-CALL-AUDIT #ENDSCN = SW0C048 !#CMP2.28 01/25/08 BNETLIBS6112 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6112 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6112 * ******************************************************************************** #SCN = SW0C074 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6112 #NEWVERSION = 6113 #ADD 04419L0G ! 23JAN2008 engelk ! Symptom: DE-44, additional response data, is not set from ! purchase token data when generating a MasterCard ! Corporate Fleet Card 0210 external response to ! BankNet with a DE-39 (response code) of 12, invalid ! transaction. ! Problem: When a SEM response code of 12 is sent to MasterCard, ! for a MasterCard Corporate Fleet Card transaction, ! DE-44, additional response data, should contain one of ! the following: ! "01" = Invalid ID number ! "02" = Invalid driver number ! "03" = Invalid vehicle number ! The decline reason code is carried in the purchase (C2) ! token. Code present to load DE-44 from the C2 token ! did not turn on bit 44, set its length, or move the ! decline reason code for the proper length. ! Fix: Added code to turn on bit 44, set its length, and move ! the decline reason code for the proper length. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #454304 #ADD 06551 PSTM^FRMT^0210^TO^XRESP addl^resp^bit^d := 1; call integer^ascii^( sem.addl^resp^data.lgth, $len( purchase^tkn^data. mc^fleet^data.dcln^rsn^cde ) ); #REPLACE 06552 PSTM^FRMT^0210^TO^XRESP move( sem.addl^resp^data.info, #ENDSCN = SW0C074 !#CMP2.28 01/31/08 BNETD 6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6000 * ******************************************************************************** #SCN = SW0C089 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00043 ! 31JAN2008 BensonE/huac ! Symptom: Banknet Global Authorization Enhancements ! Problem: None. ! Fix: Add ATM Processing Enhancements and support for the ! EPS-Net to Banknet Migration. ! Procs deleted: sem^frmt^xresp^emv^to^b24^tkn ! sem^frmt^xrqst^emv^to^b24^tkn ! Procs added: sem^frmt^xresp^emv^to^pstm^tkn ! sem^frmt^xrqst^emv^to^pstm^tkn ! sem^frmt^xrqst^emv^to^stm^tkn ! sem^acq^rvsl^rqst^atm ! sem^advice^atm ! sem^request^atm ! sem^response^atm ! sem^response^nack^atm ! sem^reversal^advice^atm ! stm^^input^from^process ! stm^0200^route ! stm^frmt^stf^prikey ! util^send^stm ! Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, ! BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, DDLFSTF, ! FLGSDOC, OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, ! SWBNETM, SWIFM and SWIMM. Add SW60ABNT Subvol. ! Run Make. BA10SC04 subvolume. New files: ILB1107M, ! ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. ! Make the ILF conversion using ILB1107M. Run the ILF ! conversion using ILB1107R. Make the STF conversion ! using STF1107M. Run the STF conversion using STF1107R. ! Replace BNETLOGM and BNETMNWD. ! Reference: WO #070202-01. #REPLACE 00170 /00171 PSTM^FRMT^B24^TKN^TO^XRQST^EMV ?section sem^frmt^xresp^emv^to^pstm^tkn ?page "sem^frmt^xresp^emv^to^pstm^tkn" #REPLACE 00174 PSTM^FRMT^B24^TKN^TO^XRQST^EMV !# SEM^FRMT^XRESP^EMV^TO^PSTM^TKN #! #REPLACE 00191 SEM^FRMT^XRESP^EMV^TO^B24^TKN int proc sem^frmt^xresp^emv^to^pstm^tkn( sem, pstm ); #REPLACE 00197 /00197 OFFSET 0 SEM^FRMT^XRESP^EMV^TO^B24^TKN end; !proc sem^frmt^xresp^emv^to^pstm^tkn ! ?section sem^frmt^xresp^emv^to^stm^tkn ?page "sem^frmt^xresp^emv^to^stm^tkn" !##################################################################### !# # !# sem^frmt^xresp^emv^to^stm^tkn # !# # !# This procedure performs additional formatting of the STM for # !# EMV transactions. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# stm - Internal BASE message # !# # !# OUTPUT PARAMETERS: # !# stm - with selected fields set, plus tokens may be # !# added. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc sem^frmt^xresp^emv^to^stm^tkn( sem, stm ); int .sem( sem^def); int .stm( stm^def); begin return true; ! do nothing, dummy proc. end; !proc sem^frmt^xresp^emv^to^stm^tkn #REPLACE 00199 /00200 SEM^FRMT^XRESP^EMV^TO^B24^TKN ?section sem^frmt^xrqst^emv^to^pstm^tkn ?page "sem^frmt^xrqst^emv^to^pstm^tkn" #REPLACE 00203 SEM^FRMT^XRESP^EMV^TO^B24^TKN !# SEM^FRMT^XRQST^EMV^TO^PSTM^TKN #! #REPLACE 00220 SEM^FRMT^XRQST^EMV^TO^B24^TKN int proc sem^frmt^xrqst^emv^to^pstm^tkn( sem, pstm ); #REPLACE 00226 SEM^FRMT^XRQST^EMV^TO^B24^TKN end; !proc sem^frmt^xrqst^emv^to^pstm^tkn ! #ADD 00254 SEM^FRMT^XRQST^EMV^TO^SEM^XRESP ?section sem^frmt^xrqst^emv^to^stm^tkn ?page "sem^frmt^xrqst^emv^to^stm^tkn" !##################################################################### !# # !# sem^frmt^xrqst^emv^to^stm^tkn # !# # !# This procedure performs additional formatting of the STM for # !# EMV transactions. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# stm - Internal BASE message # !# # !# OUTPUT PARAMETERS: # !# stm - with selected fields set, plus tokens may be # !# added. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc sem^frmt^xrqst^emv^to^stm^tkn( sem, stm ); int .sem( sem^def); int .stm( stm^def); begin return true; ! do nothing, dummy proc. end; !proc sem^frmt^xrqst^emv^to^stm^tkn ?section sem^acq^rvsl^rqst^atm ?page "sem^acq^rvsl^rqst^atm" !##################################################################### !# # !# sem^acq^rvsl^rqst^atm # !# # !# This procedure handles a 0400/Acquirer Reversal Request message # !# from the network. # !# # !# INPUT PARAMETERS: # !# rvsl - reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^acq^rvsl^rqst^atm( rvsl, msg, sta^x ); int .rvsl( sem^def ); int .msg; int sta^x; begin return; ! do nothing, dummy proc. end; ! of proc sem^acq^rvsl^rqst^atm ?section sem^advice^atm ?page "sem^advice^atm" !##################################################################### !# # !# sem^advice^atm # !# # !# This procedure formats a base24-atm force post from and Banknet # !# advice message. # !# # !# INPUT PARAMETERS : # !# msg - message word pointer # !# sem - external advice message # !# sta^x - station index # !# # !# OUTPUT PARAMETERS : # !# # !##################################################################### proc sem^advice^atm( sem, msg, sta^x ); int .sem( sem^def ); int .msg; int sta^x; begin return; ! do nothing, dummy proc. end; ! of proc sem^advice^atm ?section sem^request^atm ?page "sem^request^atm" !##################################################################### !# # !# sem^request^atm # !# # !# This procedure formats a base24-atm request from an external # !# message request, suspends the transaction in extended memory # !# and sends it to base24-atm for authorization. # !# # !# INPUT PARAMETERS: # !# susp - pointer to the extended memory record # !# sem - pointer to the external request # !# sta^x - index of the station response received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^request^atm( susp, sem, sta^x ); int .susp( susp^bnet^def ); int .sem( sem^def ); int sta^x; begin return; ! do nothing, dummy proc. end; ! of proc sem^request^atm ?section sem^response^atm ?page "sem^response^atm" !##################################################################### !# # !# sem^response^atm # !# # !# This procedure handles an authorization response from Banknet. # !# It finds and cancels the timer and retrieves the extended # !# memory record for the transaction, adds an ilf record, and # !# sends the response to base24. # !# # !# INPUT PARAMETERS : # !# susp - pointer to the extended memory record # !# sem - external response message # !# sta^x - index of the station response received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^response^atm( susp, sem, sta^x ); int .susp( susp^bnet^def ); int .sem( sem^def ); int sta^x; begin return; ! do nothing, dummy proc. end; ! of proc sem^response^atm ?section sem^response^nack^atm ?page "sem^response^nack^atm" !##################################################################### !# # !# sem^response^nack^atm # !# # !# This procedure processes a negative acknowledgement message from # !# Banknet. # !# # !# INPUT PARAMETERS: # !# sem - authorization response # !# sta^x - index of the station response received on # !# sem - Authorization response nack # !# sta^x - Station on which this message was received # !# fnum - ILF file number # !# ilf - ILF record # !# ilf^lgth - length of ILF record # !# dat - ILF settlement date # !# stm - STM from the ILF record # !# resp - SEM response from the ILF record # !# nack^typ - The type of nack # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^response^nack^atm( sem, sta^x, fnum, ilf, ilf^lgth, dat, stm, resp, nack^typ ) extensible; int .sem( sem^def ); int sta^x; int fnum; int .ilf( ilf^def ); int ilf^lgth; string .dat; int .stm( stm^def ); int .resp( sem^def ); string nack^typ; begin return; ! do nothing, dummy proc. end; ! of proc sem^response^nack^atm ?section sem^reversal^advice^atm ?page "sem^reversal^advice^atm" !##################################################################### !# # !# sem^reversal^advice^atm # !# # !# This procedure handles a Banknet reversal message # !# # !# INPUT PARAMETERS : # !# rvsl - sem reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# dat - Settlement date # !# stm - expanded stm from ilf # !# ilf - ilf record # !# ilf^found - true/false result flag from util^ilf^get. # !# - true = ilf, pstm params contain data. # !# - false = this is an unmatched reversal. # !# # !# OUTPUT PARAMETERS: # !# # !# return: # !# true - processed, caller should update ilf # !# false - problem , caller should not update ilf # !# # !##################################################################### int proc sem^reversal^advice^atm( rvsl, msg, sta^x, dat, stm, sem, ilf, ilf^found ); int .rvsl( sem^def ); int .msg; int sta^x; string .dat; int .stm( stm^def); int .sem( sem^def ); int .ilf( ilf^def ); int ilf^found; begin return false; ! do nothing, dummy proc. end; ! of proc sem^reversal^advice^atm ?section stm^^input^from^process ?page "stm^^input^from^process" !##################################################################### !# # !# stm^^input^from^process # !# # !# This procedure determines if the message type is a valid # !# base24-atm internal message. if so the appropriate branch # !# is taken. # !# # !# INPUT PARAMETERS : # !# msg - message word pointer # !# mtp - message text pointer # !# # !# OUTPUT PARAMETERS : # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc stm^^input^from^process( msg, mtp ); int .msg; string .mtp; begin return false; ! do nothing, dummy proc. end; ! of proc sem^frmt^rvsl^cde^to^stm ?section stm^0200^route ?page "stm^0200^route" !##################################################################### !# # !# stm^0200^route # !# # !# This procedure formats and returns a response denial to the # !# local authorization process and logs the transaction to the ilf. # !# # !# INPUT PARAMETERS : # !# susp - suspense record # !# response - response code # !# substate - ilf substate # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc stm^0200^route( susp, response, substate ); int .susp( susp^bnet^def ); int response; int substate; begin return; ! do nothing, dummy proc. end; ! of proc stm^0200^route ?section stm^frmt^b24^tkn^to^xresp^emv ?page "stm^frmt^b24^tkn^to^xresp^emv" !##################################################################### !# # !# stm^frmt^b24^tkn^to^xresp^emv # !# # !# This procedure performs additional formatting of the SEM # !# response for EMV transactions. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# stm - Internal BASE message. # !# # !# OUTPUT PARAMETERS: # !# sem - with selected fields formatted. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc stm^frmt^b24^tkn^to^xresp^emv( sem, stm ); int .sem( sem^def); int .stm( stm^def); begin return true; ! do nothing, dummy proc. end; ! of proc stm^frmt^b24^tkn^to^xresp^emv ?section stm^frmt^b24^tkn^to^xrqst^emv ?page "stm^frmt^b24^tkn^to^xrqst^emv" !##################################################################### !# # !# stm^frmt^b24^tkn^to^xrqst^emv # !# # !# This procedure performs additional formatting of the SEM for EMV # !# transactions. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# stm - Internal BASE message. # !# # !# OUTPUT PARAMETERS: # !# sem - with selected fields formatted. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc stm^frmt^b24^tkn^to^xrqst^emv( sem, stm ); int .sem( sem^def); int .stm( stm^def); begin return true; ! do nothing, dummy proc. end; ! of proc stm^frmt^b24^tkn^to^xrqst^emv ?section stm^frmt^stf^prikey ?page "stm^frmt^stf^prikey" !##################################################################### !# # !# STM^FRMT^STF^PRIKEY # !# # !# THIS PROCEDURE BUILDS KEY TO THE STF RECORD FROM DATA IN THE STM.# !# # !# INPUT PARAMETERS: # !# STM - POINTER TO BASE24 INTERNAL ATM MESSAGE # !# # !# OUTPUT PARAMETERS: # !# STF - SWITCH TERMINAL FILE RECORD # !# # !##################################################################### proc stm^frmt^stf^prikey( stm, stf ); int .stm( stm^def ); struct .stf( stf^def ); begin return; ! do nothing, dummy proc. end; ! of proc stm^frmt^stf^prikey ?section util^send^stm ?page "util^send^stm" !##################################################################### !# # !# util^send^stm # !# # !# This procedure sends an internal message. # !# # !# INPUT PARAMETERS : # !# stm - pointer to base24 internal atm message # !# dest - symbolic name of destination # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc util^send^stm( stm, dest ); int .stm( stm^def ); int .dest; begin return; ! do nothing, dummy proc. end; ! of proc util^send^stm #DELETE 00255 / L SEM^FRMT^XRQST^EMV^TO^SEM^XRESP #ENDSCN = SW0C089 !#CMP2.28 01/31/08 BNETDDLS6027 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6027 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6027 * ******************************************************************************** #SCN = SW0C090 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6027 #NEWVERSION = 6028 #ADD 00262a0a * 31JAN2008 huac * Symptom: Banknet Global Authorization Enhancements * Problem: None. * Fix: Added SNF support to increase the number of available * stations to 16. Added support for new data elements 53 * (security control information) and 125 (new PIN data). * Separated the SEM definition into mandatory log, * optionally logged and not logged sections to decrease * the size of ILF records. Added ATM specific fields to * the PCT. * Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, * BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, FLGSDOC, * OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, SWBNETM, * SWIFM and SWIMM. Add SW60ABNT Subvol. Run * Make. BA10SC04 subvolume. New files: ILB1107M, * ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. * Make the ILF conversion using ILB1107M. Run the ILF * conversion using ILB1107R. Make the STF conversion * using STF1107M. Run the STF conversion using STF1107R. * Replace BNETLOGM and BNETMNWD. * Reference: WO #070202-01. #ADD 00378J0I NMM * * security related control information * bit map position = 53 * EBCDIC in transmission * 02 sec-info. 04 sec-typ pic 99. 04 encr-typ pic 99. 04 pb-frmt pic 99. 04 pk-idx-num pic 9(4). 04 filler1 pic 99. 04 filler2 pic 9(4). #DELETE 00942 /00949 SEM #DELETE 00970 /00978 SEM #DELETE 01063 /01070 SEM #REPLACE 01157R0Q SEM * Position 5 is on-behalf result 2. This is for MasterCard internal #REPLACE 01157R0Y SEM 10 rslt-1 pic x(1). #DELETE 01177 /01182 SEM #DELETE 01225G00/01225GEV SEM #DELETE 01322Y00/01322V09 SEM #DELETE 01376V00/01392K02 SEM #ADD 01411 SEM ********************************************************************** * * * START OF OPTIONAL FIELDS TO BE LOGGED TO THE ILF * * * ********************************************************************** 02 end-of-mand-ilf-flds pic x. * * EMV System-Related Data * bit map position = 55 * binary in transmission, variable in length * * * Note: The tags in field 55 may be in any order when sent or * received. Therefore, the tags should be parsed when * received and put in the correct place. * * Tags can be one or two bytes long (each half byte holding a * hexadecimal digit) . The presence of the second byte is indicated * by a value of 'F' in the second half of the first byte. * 02 emv-data. * Must be in the range 001-255 04 lgth pic xxx. 04 info. * Mandatory in the 0100 Authorization Request Message 06 arqc. * tag = 9F26 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(8). * * Cryptogram Information Data. Indicates the type of * cryptogram, the actions to be performed by the terminal, * and why the cryptogram was generated. * * Bit * Position Meaning * -------- ------- * * 8-7 Type of cryptogram: * 00 = AAC * 01 = TC * 10 = ARQC * 11 = Not Used * * 6 Reserved for future use * * 5 Reserved for future use * * 4 Advice required * * 3-1 Reason/advice/referral code: * 000 = No information given * 001 = Service not allowed * 010 = PIN Try Limit exceeded * 011 = Issuer Authentication failed * 1xx = Reserved for future use * Mandatory in the 0100 Authorization Request Message * 06 crypto-info. * tag = 9F27 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. * * Issuer Application Data. Contains proprietary * application data for transmission to the issuer in an * on-line transaction. * If the card populates the first seven bytes, the acquirer * must pass all seven bytes; if the card populates more than * seven bytes, the acquirer is obligated to pass only the * first seven bytes and may pass all data. * Mandatory in the 0100 Authorization Request Message * 06 iss-appl-data. * tag = 9F10 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(32). * * Unpredictable Number. A value used to provide * variability and uniqueness to the generation of the * application cryptogram. * Mandatory in the 0100 Authorization Request Message. 06 unpredict-num. * tag = 9F37 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(4). * * Application Transaction Counter. Counter maintained by * the application in the EMV (incrementing the ATC is * managed by the EMV). * Mandatory in the 0100 Authorization Request Message. 06 atc. * tag = 9F36 08 tag pic xx. 08 lgth pic x. 08 tag-data pic xx. * * Terminal Verification Results. Status of the * different functions as seen from the terminal as * shown below. Where the bit setting is not specified, * a bit setting of '1' indicates the meaning specified, * a bit setting of '0' indicates the opposite. * * Byte 1 * Bit * Position Meaning * -------- ------- * 8 Offline data authentication was not * performed * 7 Offline static data authentication failed * 6 EMV data missing * 5 Card appears on terminal exception file * 4 Offline dynamic data authentication failed * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * * Byte 2 * Bit * Position Meaning * -------- ------- * 8 EMV and terminal have different * application versions * 7 Expired application * 6 Application not yet effective * 5 Requested service not allowed for card * product * 4 New card * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * * Byte 3 * Bit * Position Meaning * -------- ------- * 8 Cardholder verification was not successful * 7 Unrecognized CVM * 6 PIN Try Limit exceeded * 5 PIN entry required and PIN pad not present * or not working * 4 PIN entry required, PIN pad present, but * PIN was not entered * 3 Online PIN entered * 2 Reserved for future use * 1 Reserved for future use * * Byte 4 * Bit * Position Meaning * -------- ------- * 8 Transaction exceeds floor limit * 7 Lower consecutive offline limit exceeded * 6 Upper consecutive offline limit exceeded * 5 Transaction selected randomly for online * processing * 4 Merchant forced transaction online * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * * Byte 5 * Bit * Position Meaning * -------- ------- * 8 Default TDOL used * 7 Issuer authentication was unsuccessful * 6 Script processing failed before final * GENERATE AC * 5 Script processing failed after final * GENERATE AC * 4 Reserved for future use * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * Mandatory in the 0100 Authorization Request Message 06 tvr. * tag = 95 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(5). * * Transaction Date (YYMMDD). Local date that the * transaction was authorized. * Mandatory in the 0100 Authorization Request Message 06 tran-dat. * tag = 9A 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(3). * * Transaction Type. Indicates the type of financial * transaction, represented by the first two digits of * ISO 8583 (1987) Processing Code. * Mandatory in the 0100 Authorization Request Message 06 tran-type. * tag = 9C 08 tag pic x. 08 lgth pic x. 08 tag-data pic x. * * Authorized amount of the transaction (excluding * adjustments). * Mandatory in the 0100 Authorization Request Message 06 amt-auth. * tag = 9F02 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(6). * * Transaction Currency Code. Indicates the currency code * of the transaction according to ISO 4217, as received * from the device or interchange. * Mandatory in the 0100 Authorization Request Message 06 tran-crncy-cde. * tag = 5F2A 08 tag pic xx. 08 lgth pic x. 08 tag-data pic xx. * * Application Interchange Profile. Indicates the * capabilities of the card to support specific functions * in the application, as shown below. Where the bit * value is not specified, a bit setting of '1' * indicates the meaning specified, a bit setting of '0' * indicates the opposite. * * Byte 1 * Bit * Position Meaning * -------- ------- * 8 Initiate * 7 Offline static data authentication is * supported * 6 Offline dynamic data authentication is * supported * 5 Cardholder verification is supported * 4 Terminal risk management is to be * performed * 3 Issuer authentication is supported * 2 Reserved for future use * 1 Reserved for future use * * Byte 2 * Bit * Position Meaning * -------- ------- * 8 Reserved for future use * 7 Reserved for future use * 6 Reserved for future use * 5 Reserved for future use * 4 Reserved for future use * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * Mandatory in the 0100 Authorization Request Message 06 aip. * tag = 82 08 tag pic x. 08 lgth pic x. 08 tag-data pic xx. * * Terminal Country Code. Indicates the country of the * terminal, represented according to ISO 3166. * Mandatory in the 0100 Authorization Request Message 06 term-cntry-cde. * tag = 9F1A 08 tag pic xx. 08 lgth pic x. 08 tag-data pic xx. * * Secondary amount associated with the transaction * representing a cashback amount. * Mandatory in the 0100 Authorization Request Message 06 amt-other. * tag = 9F03 08 tag pic xx. 08 lgth pic x. * If the card populates the six bytes of data in Amount, * Other, the acquirer must pass all six bytes. 08 tag-data pic x(6). * * Cardholder Verification Method Results. Indicates the * results of the last CVM performed, as shown below. * Where the bit setting is not specified, a bit setting * of '1' indicates the meaning specified, a bit setting * of '0' indicates the opposite. * * Byte 1 (CVM Performed) * Bit * Position Meaning * -------- ------- * 8 Reserved for future use * 7 0 = Fail cardholder verification if this * CVM is unsuccessful * 1 = Apply succeeding CVR if this CVM is * unsuccessful * 6-1 000000 = Fail CVM processing * 000001 = Plaintext PIN verification * performed by EMV * 000010 = Enciphered PIN verified online * 000011 = Plaintext PIN verification * performed by EMV and * signature (paper) * 000100 = Enciphered PIN verification * performed by EMV * 000101 = Enciphered PIN verification * performed by EMV and * signature (paper) * 0xxxxx = Values in the range 000110-011101 * reserved for future use by this * specification * 011110 = Signature (paper) * 011111 = No CVM required * 10xxxx = Values in the range 100000-101111 * reserved for use by the * individual payment systems * 11xxxx = Values in the range 110000-111110 * reserved for use by the issuer * 111111 = Not available for use * * Byte 2 (CVM Condition) * Value Meaning * ----- ------- * 00 Always * 01 If cash or cashback * 02 If not cash or cashback * 03 If terminal supports the CVM * 04 Reserved for future use * 05 Reserved for future use * 06 If transaction is in the application currency * and is under X value * 07 If transaction is in the application currency * and is over X value * 08 If transaction is in the application currency * and is under Y value * 09 If transaction is in the application currency * and is over Y value * 0A-7F Reserved for future use * 80-FF Reserved for future use by individual payment * systems * * Byte 3 (CVM Result) * Result of the (last) CVM performed as known by the * terminal. * 0 = Unknown (for example, for signature) * 1 = Failed (for example, for offline PIN) * 2 = Successful (for example, for offline PIN) * Optional in the 0100 Authorization Request Message 06 cvm-rslts. * tag = 9F34 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(3). * * Terminal Capabilities. Indicates the card data input, * CVM, and security capabilities of the terminal, as * shown below. Where the bit setting is not specified, * a bit setting of '1' indicates the meaning specified, * a bit setting of '0' indicates the opposite. * * Byte 1 (Card Data Input Capability) * Bit * Position Meaning * -------- ------- * 8 Manual key entry * 7 Magnetic stripe * 6 IC with contacts * 5 Reserved for future use * 4 Reserved for future use * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * * Byte 2 (CVM Capability) * Bit * Position Meaning * -------- ------- * 8 Plaintext PIN for EMV verification * 7 Enciphered PIN for online verification * 6 Signature (paper) * 5 Enciphered PIN for offline verification * 4 Reserved for future use * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * * Byte 3 (Security Capability) * Bit * Position Meaning * -------- ------- * 8 Static data authentication * 7 Dynamic data authentication * 6 Card capture * 5 Reserved for future use * 4 Reserved for future use * 3 Reserved for future use * 2 Reserved for future use * 1 Reserved for future use * Optional in the 0100 Authorization Request Message 06 emv-term-cap. * tag = 9F33 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(3). * * EMV Terminal Type. Indicates the environment of the * terminal, its communications capability, and its * operational control, as shown below. * * Operational Control Provided By: * Financial Merchant Cardholder * Environment Institution * ----------- ----------- -------- ---------- * Attended * Online Only 11 21 -- * Offline with 12 22 -- * online * capability * Offline only 13 23 -- * * Unattended * Online Only 14 24 34 * Offline with 15 25 35 * online * capability * Offline only 16 26 36 * Optional in the 0100 Authorization Request Message 06 emv-term-type. * tag = 9F35 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. * * Interface Device (IFD) Number. Unique and permanent * serial number assigned to the terminal by the * manufacturer. * Optional in the 0100 Authorization Request Message 06 term-serl-num. * tag = 9F1E 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(8). * * One character codes that define the type of * transaction for which authorization is requested. * Optional in the 0100 Authorization Request Message * * Value Description * ----- --------------------------------------------- * A Automobile/Vehicle Rental * C Cash Disbursement * F Restaurant * H Hotel, Motel and Cruise Ship Services * O College/School Expense * R Retail, All other Transactions * T Mail, Telephone Order or Pre-authorized Order * U Unique Transaction * X Transportation * Z ATM Cash Disbursement * 06 tran-cat-code. * tag = 9F53 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. * * Dedicated File Name. Identifies the name of the * DF as described in ISO/TEC 7816-4 * Optional in the 0100 Authorization Request Message 06 df-name. * tag = 84 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(16). * * Application Version Number. Version number assigned * by the payment system for the application. * Optional in the 0100 Authorization Request Message 06 appl-ver-num. * tag = 9F09 08 tag pic xx. 08 lgth pic x. 08 tag-data pic xx. * * Counter maintained by the terminal that is incremented by one * for each transaction. The Retrieval Reference Number (P-37) * should contain this counter left justified and padded with * zeroes. * Optional in the 0100 Authorization Request Message 06 tran-seq-cntr. * tag = 9F41 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(4). * * Primary Account Number (PAN) Sequence Number. This value * identifies and differentiates cards with the same PAN. * Optional in the 0100 Authorization Request Message 06 pan-seq-no. * tag = 5F34 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. * * Issuer Authentication Data. Data sent to the EMV for * on-line issuer authentication. * Mandatory in the 0110 Authorization Request Response Msg 06 iss-auth. * tag = 91 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(16). * * Optional in the 0110 Authorization Request Response Message 06 iss-script1. * tag = 71 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(128). * * Issuer Script Template 2. Commands to be sent to * the card for processing by the card application * Optional in the 0110 Authorization Request Response Message 06 iss-script2. * tag = 72 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(128). 04 user-fld pic x(61). ********************************************************************** * * * THESE FIELDS WILL NOT BE LOGGED TO THE ILF * * * ********************************************************************** 02 end-of-opt-ilf-flds pic x. * * pin capture code * bit map position = 26 * EBCDIC in transmission * Indicates max number of pins capable of being entered * other than 12. Not actual pin length. 04-12. * 02 pin-cap-cde pic 99. * * track 2 data * bit map position = 35 * field seperator is a D * EBCDIC in transmission, variable in length * 02 track2. 04 lgth pic 99. 04 val pic x(37). * * track 1 data * bit map position = 45 * EBCDIC in transmission, variable in length * 02 track1. 04 lgth pic 99. 04 val pic x(76). * * personal idendification number * bit map position = 52 * binary representation of hex characters in transmission * 02 pin pic x(8). * * security related control information * bit map position = 53 * EBCDIC in transmission * 02 sec-info. 04 sec-typ pic 99. 04 encr-typ pic 99. 04 pb-frmt pic 99. 04 pk-idx-num pic 9(4). 04 filler1 pic 99. 04 filler2 pic 9(4). * * Extended Payment Code * bit map position = 67 * Indicates the number of months cardholder is requesting to pay for * an item. * 02 ext-pmnt-cde pic 99. * * Date, Action * bit map position = 73 * Specifies the date of a future action (year, month, and day). In * addition, a message originator may use it as a static time such as * a birthdate. * 02 act-dat pic 9(6). * * additional data, national use * bit map position = 112 * Reserved for national organizations to define data unique to * specific networks or specific programs and services. * 02 adnl-data-natl. 04 lgth pic 999. 04 info pic x(100). * * card holder address information * bit map position = 120 * EBCDIC in transmission, variable in length * * lgth: number of bytes contained in last 4 fields * addr-tag: '01' * addr-lgth: length of last 2 fields * zip-cde: cardholder's zip code * addr: cardholder's address 02 crdhldr-addr. 04 lgth pic 999. 04 addr-tag pic xx. 04 addr-lgth pic 99. 04 zip-cde pic x(9). 04 addr pic x(40). * * New PIN Data * bit map position = 125 * binary representation of hex characters in transmission * 02 new-pin-data pic x(8). #DELETE 01411D00/01411D06 SEM #ADD 02059 PCT-BNET 02 auto-signon-on-strt type binary 16. 02 swi-id pic x(15). #DELETE 02070 PCT-BNET #ADD 02077 PCT-BNET 04 logon type binary 16. #REPLACE 02078 PCT-BNET 02 station occurs 16 times. #ADD 02092F00 PCT-BNET 04 b24-atm-tim type binary 16. #ADD 02095F00 PCT-BNET 04 b24-atm-dat pic 9(6). #ADD 02140F00 PCT-BNET 02 atm. 04 present type binary 16. 04 prod-id pic x(2). 04 dest type sym-name. 04 rtg-grp type id-num. 04 acq-txn-prfl pic x(16). 04 iss-txn-prfl pic x(16). 04 shrg pic x occurs 24 times. 04 not-on-us pic x(16). 04 trans-allowed pic x(16). 04 user-fld pic x. 04 timers. 06 saf type binary 32. 06 outbound type binary 32. 06 inbound type binary 32. 06 compl type binary 32. 06 compl-ack type binary 32. 04 perform occurs 5 times. 06 out-rqst. 08 count type binary 32. 08 timeouts type binary 32. 08 ttl-tim type binary 64. 06 in-rqst. 08 count type binary 32. 08 timeouts type binary 32. 08 ttl-tim type binary 64. 04 ncd. 06 not-on-us pic x(16). 06 trans-allowed pic x(16). 06 dflt-merch-typ pic x(4). #REPLACE 02241 ICF-BNET 02 typ type binary 16 occurs 5 times. #ENDSCN = SW0C090 !#CMP2.28 01/31/08 BNETG 6047 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6047 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6047 * ******************************************************************************** #SCN = SW0C091 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6047 #NEWVERSION = 6048 #ADD 00026u0S ! 31JAN2008 BensonE/huac ! Symptom: Banknet Global Authorization Enhancements ! Problem: None. ! Fix: Added source statements, global variables, defines and ! literals required to support the global auth mandate to ! add ATM Processing Enhancements and support for the ! EPS-Net to Banknet Migration. ! Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, ! BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, DDLFSTF, ! FLGSDOC, OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, ! SWBNETM, SWIFM and SWIMM. Add SW60ABNT subvol. ! Run Make. BA10SC04 subvolume is required to Make and ! run conversions. New conversion files: ILB1107M, ! ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. ! Make the ILF conversion using ILB1107M. Run the ILF ! conversion using ILB1107R. Make the STF conversion ! using STF1107M. Run the STF conversion using STF1107R. ! Replace BNETLOGM and BNETMNWD. ! Reference: WO #070202-01. #ADD 00026Q05 ?nolist, source =basrc_attknid( attkn^globals ) ?list #ADD 00026f0m ? ncdicfe_ #ADD 00026O3D ?nolist, source =basrc_baddltal( ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? ichg^compliance^atm^tkn ? ncdicf ? ncd^tkn ? pinc^tkn ? stm ? stm_ ? surcharge^data^tkn ? ) ?list ! at^flg1^tkn ! atm ! atmicf ! atmicfe_ ! at50^tkn ! ichg^compliance^atm^tkn ! ncdicf ! ncd^tkn ! pinc^tkn ! stm ! stm_ ! surcharge^data^tkn ! ) #ADD 00040 define sizeof( x ) = ( $len( x ) * $occurs( x ) )#; #ADD 00122n03 define sem^ncd^d = "00"#; define sem^pin^unblk^d = "91"#; define sem^pin^chng^d = "92"#; #ADD 00148 define atm^withdrawal^d( x ) = ( x.tran^cde = "10" )#; define atm^cash^back^d( x ) = ( x.tran^cde = "24" )#; define atm^inquiry^d( x ) = ( x.tran^cde = "30" )#; define atm^pin^chng^d( x ) = ( x.tran^cde = "81" )#; define atm^pin^unblk^d( x ) = ( x.tran^cde = "82" )#; #ADD 00166 define pos^crd^vrfy^d( x ) = ( x.tran.tran^cde = "16" ) #; define pos^mail^phone^d( x ) = ( x.tran.tran^cde = "13" ) #; define pos^pmnt^d( x ) = ( ( x.tran.tran^cde = "14" ) and ( ( found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = pmnt^from^3rd^prty^d ) or ( x.retl^sic^cde = "6532" or x.retl^sic^cde = "6533" ) ) )#; ! Base24 Transaction Codes define stm^pin^chng^d = "81"#; define stm^pin^unblk^d = "82"#; #ADD 00175p03 define atm^d = "1"#; define pos^d = "2"#; define atm^capture^d( x ) = ( x.rqst.resp = "1" )#; define late^resp^nack^d = "1"#; define late^ack^nack^d = "2"#; define manual^cash^disbursement^d = "6010"#; define automated^cash^disbursement^d = "6011"#; define merchandise^and^services^d = "6012"#; define pos^term^input^cap^d = sem.ntl^pos^data.cond^cde.byte[ 10 ]#; ! BNET Pin entry Codes define accepts^pins^d = "1"#; #ADD 00179N00 define atm^approved^d( x ) = ( x.rqst.resp < "010" )#; #ADD 00226i08 define resp^unable^to^route^d = "92"#; define resp^dup^detect^d = "94"#; ! ! Station Types ! define credit^d = "0"#; define debit^d = "1"#; define both^d = "2"#; #ADD 00233 define sem^atm^d( x ) = ( ( x.proc^cde = sem^wdl^d or x.proc^cde = sem^bal^inq^d or x.proc^cde = sem^pin^unblk^d or x.proc^cde = sem^pin^chng^d ) and x.addl^data.info.tran^cat^cde = "Z" )#; define sem^ncd^txn^d( x) = ( x.proc^cde = sem^ncd^d and ncd^exists^g and x.merch^typ = "6012" )#; #ADD 00245N00 ! Base24 ATM Response Codes ! literal resp^no^error^atm^l = 000; literal resp^invalid^card^atm^l = 052; literal resp^invalid^pin^atm^l = 053; literal resp^tran^bad^atm^l = 055; literal resp^lesser^amt^atm^l = 061; literal resp^unable^to^process^atm^l = 068; literal resp^inv^sharing^atm^l = 069; literal resp^sys^error^atm^l = 070; literal resp^dest^unavail^atm^l = 072; literal resp^format^error^atm^l = 074; literal trans^amt^field^l = 106; #REPLACE 00290N01/00290N02 literal atm^l = 001, pos^l = 002, #ADD 00348J04 literal sec^resp^invalid^pin^l = 3; #ADD 00434 int .snf^name^g[ 0:11 ] := ["************************"]; int .snf^num^g := -2; #ADD 00436 int(32) incr^trc^num^g := -1d; #ADD 00437 int(32) strt^trc^num^g := -1d; #ADD 00441N00 atm^cutover^g := -1, #ADD 00448s00 int enhnc^key^mgmt^g := false; #ADD 00448m00 int fallback^alwd^g := true; #ADD 00448d03 int gsi^used^g := false; #ADD 00448u03 int ncd^exists^g := false; int ncd^found^g := false; #ADD 00448u04 int num^db^crd^tbl^g := 1; int num^standin^tbl^g := 0; int partial^apprv^alwd^g := true; int send^on^behalf^dcln^advc^g := false; int sort^compare^lgth^g := 0; #ADD 00454d00 string .db^crd^tbl^g[ 0:69 ] := [ "MD", 68 * [ " " ] ]; string ncd^dflt^hopr^content^g[0:1] := ["10"]; #ADD 00454d01 string .standin^tbl^g[ 0:69 ] := [ 70 * [ " " ] ]; #REPLACE 00457N0K int .atm( atmicf^def ); #REPLACE 00457I01/00457I01 OFFSET 0 int unused1[ 03:22 ]; int .ncd( ncdicf^def ); int unused2[ 24:30 ]; #REPLACE 00468N04 int .atm( atmicfe_def); #REPLACE 00468N06/00468N06 OFFSET 0 int unused_1[ 03:22 ]; int .ncd( ncdicfe_def ); int unused_2[ 24:30 ]; #ADD 00482E04 int .ext tkn^log^atm^g := -1d; #ADD 00572 sec^control^info^bit^d = pbit^map[3].<04> #, !bit 53 #ADD 00615i01 new^pin^bit^d = sbit^map[3].<12> #, !bit 125 #REPLACE 00689 53, 0, nmm^field( sec^info ), #REPLACE 00989 53, 0, sem^field( sec^info ), #REPLACE 01062 125, 1, sem^field( new^pin^data ), #ADD 01366E0P snf^name^g[ 0:11 ], #DELETE 01366G00 #ADD 01366E0V int snf^num^g; #ADD 01366d00 int atm^cutover^g; #ADD 01366s00 int enhnc^key^mgmt^g; #ADD 01366s02 int fallback^alwd^g; #ADD 01366d03 int gsi^used^g; #ADD 01366u03 int num^db^crd^tbl^g; int num^standin^tbl^g; #ADD 01366u04 int partial^apprv^alwd^g; #ADD 01366G0E int(32) incr^trc^num^g; #ADD 01366G0G int(32) strt^trc^num^g; #ADD 01366E1O int .ext tkn^log^atm^g; string db^crd^tbl^g[ 0:69 ]; string standin^tbl^g[ 0:69 ]; string ncd^dflt^hopr^content^g[ 0:1 ]; #ADD 01366X0a ? hiswstm_txn_alwd_acq ? hiswstm_txn_alwd_iss #ADD 01366N2P ? hiswsem_rvsl_txn_rte_atm, #ADD 01366N2S ? hiswtkn^set^acq^rte, ? hiswtkn^set^at50^tkn, #ADD 01366N2U ? hiswtkn^updt^surcharge^tkn, ? hiswutil^atm^tran^index, ? hiswutil^atm^trans^allowed, #ADD 01366N31 ? hiswutil^ncd^trans^allowed, ? hiswutil^ncd^tran^index, #ADD 01366N33 ? hiswutil^reformat^ascii^field #ADD 01366N4H ! hiswutil^reformat^ascii^field, #ADD 01366N4M ? ut^binary^search, #ADD 01366N4Z ? quicksort, #ADD 01366N56 ! ut^binary^search, #ADD 01366N5J ! quicksort, #ENDSCN = SW0C091 !#CMP2.28 01/31/08 BNETLIBS6113 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6113 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6113 * ******************************************************************************** #SCN = SW0C092 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6113 #NEWVERSION = 6114 #ADD 04419M0N ! 31JAN2008 BensonE/huac ! Symptom: Banknet Global Authorization Enhancements ! Problem: None. ! Fix: Add ATM Processing Enhancements and support for the ! EPS-Net to Banknet Migration. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^nmm^request ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^sem^xrvsl ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! util^add^swi^cmn^data^tkn ! util^ilf^add ! util^ilf^collapse^base24 ! util^ilf^expand^base24 ! util^ilf^updt ! util^increment^trace ! util^suspend^and^send^sem ! util^suspend^tran^delete ! Procs added: util^build^db^crd^tbl ! util^build^standin^tbl ! util^compare^var ! util^debit^crd^typ ! util^pos^standin^rcs ! util^stf^get ! Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, ! BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, DDLFSTF, ! FLGSDOC, OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, ! SWBNETM, SWIFM and SWIMM. Add SW60ABNT Subvol. ! Run Make. BA10SC04 subvolume. New files: ILB1107M, ! ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. ! Make the ILF conversion using ILB1107M. Run the ILF ! conversion using ILB1107R. Make the STF conversion ! using STF1107M. Run the STF conversion using STF1107R. ! Replace BNETLOGM and BNETMNWD. ! Reference: WO #070202-01. ! 31JAN2008 BensonE ! Symptom: Banknet offline certification during the Global Auth ! project uncovered a few problems in existing code. ! Problem: DE44-Addl Response Data not returned in response for ! invalid Fleet Card requests (DE39 = 12). ! DE48 SE35-PayPass Non-Card Form Factor was misaligned ! and incorrect DE48 length in outbound response. ! Collapse/expand problems with DE48 SE33-PayPass ! Mapping Info. Expand problem with DE48 SE71-On-behalf ! Services. Misalignment of begin-end caused DE48 SE61 ! to require both partial approval and auto ! substantiation before it was sent. ! Fix: Check decline reason in purchase token and turn on ! bit 44. DE48 SE35 is in request so do not add to DE48 ! length on response. Collapse/expand DE48 SE33 by ! subfield. Each On-behalf service is 4 bytes. Separate ! code for partial approval and auto substantiation ! when sending DE48 SE61. ! Procs modified: pstm^frmt^0210^to^xresp ! util^collapse^sem ! util^expand^sem ! pstm^frmt^sem^addl^data ! Dependency: Apply fixes to BNETLIBS and run Make. ! Reference: WO #070202-01. ! ! 31JAN2008 Steffej ! Symptom: The interface is dumping when two Payment transactions ! are received in a row. The first Payment transaction ! raises EMS event #3262 indicating it is unable to add ! the CT (transaction specific data token) to the PSTM. ! When the second Payment transaction is received, the ! interface raises EMS events #8049, #8041, #2720 and ! abends. The stack is corrupt. Banknet offline ! certification during the Global Auth project uncovered ! this problem in existing code. ! Problem: The Release 07.2 Mandates, specifically the support of ! DE48 Subfield 77 (payment transaction type), should be ! initializing the Transaction Specific Data token (pos), ! but instead is initializing the Transaction Subtype ! Token (base). The token ID contains the Transaction ! Subtype Token ID value and the Transaction Subtype Token ! structure is being passed. Additionally, the ! tkn^add^lgth contains garbage. This causes invalid ! processing to occur in the code and unpredictable ! results. ! Fix: Modified the call to tkn^main^convert to pass the ! Transaction Specific Data Token ID, the pos product ! indicator literal and the Transaction Specific Data ! token structure. Also, set the Dataset ID field in the ! token to indicate related transaction data. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: WO #070202-01. !#################################################################### #REPLACE 05319A01 PSTM^FRMT^0200^TO^XRQST int found^txn^sub^tkn := false; #ADD 05323 PSTM^FRMT^0200^TO^XRQST int manual^entry := false; #REPLACE 05407 PSTM^FRMT^0200^TO^XRQST if found^txn^sub^tkn and #DELETE 05408 /05410 PSTM^FRMT^0200^TO^XRQST #DELETE 05499 /05507 PSTM^FRMT^0200^TO^XRQST #ADD 05580 PSTM^FRMT^0200^TO^XRQST set( manual^entry, true ); #REPLACE 05583 /05583 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^entry^mde <> "02" then begin track2^bit^d := 1; end else #DELETE 05616 /05628 PSTM^FRMT^0200^TO^XRQST #ADD 05655 PSTM^FRMT^0200^TO^XRQST if track2^bit^d then begin ! ! Calculate the length of the Track2 data ! track2lgth := $min( $len( sem.track2.val ), track2^lgth ); call integer^ascii^( sem.track2.lgth, track2lgth ); movl ( sem.track2.val, pstm.tran.track2.byte[1], track2lgth ); if sem.track2.val.byte[ panlgth ] <> "D" then ! ! Check for the Ebcdic field separator ! movd ( sem.track2.val.byte[ panlgth ], "D" ); end; ! of track2^bit^d #ADD 05705 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^purch^cb^d then begin if manual^entry then begin return resp^format^error^pos^l; end; end; #ADD 05708 PSTM^FRMT^0200^TO^XRQST if sem.pos^entry^mde = "81" and track2^bit^d = 0 and util^debit^crd^typ( pstm.rte.srv ) then begin track2^bit^d := 1; ! Calculate the length of the Track2 data track2lgth := $min( $len( sem.track2.val ), track2^lgth ); call integer^ascii^( sem.track2.lgth, track2lgth ); movl ( sem.track2.val, pstm.tran.track2.byte[1], track2lgth ); if sem.track2.val.byte[ panlgth ] <> "D" then begin ! Check for the Ebcdic field separator movd ( sem.track2.val.byte[ panlgth ], "D" ); end; end; #ADD 05708A00 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info = "C" and sem.proc^cde <> sem^bal^inq^d and sem.proc^cde <> sem^cash^adv^d then begin return resp^format^error^pos^l; end; if pos^cash^adv^d( pstm ) and util^debit^crd^typ( pstm.rte.srv ) then begin movd( sem.proc^cde, sem^wdl^d ); movd( sem.addl^data.info, "C" ); if sem.merch^typ <> "6010" then begin return resp^format^error^pos^l; end; if manual^entry then begin return resp^format^error^pos^l; end; if ( pstm.pin = zeroes for $len( pstm.pin ) or pstm.pin = blanks for $len( pstm.pin ) ) and pstm.pin^tries <> "Z" and pstm.pin^tries <> "z" then begin return resp^format^error^pos^l; end; end; #REPLACE 05708A01 PSTM^FRMT^0200^TO^XRQST if pos^pmnt^d( pstm ) then #DELETE 05708A02 PSTM^FRMT^0200^TO^XRQST #DELETE 05708A05/05708A07 PSTM^FRMT^0200^TO^XRQST #REPLACE 05708A08/05708A0C PSTM^FRMT^0200^TO^XRQST if sem.addl^data.lgth = " " then begin addl^data^bit^d := 1; movd( sem.addl^data.lgth, "001" ); end; #REPLACE 05708A0E/05708A0L PSTM^FRMT^0200^TO^XRQST if ntwk^assign^tcc^g then begin movd( sem.addl^data.info.tran^cat^cde, " " ); end else begin movd( sem.addl^data.info.tran^cat^cde, "P" ); end; #REPLACE 05708A0N PSTM^FRMT^0200^TO^XRQST call ascii^integer^( sem.addl^data.lgth, lgth ); #REPLACE 05708A0P/05708A0R PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.addl^data.lgth, ( lgth + $len(sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77) ) ); #REPLACE 05708A0T/05708A0V PSTM^FRMT^0200^TO^XRQST movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); #REPLACE 05708A0X/05708A0Y PSTM^FRMT^0200^TO^XRQST movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); #DELETE 05708A0Z/05708A0a PSTM^FRMT^0200^TO^XRQST #REPLACE 05708A0b/05708A0g PSTM^FRMT^0200^TO^XRQST ! ! ! Initialize to default value "C05" ! ! ! movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C05" ); #REPLACE 05708A0i/05708A0s PSTM^FRMT^0200^TO^XRQST if fnd^txn^spcf^data^tkn then begin if txn^spcf^data^tkn.dataset^id = "57" then begin if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C1" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C01" ); end; #REPLACE 05708A0u/05708A10 PSTM^FRMT^0200^TO^XRQST if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C2" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C02" ); end; #REPLACE 05708A12/05708A18 PSTM^FRMT^0200^TO^XRQST if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C3" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C03" ); end; #REPLACE 05708A1A/05708A1I PSTM^FRMT^0200^TO^XRQST if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "OG" or txn^spcf^data^tkn.related^txn^data. bus^appl^id = "GP" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C04" ); end; #REPLACE 05708A1K PSTM^FRMT^0200^TO^XRQST end; ! of if txn^spcf^data^tkn.dataset^id = "57" ! #REPLACE 05708A1M PSTM^FRMT^0200^TO^XRQST end; ! of if fnd^txn^spcf^data^tkn ! #DELETE 05708A1N PSTM^FRMT^0200^TO^XRQST #REPLACE 05708A1O PSTM^FRMT^0200^TO^XRQST end; ! of if pos^pmnt^d ! #DELETE 05716 /05740 PSTM^FRMT^0200^TO^XRQST #REPLACE 05740A01/05740A03 PSTM^FRMT^0200^TO^XRQST if util^debit^crd^typ( pstm.rte.srv ) and ( pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip or pstm.pt^srv^entry^mde = pan^auto^cntctlss^mag^stripe ) then #DELETE 05741 /05764 PSTM^FRMT^0200^TO^XRQST #DELETE 05792 /05806 PSTM^FRMT^0200^TO^XRQST #ADD 05812 PSTM^FRMT^0200^TO^XRQST move ( sem.ntl^pos^data.cond^cde.byte[ 10 ], pos^data^get^tkn.term^input^cap^ind ); #DELETE 05813 /05832 PSTM^FRMT^0200^TO^XRQST #REPLACE 05857 /05857 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if pstm.tran.ovrrde^flg = "3" or pstm.term^typ = "99" then #REPLACE 05860 PSTM^FRMT^0200^TO^XRQST ! No terminal used (Voice/ARU Authorization ! #DELETE 05861 PSTM^FRMT^0200^TO^XRQST #REPLACE 05863 /05863 OFFSET 0 PSTM^FRMT^0200^TO^XRQST movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "1" ); #DELETE 05866 PSTM^FRMT^0200^TO^XRQST #ADD 05876 PSTM^FRMT^0200^TO^XRQST if pos^mail^phone^d( pstm ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 4 ], "1" ); end else #REPLACE 05885 PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "07" then #DELETE 05886 /05894 PSTM^FRMT^0200^TO^XRQST #DELETE 05900 /05902 PSTM^FRMT^0200^TO^XRQST #ADD 05950 PSTM^FRMT^0200^TO^XRQST if sem.pos^entry^mde = "81" or pstm.pt^srv^cond^cde = "15" then ! ! Electronic commerce or home terminal ! begin movd ( sem.ntl^pos^data.cond^cde.byte[9],"6"); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "6" ); end; #DELETE 05950B00/05962B00 PSTM^FRMT^0200^TO^XRQST #ADD 05964 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' ps51^tkn^id^d; movd( tkn^id1, pos^data1^tkn^id^d ); ! ! ! Determine if this is a recurring payment transaction. ! ! ! ! Note: Pre 6.0 device handlers use the PS51 token to identify! ! recurring payment transactions while 6.0 ones use the POS ! ! Data1 token ! ! ! if ( hiswtkn^get^tkn( pstm, tkn^id1, @pos^data1^tkn, pos^data1^tkn^lgth ) and pos^data1^tkn.recur^pmnt^ind = "R" ) then begin pos^data1^recur^pmnt := true; end; ! of if ( hiswtkn^get^tkn( pstm, ! if ( hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) and ps51^get^tkn.moto^flg = "2" ) then begin ps51^recur^pmnt := true; end; ! of if ( hiswtkn^get^tkn( pstm, ! if pos^data1^recur^pmnt or ps51^recur^pmnt then begin movd ( sem.ntl^pos^data.cond^cde.byte[ 3 ], "4" ); if pos^data1^recur^pmnt and pos^data1^tkn.num^instl <> blanks for $len( pos^data1^tkn.num^instl ) and pos^data1^tkn.num^instl <> zeroes for $len( pos^data1^tkn.num^instl ) then begin ext^pmnt^cde^bit^d := 1; move( sem.ext^pmnt^cde, pos^data1^tkn.num^instl ); end; ! of if pos^data1^recur^pmnt^g and if pstm.pt^srv^cond^cde <> "15" and ! cust term/home term ! sem.pos^entry^mde <> "81" and ! electronic commerce ! not pos^mail^phone^d( pstm ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "2" ); movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 10 ], "1" ); if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42. end; end; ! of if pos^data1^recur^pmnt or ps51^recur^pmnt if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "0" then begin return resp^format^error^pos^l; end else if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "2" ); end; end; ! of if sem.addl^data.info.ecom^sec^sub^fld^42. call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if sem.ntl^pos^data.cond^cde.byte[ 2 ] = "0" and stf.on^premise^flg = 0 then begin movd( sem.ntl^pos^data.cond^cde.byte[ 2 ], "1" ); end; if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "0" and $numeric( stf.crdhldr^actvt^term^ind ) then begin move( sem.ntl^pos^data.cond^cde.byte[ 9 ], stf.crdhldr^actvt^term^ind ); end; if sem.ntl^pos^data.cond^cde.byte[ 10 ] = "0" and $numeric( stf.term^input^cap^ind ) then begin move( sem.ntl^pos^data.cond^cde.byte[ 10 ], stf.term^input^cap^ind ); end; end; if pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip then begin movd( sem.ntl^pos^data.cond^cde.byte[10], cntctlss^m^chip ); end; if pstm.pt^srv^entry^mde = pan^auto^cntctlss^mag^stripe and sem.ntl^pos^data.cond^cde.byte[10] <> cntctlss^m^chip then begin movd( sem.ntl^pos^data.cond^cde.byte[10], cntctlss^mag^stripe ); end; ! ! ! If this is an EMV transaction, determine the pos entry mode ! ! and populate DE-55. ! ! ! if not pstm^frmt^b24^tkn^to^xrqst^emv( sem, pstm ) then begin return resp^format^error^pos^l; end; #ADD 05967 PSTM^FRMT^0200^TO^XRQST if manual^entry then begin ! ! ! PIN must not be present in manually-entered transaction. ! ! return resp^format^error^pos^l; end; #DELETE 05968 /05977 PSTM^FRMT^0200^TO^XRQST #ADD 06030 PSTM^FRMT^0200^TO^XRQST if enhnc^key^mgmt^g then begin sec^control^info^bit^d := 1; mov^( sem.sec^info, zeroes ); movd( sem.sec^info.sec^typ, "97" ); movd( sem.sec^info.encr^typ, "01" ); movd( sem.sec^info.pb^frmt, "01" ); movd( sem.sec^info.pk^idx^num, "0001" ); end; #DELETE 06034 /06082 PSTM^FRMT^0200^TO^XRQST #DELETE 06084 /06132 PSTM^FRMT^0200^TO^XRQST #ADD 06133 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data = "S" and pstm.pin^tries <> "Z" and pstm.pin^tries <> "z" then begin if sem.ntl^pos^data.cond^cde.byte[ 9 ] = cat^lvl^1^auto^disp^mach^d then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); end; end else if sem.ntl^pos^data.cond^cde.byte[ 9 ] = cat^lvl^2^self^srvc^term^d then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^1^auto^disp^mach^d ); end; #ADD 06175 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "0" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" then begin if manual^entry then begin return resp^format^error^pos^l; end; end; #REPLACE 06180 /06180 OFFSET 0 PSTM^FRMT^0200^TO^XRQST sem.proc^cde <> sem^pmnt^txn^d and not util^debit^crd^typ( pstm.rte.srv ) and #ADD 06223 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cntry^cde = "276" then begin movd( sem.ntl^pos^data.cntry^cde, "280"); end; #ADD 06267 PSTM^FRMT^0200^TO^XRQST not util^debit^crd^typ( pstm.rte.srv ) then #DELETE 06268 PSTM^FRMT^0200^TO^XRQST #ADD 06272 PSTM^FRMT^0200^TO^XRQST movd( sem.crdhldr^addr.addr^tag, "01" ); #DELETE 06273 /06281 PSTM^FRMT^0200^TO^XRQST #ADD 06300 PSTM^FRMT^0200^TO^XRQST if sem.crdhldr^addr.addr^tag = "01" then #DELETE 06301 PSTM^FRMT^0200^TO^XRQST #ADD 06312 PSTM^FRMT^0200^TO^XRQST #DELETE 06313 /06320 PSTM^FRMT^0200^TO^XRQST #ADD 06519 PSTM^FRMT^0210^TO^XRESP sec^control^info^bit^d := 0; #ADD 06551 PSTM^FRMT^0210^TO^XRESP if ( purchase^tkn^data.mc^fleet^data. dcln^rsn^cde <> zeroes for 2 bytes ) and ( purchase^tkn^data.mc^fleet^data. dcln^rsn^cde <> blanks for 2 bytes ) then begin addl^resp^bit^d := 1; movd( sem.addl^resp^data.lgth, "02" ); move( sem.addl^resp^data.info, purchase^tkn^data.mc^fleet^data. dcln^rsn^cde ); end; #DELETE 06551M00/06553 PSTM^FRMT^0210^TO^XRESP #ADD 06621 PSTM^FRMT^0210^TO^XRESP if pct.dflt.cntry^cde <> "840" then begin if pstm.addr^flds.addr^vrfy^stat = "Y" then begin movd( sem.addl^data.info.avs^resp.result, "X" ); end else if pstm.addr^flds.addr^vrfy^stat = "Z" then begin movd( sem.addl^data.info.avs^resp.result, "W" ); end; end; #REPLACE 07064A08/07064A09 PSTM^FRMT^0210^TO^XRESP movd( sem.addl^data.info.ncff^rqst^resp^sub^fld^35. tag^data, "A" ); #REPLACE 07064A0D/07064A0E PSTM^FRMT^0210^TO^XRESP movd( sem.addl^data.info.ncff^rqst^resp^sub^fld^35. tag^data, "D" ); #DELETE 07064A0H/07064A0K PSTM^FRMT^0210^TO^XRESP #ADD 07121 PSTM^FRMT^0210^TO^XRESP movl( sem.private^data.info.byte[ 0 ], sem.acq^inst.cde, $len(prikey^def.term^id) ); lgth := $len(prikey^def.term^id); movl( sem.private^data.info.byte[ lgth ], sem.pan.num, $len(prikey^def.pan) ); lgth := lgth + $len(prikey^def.pan); movd( sem.private^data.info.byte[ lgth ], pos^d ); lgth := lgth + 1; call integer^ascii^( sem.private^data.lgth, lgth ); #DELETE 07122 /07127 PSTM^FRMT^0210^TO^XRESP #ADD 07169 PSTM^FRMT^0220^TO^XADV int de48^lgth := 0; #ADD 07175 PSTM^FRMT^0220^TO^XADV if sem.proc^cde = sem^pmnt^txn^d then begin return resp^format^error^pos^l; end; #ADD 07207 PSTM^FRMT^0220^TO^XADV movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag, "20" ); movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.lgth, "01" ); movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "S" ); call ascii^integer^( sem.addl^data.lgth, de48^lgth ); de48^lgth := de48^lgth + $len( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20 ); call integer^ascii^( sem.addl^data.lgth, de48^lgth ); addl^data^bit^d := 1; #ADD 07794 SUB^CONVERT^AMT if pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) then begin if pstm.tran.amt^1 <> 0f then begin return false; end else begin movl( sem.tran^amt, zeroes, $len( sem.tran^amt ) ); return true; end; end; #REPLACE 08110 PSTM^FRMT^RESP^CDE^TO^SEM "057",! Lost/Stolen Card ! "41",! Lost Card, Capture! #DELETE 08556 /08564 PSTM^FRMT^SEM^ADDL^DATA #ADD 08577 PSTM^FRMT^SEM^ADDL^DATA if pstm.addr^typ = "98" and not util^debit^crd^typ( pstm.rte.srv ) then #DELETE 08578 PSTM^FRMT^SEM^ADDL^DATA #ADD 08687A09 PSTM^FRMT^SEM^ADDL^DATA end; #DELETE 08687A0b PSTM^FRMT^SEM^ADDL^DATA #REPLACE 08713 PSTM^FRMT^SEM^ADDL^DATA end; ! of send SE61 ! #REPLACE 09256 /09256 OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA $len( ps51^get^tkn.cvd^fld ) and not util^debit^crd^typ( pstm.rte.srv ) then #DELETE 09570 /09584 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 09587 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if sem.proc^cde = sem^pmnt^txn^d then begin movd ( sem.proc^cde.byte[ 2 ], "00" ); end else #ADD 10068 SUB^CONVERT^AMT if sem.addl^data.info.avs^rqst.cde = "51" then begin if sem.tran^amt <> zeroes for $len( sem.tran^amt ) then begin return false; end else begin set ( pstm.tran.amt^1, 0f ); return true; end; end; #ADD 11125 SEM^FRMT^NMM^REQUEST string .fiid[ 0:3 ] := [ 4 * [" "] ]; string .gsi[ 0:5 ] := [ 6 * [" "] ]; #ADD 11156 SEM^FRMT^NMM^REQUEST if gsi^used^g and not $param( group ) then begin fiid ':=' pct.swi^id for sizeof( fiid ); call util^get^bniif( fiid^l, fiid, gsi, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, security ); end else #ADD 11217 SEM^FRMT^NMM^REQUEST if enhnc^key^mgmt^g and traffic <> acq^l then begin sec^control^info^bit^d := 1; mov^( sem.sec^info, zeroes ); movd( sem.sec^info.sec^typ, "97" ); movd( sem.sec^info.encr^typ, "01" ); movd( sem.sec^info.pb^frmt, "01" ); movd( sem.sec^info.pk^idx^num, "0001" ); end; #REPLACE 11284 /11285 SEM^FRMT^NMM^REQUEST nmm^info^cde = nmm^deactvt^l or nmm^info^cde = nmm^actvt^l then #ADD 11290 SEM^FRMT^NMM^REQUEST if gsi^used^g and not $param( group ) then begin if $numeric( gsi[5] ) and gsi[0] = "0" then begin movl( sem.pan.num, gsi[1], 5 ); end else begin movl( sem.pan.num, gsi[0], 5 ); end; end else #REPLACE 11359 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = chip^crd^unreliable^cvv then #REPLACE 11620 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 36, #ADD 11665 SEM^FRMT^RESP^CDE^TO^PSTM "86",! PIN validation not possible ! "054",! No Security box ! "88",! Cryptographic failure ! "054",! No Security box ! #ADD 11960 SEM^FRMT^XADV^TO^SEM^XACK crd^seq^num^bit^d := 0; #ADD 11979 SEM^FRMT^XADV^TO^SEM^XACK mbr^def^bit^d := 0; #REPLACE 13102 SEM^FRMT^XRESP^TO^PSTM^0210 begin #ADD 13103 SEM^FRMT^XRESP^TO^PSTM^0210 sem.addl^data.info.avs^resp.result ); if sem.crdhldr^addr.zip^cde.byte[ 5 ] = " " then begin if sem.addl^data.info.avs^resp.result = "X" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if sem.addl^data.info.avs^resp.result = "W" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Z" ); end; end; end; #DELETE 13104 /13105 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 13369 SEM^FRMT^XRESP^TO^PSTM^0210 if not sem^frmt^xresp^emv^to^pstm^tkn( sem, pstm ) then #ADD 13546 SEM^FRMT^XRESP^TO^SEM^XRVSL emv^data^bit^d := 0; #DELETE 13838 /13841 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 13859 /13859 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 partial^apprv^ind = "1" and partial^apprv^alwd^g and sem.proc^cde <> sem^purch^cb^d then #ADD 13941A04 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := 0; tkn^id ':=' txn^spcf^data^tkn^id^d; #REPLACE 13941A06 SEM^FRMT^XRQST^TO^PSTM^0200 pi_pos_l, #REPLACE 13941A09 SEM^FRMT^XRQST^TO^PSTM^0200 txn^spcf^data^tkn ); #ADD 13941A0D SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Set the Dataset ID field to indicate this is ! Related Transaction Data. ! movd( txn^spcf^data^tkn.dataset^id, "57" ); #ADD 14540 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.avs^rqst.cde = "51" and pstm.tran.tran^cde.tc = "10" and sem.tran^amt = "000000000000" then begin ! ! ! Card Verification transaction. ! ! ! movd( pstm.tran.tran^cde.tc, "16" ); movd( pstm.tran.tran^cde.t, "0" ); movd( pstm.tran.tran^cde.aa, "00" ); movd( pstm.tran.tran^cde.c, "0" ); end; #DELETE 15383 /15399 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15406 SEM^FRMT^XRQST^TO^PSTM^0200 if pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) then begin end else #REPLACE 15435 SEM^FRMT^XRQST^TO^PSTM^0200 if not sem^frmt^xrqst^emv^to^pstm^tkn( sem, pstm ) then #ADD 15578 SEM^FRMT^XRQST^TO^SEM^XRESP new^pin^bit^d := 0; sec^control^info^bit^d := 0; #ADD 15835 SEM^FRMT^XRVSL^TO^SEM^XACK advice^cde^bit^d := 0; #REPLACE 16239 UTIL^^EXPAND !# sim - Internal message STM/PSTM #! #REPLACE 16241 UTIL^^EXPAND !# ofst - Offset to the token buffer in the SIM #! #REPLACE 16248 /16251 UTIL^ADD^SWI^CMN^DATA^TKN proc util^add^swi^cmn^data^tkn( sem, sim, tkn^id, ofst, pos^userdata ) variable; int .sem( sem^def ); int .sim; #REPLACE 16258 UTIL^ADD^SWI^CMN^DATA^TKN "UNABLE TO ADD SWITCH COMMON DATA TOKEN TO (P)STM: " #REPLACE 16263 UTIL^ADD^SWI^CMN^DATA^TKN "UNABLE TO ADD SWITCH COMMON DATA TOKEN TO (P)STM: " #REPLACE 16269 UTIL^ADD^SWI^CMN^DATA^TKN ',' "FROM (P)STM: PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\ " #ADD 16271 UTIL^ADD^SWI^CMN^DATA^TKN int .pstm( pstm^def ) := @sim; int .stm ( stm^def ) := @sim; #ADD 16280 UTIL^ADD^SWI^CMN^DATA^TKN int pos^userdata^flg; #REPLACE 16294 UTIL^ADD^SWI^CMN^DATA^TKN ! Determine if the token is in the SIM. ! #ADD 16295 UTIL^ADD^SWI^CMN^DATA^TKN if $param( pos^userdata ) then pos^userdata^flg := pos^userdata else pos^userdata^flg := false; #REPLACE 16296 UTIL^ADD^SWI^CMN^DATA^TKN get^tkn^rslt := tkn^get^info( sim, #REPLACE 16303 UTIL^ADD^SWI^CMN^DATA^TKN pos^userdata^flg ); #REPLACE 16314 UTIL^ADD^SWI^CMN^DATA^TKN ! Switch Common Data token not in SIM. Add it. ! #REPLACE 16354 UTIL^ADD^SWI^CMN^DATA^TKN tkn^rslt := tkn^add^info( sim, #REPLACE 16364 UTIL^ADD^SWI^CMN^DATA^TKN pos^userdata^flg ); #ADD 16527 UTIL^BNRLF^ADD ?section util^build^db^crd^tbl ?page "util^build^db^crd^tbl" !##################################################################### !# # !# util^build^db^crd^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# BNET-DEBIT-CARD-TYPES into the global table db^crd^tbl^g. # !# The table contains the card types that identify BASE24-acquired # !# transactions performed on debit cards. # !# # !# INPUT PARAMETERS: # !# card^list - Pointer to the lconf parameter # !# BNET-DEBIT-CARD-TYPES. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^build^db^crd^tbl( card^list, list^lgth ); string .card^list; int list^lgth; begin wlform( bad^card, "Invalid Card Type '\?' detected in param" ',' " BNET-DEBIT-CARD-TYPES. Value will be ignored" ) int i; int j; string crd^typ^swap^area[0:1]; string .in^ptr := @card^list; string .tbl^ptr := @db^crd^tbl^g; ?page "subproc sub^valid^card^type" !################################################################# !# # !# sub^valid^card^type # !# # !# This sub procedure validates the contents of the local # !# variable crd^type as follows # !# crd^typ[ 0 ] must be alphanumeric # !# crd^typ[ 1 ] must be alphanumeric or blank # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - the card type is valid # !# False - the card type is not valid # !# # !################################################################# int subproc sub^valid^card^type( crd^typ ); string .crd^typ; begin if not $special( crd^typ[ 0 ] ) and ( not $special( crd^typ[ 1 ] ) or crd^typ[1] = " " ) then begin return true; end; return false; end; ! of subproc sub^valid^card^type ?page "util^build^db^crd^tbl" !################################################################# !# # !# This is the main body of PROC util^build^db^crd^tbl # !# # !################################################################# set( num^db^crd^tbl^g, 0 ); j := ( list^lgth + 1 ) / 2; for i := 0 to j - 1 do begin if sub^valid^card^type( card^list[ 2 * i ] ) then begin tbl^ptr ':=' card^list[ 2 * i ] for 2 -> @tbl^ptr; increment^d( num^db^crd^tbl^g ); end else begin call log^message^( 4130, ! routing code ! , @bad^card, net.myname, 1, @card^list[ 2 * i ], 2 ); end; end; ! of for if num^db^crd^tbl^g = 0 then begin db^crd^tbl^g ':=' "MD"; increment^d( num^db^crd^tbl^g ); end else if num^db^crd^tbl^g > 1 then begin sort^compare^lgth^g := 2; call quicksort( db^crd^tbl^g, num^db^crd^tbl^g, sort^compare^lgth^g, crd^typ^swap^area, util^compare^var ); end; end; ! of proc util^build^debit^crd^tbl ?section util^build^standin^tbl ?page "util^build^standin^tbl" !##################################################################### !# # !# util^build^standin^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# BNET-STAND-IN-RCS into the global table standin^tbl^g. # !# The table contains the response codes returned by Banknet # !# that will invoke standin authorization. # !# # !# INPUT PARAMETERS: # !# resp^cde^list - Pointer to the LCONF parameter # !# BNET-STAND-IN-RCS text. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^build^standin^tbl( resp^cde^list, list^lgth ); string .resp^cde^list; int list^lgth; begin wlform( bad^resp^cde, "Invalid Response Code '\?' detected in param" ',' " BNET-STAND-IN-RCS. Value will be ignored" ) int i; int j; string resp^cde^swap^area[0:1]; string .in^ptr := @resp^cde^list; string .tbl^ptr := @standin^tbl^g; set( num^standin^tbl^g, 0 ); j := ( list^lgth + 1 ) / 2; for i := 0 to j - 1 do begin if all^numeric( resp^cde^list[ 2 * i ], 2 ) then begin tbl^ptr ':=' resp^cde^list[ 2 * i ] for 2 -> @tbl^ptr; increment^d( num^standin^tbl^g ); end else begin call log^message^( 4131, ! routing code !, @bad^resp^cde, net.myname, 1, @resp^cde^list[ 2 * i ], 2 ); end; end; ! of for if num^standin^tbl^g > 1 then begin sort^compare^lgth^g := 2; call quicksort( standin^tbl^g, num^standin^tbl^g, sort^compare^lgth^g, resp^cde^swap^area, util^compare^var ); end; end; ! of proc util^build^standin^tbl #ADD 17622 UTIL^COLLAPSE^SEM ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1—Account Number Indicator ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag = "01" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! Move Subfield 2—Account Number ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag = "02" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! Move Subfield 3—Expiration Date ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag = "03" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! #DELETE 17623 /17638 UTIL^COLLAPSE^SEM #ADD 17874 UTIL^COLLAPSE^SETL ?section util^compare^var ?page "util^compare^var" !##################################################################### !# # !# util^compare^var # !# # !# This procedure compares 2 input variables and returns a # !# result value. # !# # !# INPUT PARAMETERS: # !# var^1 - entry one # !# var^2 - entry two # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# 0 if the two variables are equal # !# -1 if var^1 is less than var^2 # !# 1 if var^1 is greater than var^2 # !# # !##################################################################### int proc util^compare^var( var^1, var^2 ); string .ext var^1; string .ext var^2; begin if var^1 = var^2 for sort^compare^lgth^g then begin return 0; end else if var^1 < var^2 for sort^compare^lgth^g then begin return -1; end else begin return 1; end; end; ! of util^compare^vars ?section util^debit^crd^typ ?page " - util^debit^crd^typ" !##################################################################### !# # !# UTIL^DEBIT^CRD^TYP # !# # !# This procedure searchs the global table db^crd^tbl^g for a # !# matching debit card type. The table is built from entries # !# in the LCONF parameter BNET-DEBIT-CARD-TYPES. # !# # !# INPUT PARAMETERS : # !# crd^typ : pointer to the card type to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN : TRUE if the card type is found in the table. # !# # !##################################################################### int proc util^debit^crd^typ( crd^typ ); string .crd^typ; begin int index; string .tbl^ptr := byteaddr( @db^crd^tbl^g ); index := ut^binary^search( tbl^ptr, $len( pstm^def.rte.srv ), num^db^crd^tbl^g, 0, $len( pstm^def.rte.srv ), crd^typ ); ! ! ut^binary^search returns -1 for not found which is incremented ! by 1 in order to return false. ! return increment^d( index ); end; !proc util^debit^crd^typ #ADD 18368 UTIL^EXPAND^SEM int sub^lgth := 0; #ADD 18376 UTIL^EXPAND^SEM string .sub^ptr; #REPLACE 18575A01 UTIL^EXPAND^SEM while cnt < num^idx do #REPLACE 18584A01 UTIL^EXPAND^SEM @on^behalf^ptr '+' 4; #ADD 18783 UTIL^EXPAND^SEM begin ! ! PayPass Mapping Information ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! Move Subfield 1—Account Number Indicator ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! Move Subfield 2—Account Number ! if sub^ptr = "02" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! Move Subfield 2—Account Number ! if sub^ptr = "02" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! Move Subfield 3—Expiration Date ! if sub^ptr = "03" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; #DELETE 18784 /18792 UTIL^EXPAND^SEM #ADD 20320 UTIL^ILF^ADD int sem^adj^lgth; #ADD 20333 UTIL^ILF^ADD if ilf.rec^typ = header^l then begin mov^( ilf.sem, zeroes ); movl( ilf.orig^net^pro, zeroes, 4 ); end; #DELETE 20334 /20335 UTIL^ILF^ADD #ADD 20354 UTIL^ILF^ADD ( ilf.rec^typ = atm^l ) or #DELETE 20382 UTIL^ILF^ADD #ADD 20465 UTIL^ILF^ADD if sem.end^of^mand^ilf^flds = [ ( $offset( sem.end^of^opt^ilf^flds ) - $offset( sem.end^of^mand^ilf^flds ) ) * [" "]] then begin sem^adj^lgth := $offset( sem.end^of^mand^ilf^flds ); end else begin sem^adj^lgth := $offset( sem.end^of^opt^ilf^flds ); end; movl( ilf.extrn^msg.savearea, sem, wrds(sem^adj^lgth ) ); call integer^ascii^( ilf.extrn^msg^lgth, sem^adj^lgth ); #DELETE 20466 /20467 UTIL^ILF^ADD #REPLACE 20509 UTIL^ILF^ADD tkn^seg^id^g, tkn^log^atm^g, #ADD 20750 UTIL^ILF^COLLAPSE^BASE24 int .stm( stm^def ) := @sim; call hiswilf^compress( ilf, sim ); call util^updt^perfmon( pct.ln, sim, ilf.substate, base24^rel^g ); if stm.prod^id = pct.atm.prod^id for $len( stm.prod^id ) then begin return true; end; #DELETE 20755 /20759 UTIL^ILF^COLLAPSE^BASE24 #ADD 21076 UTIL^ILF^EXPAND^BASE24 int .stm( stm^def ) := @sim; #ADD 21081 UTIL^ILF^EXPAND^BASE24 call hiswilf^expand( ilf, sim ); #ADD 21083 UTIL^ILF^EXPAND^BASE24 if stm.prod^id = pct.atm.prod^id for $len( stm.prod^id ) then begin movl ( stm.shrg^grp, pct.atm.shrg, $occurs( stm.shrg^grp ) ); end; #DELETE 21087 /21090 UTIL^ILF^EXPAND^BASE24 #REPLACE 21091 UTIL^ILF^EXPAND^BASE24 move( pstm.tran.orig, pct.typ ); #ADD 21814 UTIL^ILF^UPDT int sem^lgth; #ADD 21845 UTIL^ILF^UPDT ( ilf.rec^typ = atm^l ) or #DELETE 21861 UTIL^ILF^UPDT #ADD 21955 UTIL^ILF^UPDT call ascii^integer^( ilf.extrn^msg^lgth, sem^lgth ); #DELETE 21956 /21957 UTIL^ILF^UPDT #ADD 21958 UTIL^ILF^UPDT end; ! of ilf.rec^typ = pos^l, atm^l, present^l, charge^l ! Update the SIM, SEM and token data in the ILF ! if $param( base24^msg ) then begin if not hiswilf^updt^tkn( ilf, ilf^lgth, base24^msg, sem, sem^lgth, max^sem^size^g, base24^rel^g ) then call abend^( 2020 ); end else begin if not hiswilf^updt^tkn( ilf, ilf^lgth, ! base24^msg !, sem, sem^lgth, max^sem^size^g, base24^rel^g ) then call abend^( 2030 ); end; end ! of $param( sem ) else ! SEM has not been passed in ! begin if $param( base24^msg ) then begin if not hiswilf^updt^tkn( ilf, ilf^lgth, base24^msg, ! base24^msg !, ! sem !, max^sem^size^g, base24^rel^g ) then call abend^( 2040 ); end; end; #DELETE 21959 /21969 UTIL^ILF^UPDT #REPLACE 22464 UTIL^INCREMENT^TRACE pct.trace^num := pct.trace^num + incr^trc^num^g; #DELETE 22465 UTIL^INCREMENT^TRACE #REPLACE 22467 /22467 OFFSET 0 UTIL^INCREMENT^TRACE if pct.trace^num > 999999d then begin set ( pct.trace^num, strt^trc^num^g ); end; call double^ascii( trace^num, lgth, pct.trace^num ); #DELETE 22468 UTIL^INCREMENT^TRACE #ADD 22990 UTIL^POS^SERVICE^ALLOWED ?section util^pos^standin^rcs ?page " - util^pos^standin^rcs" !##################################################################### !# # !# util^pos^standin^rcs # !# # !# This procedure searchs the global table standin^tbl^g for a # !# matching response code. The table is built from entries # !# in the LCONF parameter BNET-STAND-IN-RCS. # !# # !# INPUT PARAMETERS : # !# resp^cde - pointer to the response code to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - if the response code is found in the table. # !# false - if not found. # !# # !##################################################################### int proc util^pos^standin^rcs( resp^cde ); string .resp^cde; begin int index; string .tbl^ptr := byteaddr( @standin^tbl^g ); index := ut^binary^search( tbl^ptr, $len( sem^def.resp^cde ), num^standin^tbl^g, 0, $len( sem^def.resp^cde ), resp^cde ); ! ! ut^binary^search returns -1 for not found which is incremented ! by 1 in order to return false. ! return increment^d( index ); end; ! of proc util^pos^standin^rcs #ADD 24452 UTIL^STATION^INDEX ?section util^stf^get ?page "util^stf^get" !##################################################################### !# # !# util^stf^get # !# # !# This procedure retrieves required switch terminal file (stf) # !# record from extended memory. # !# # !# INPUT PARAMETERS: # !# stf - switch terminal file record that contains # !# formatted primary key # !# # !# OUTPUT PARAMETERS: # !# stf - retrieved switch terminal file (stf ) record # !# # !# Return true if found, otherwise return false # !# # !##################################################################### int proc util^stf^get( stf ); int .stf( stf^def ); begin int found := false; int high; int i; int indx; int lgth := $offset( stf.last^fm ); int low; int ofst := $len( stf.prikey ); int prefix^len; int seg^id; string asterisks[ 0:99 ] := [ 100 * [ "*" ] ]; string .ext stf^entry; string stf^prikey[ 0:$len( stf.prikey ) - 1 ]; if stf^ctr^g <= 0 then begin return false; end; seg^id := usesegment( stf^seg^id^g ); ! ! Search the extended memory table until we find a match ! high := stf^ctr^g; low := 0; indx := ( high + low ) / 2; while ( high <> low ) do begin @stf^entry := stf^tbl^g + $dbl( indx ) * $dbl( lgth ); stf^prikey ':=' stf^entry for $len( stf.prikey ); ! ! Check the entry for asterisks and a match ! i := -1; while ( ( i := i + 1 ) < $len( stf.prikey ) - 1 ) and ( stf^prikey[ i ] = "*" or stf^prikey[ i ] = stf.prikey.swi^fiid.byte[ i ] ) do; if stf^prikey[ i ] = "*" or stf^prikey[ i ] = stf.prikey.swi^fiid.byte[ i ] then begin found := true; ! ! Found a record that matches; keep searching ! ahead for an exact match ! stf.prikey.swi^fiid.byte[ ofst ] ':=' stf^entry[ ofst ] for ( lgth '-' ofst ); end; if indx = high then begin low := high end else if ( indx = low ) and ( indx = high - 1 ) then begin indx := high end else if stf.prikey.swi^fiid.byte[ i ] '<' stf^prikey[ i ] and stf^prikey[ i ] <> "*" then begin high := indx; indx := ( high + low ) / 2; end else begin low := indx; indx := ( high + low ) / 2; end; end; while not found and ( indx >= 0 ) do begin @stf^entry := stf^tbl^g + $dbl( indx ) * $dbl( lgth ); stf^prikey ':=' stf^entry for $len( stf.prikey ); if ( stf.prikey.term^fiid = stf^prikey[ $offset( stf.prikey.term^fiid ) ] for $len( stf.prikey.term^fiid ) or stf^prikey[ $offset( stf.prikey.term^fiid ) ] = asterisks for $len( stf.prikey.term^fiid ) ) and ( stf.prikey.merch^id = stf^prikey[ $offset( stf.prikey.merch^id ) ] for $len( stf.prikey.merch^id ) or stf^prikey[ $offset( stf.prikey.merch^id ) ] = asterisks for $len( stf.prikey.merch^id ) ) and ( stf.prikey.term^id = stf^prikey[ $offset( stf.prikey.term^id ) ] for $len( stf.prikey.term^id ) or stf^prikey[ $offset( stf.prikey.term^id ) ] = asterisks for $len( stf.prikey.term^id ) ) and ( stf.prikey.prod^id = stf^prikey[ $offset( stf.prikey.prod^id ) ] for $len( stf.prikey.prod^id ) or stf^prikey[ $offset( stf.prikey.prod^id ) ] = asterisks for $len( stf.prikey.prod^id ) ) then begin found := true; stf.prikey.swi^fiid.byte[ ofst ] ':=' stf^entry[ ofst ] for ( lgth '-' ofst ); end; indx := indx - 1; end; call usesegment( seg^id ); if not found then begin return false; end; return true; end; ! of proc util^stf^get #DELETE 24453 /24642 UTIL^STF^GET #ADD 24776 UTIL^SUSPEND^AND^SEND^SEM int .stm( stm^def ) := @susp.intrn^msg; #ADD 24815 UTIL^SUSPEND^AND^SEND^SEM if susp.rec^typ = atm^l then begin timer^typ := type^outbound^l; time := pct.atm.timers.outbound; stm.exit^tim := juliantimestamp(); call hiswutil^calc^intrn^msg^lgth( susp.intrn^msg, $len( stm ), susp.intrn^msg^lgth, atm^l, base24^rel^g ); end else #ADD 24821 UTIL^SUSPEND^AND^SEND^SEM call hiswutil^calc^intrn^msg^lgth( susp.intrn^msg, $len( pstm ), susp.intrn^msg^lgth, pos^l, base24^rel^g ); #ADD 24904 UTIL^SUSPEND^TRAN^DELETE int .stm( stm^def ) := @susp.intrn^msg; #REPLACE 24927 UTIL^SUSPEND^TRAN^DELETE if susp.rec^typ = atm^l and not msg^failure then #ADD 24929 UTIL^SUSPEND^TRAN^DELETE pct.atm.perform[ 0 ].in^rqst.count := pct.atm.perform[ 0 ].in^rqst.count + 1d; pct.atm.perform[ 0 ].in^rqst.ttl^tim := pct.atm.perform[ 0 ].in^rqst.ttl^tim + $max( 0f, current^tim - stm.entry^tim ); end else if susp.rec^typ = pos^l and not msg^failure then begin #REPLACE 24943 UTIL^SUSPEND^TRAN^DELETE if susp.rec^typ = atm^l and not msg^failure then #ADD 24945 UTIL^SUSPEND^TRAN^DELETE stm.re^entry^tim := juliantimestamp; pct.atm.perform[ 0 ].out^rqst.count := pct.atm.perform[ 0 ].out^rqst.count + 1d; pct.atm.perform[ 0 ].out^rqst.ttl^tim := pct.atm.perform[ 0 ].out^rqst.ttl^tim + $max( 0f, stm.re^entry^tim - stm.exit^tim ); end else if susp.rec^typ = pos^l and not msg^failure then begin #ENDSCN = SW0C092 !#CMP2.28 01/31/08 BNETM 6003 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETM BNETM 6003 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETM BNETM 6003 * ******************************************************************************** #SCN = SW0C094 , FILEID = BNETM #VOLUME = $ROOK.SW60BNET #FILE = BNETM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6003 #NEWVERSION = 6004 #ADD 0088C0A # 31JAN2008 huac/BensonE # Symptom: Banknet Global Authorization Enhancements # Problem: None. # Fix: Added SNF support. Added SWBNET_BNETD to the # dependency list for BNETS Compile. Added $(TARGET) # where appropriate. # Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, # BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, DDLFSTF, # FLGSDOC, OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, # SWBNETM, SWIFM and SWIMM. Add SW60ABNT Subvol. # Run Make. BA10SC04 subvolume. New files: ILB1107M, # ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. # Make the ILF conversion using ILB1107M. Run the ILF # conversion using ILB1107R. Make the STF conversion # using STF1107M. Run the STF conversion using STF1107R. # Replace BNETLOGM and BNETMNWD. # Reference: WO #070202-01. #REPLACE 0109 # BNETLIBS Compile - $(TARGET) = $(swbnet_bnetlibo) # 0109 #ADD 0133C02 $(basrc_attknid) \ #REPLACE 0166 = out $s.#bnetlib.t & # 0166 #REPLACE 0168 = $(TARGET); & # 0168 #REPLACE 0172 = del_peruse_job $(PERUSE) $(swbnet_purge_spooler_on) #bnetlib.t # 0172 #REPLACE 0174 = secure $(FUP) $(TARGET) $(swbnet_secure_opt) # 0174 #REPLACE 0178 # BNETS Compile - $(TARGET) = $(swbnet_bneto) # 0178 #ADD 0182 $(swsnf_snftal) \ #ADD 0201C02 $(basrc_attknid) \ #ADD 0218 $(swbnet_bnetd) \ #ADD 0224 $(swsnf_snfddls) \ #REPLACE 0233 = out $s.#bnet.t & # 0233 #REPLACE 0235 = $(TARGET); & # 0235 #REPLACE 0239 = del_peruse_job $(PERUSE) $(swbnet_purge_spooler_on) #bnet.t # 0239 #REPLACE 0241 = secure $(FUP) $(TARGET) $(swbnet_secure_opt) # 0241 #ENDSCN = SW0C094 !#CMP2.28 01/31/08 BNETS 6091 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6091 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6091 * ******************************************************************************** #SCN = SW0C096 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F000260D ! 31JAN2008 BensonE/huac ! Symptom: Banknet Global Authorization Enhancements ! Problem: None. ! Fix: Add ATM Processing Enhancements and support for the ! EPS-Net to Banknet Migration. ! Procs modified: bnet^sem^xresp^failed ! bnet^sem^xrqst^failed ! bnet^sem^xrvsl^failed ! cmd^^command^input ! cmd^actvt^sta ! cmd^cutover ! cmd^deactvt^sta ! cmd^logoff ! cmd^logon ! cmd^performance ! cmd^status ! cmd^status^g ! cmd^warmboot ! cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^^initialization ! init^assignproc ! init^bniif ! init^dat ! init^get^lconf^info ! init^ilf^review ! init^paramproc ! init^pct ! init_pct_icfe ! pstm^0200^request ! pstm^0210^response ! pstm^0220^force^post ! pstm^0420^reversal ! sem^acq^rvsl^resp ! sem^acq^rvsl^rqst ! sem^advice ! sem^echotest^response ! sem^logoff^response^group ! sem^logon^response^group ! sem^request ! sem^response ! sem^response^nack ! sem^reversal^advice ! tim^out^00^outbound ! tim^out^01^inbound ! tim^out^09^performance ! Procs added: cmd^actvt^sta^all ! cmd^deactvt^sta^all ! cmd^logoff^gsi^chk ! cmd^logoff^g^gsi ! cmd^logon^gsi^chk ! cmd^logon^g^gsi ! init^snf ! sem^acq^rvsl^rqst^pos ! sem^actvt^response ! sem^advice^pos ! sem^request^pos ! sem^response^pos ! sem^response^nack^pos ! sem^reversal^advice^pos ! Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, ! BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, DDLFSTF, ! FLGSDOC, OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, ! SWBNETM, SWIFM and SWIMM. Add SW60ABNT Subvol. ! Run Make. BA10SC04 subvolume. New files: ILB1107M, ! ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. ! Make the ILF conversion using ILB1107M. Run the ILF ! conversion using ILB1107R. Make the STF conversion ! using STF1107M. Run the STF conversion using STF1107R. ! Replace BNETLOGM and BNETMNWD. ! Reference: WO #070202-01. #ADD 00030d06 ?source =swbnet_bnetd ?list ?nolist, source =swsnf_snftal( ? snf ? ) ?list ! snf ! ) #DELETE 00030d07 #ADD 00392 BNETS^60^91 else if stm^^input^from^process ( msg, mtp ) then #ADD 00873]02 BNET^SEM^XRESP^FAILED int ncd_flg := false; int .stm( stm^def ) = base24^msg; #ADD 00881j01 BNET^SEM^XRESP^FAILED if ilf.rec^typ = atm^l then begin if ( ilf.intrn^msg^savearea^lgth = 0 ) or poss^dup^d( stm ) or atm^inquiry^d( stm ) or not atm^approved^d( stm ) then begin return; end; movd( stm.typ, reversal^d ); movd( stm.rte.originator, interface^orig^d ); movd( stm.rqst.rvsl^cde, rvsl^auth^not^avail^d ); if base24^rel^g >= 6 then begin if rcode := hiswsem_rvsl_txn_rte_atm( stm, pct.atm.acq^txn^prfl, msg^sym^source, pct.atm.dest, emt_g[ apcfemt_idx_l ].seg_id, icfe_name_g, auth_dest, log_auth_dest_resp, ncd_flg, fatal_flg, emt_g[ apcfemt_idx_l ].fname ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, sub^fail^pre^auth^l, !stm!, sem ); return; end ! of if rcode := hiswsem_rvsl_txn_rte_atm else begin call util^send^stm( stm, auth_dest ); if log_auth_dest_resp = "Y" then begin call util^send^stm( stm, pct.atm.dest ); end; ! of if log_auth_dest_resp = "Y" end; ! of not rcode end ! of base24^rel^g >= 6 else begin call util^send^stm( stm, ilf.orig^net^pro ); end; ! of base24^rel^g < 6 end ! atm^l ! else if ilf.rec^typ = pos^l then begin #REPLACE 00881j02/00881j08 BNET^SEM^XRESP^FAILED if not pos^approved^d( pstm) or ( ilf.intrn^msg^savearea^lgth = 0 ) or poss^dup^d( pstm ) or pos^crd^vrfy^d( pstm ) or pos^inquiry^d( pstm ) then begin return; end; #REPLACE 00881j0A/00881j0C BNET^SEM^XRESP^FAILED movd( pstm.typ, reversal^d ); movd( pstm.originator, interface^orig^d ); movd( pstm.rvsl^cde, rvsl^auth^not^avail^d ); #REPLACE 00881j0E/00881j0G BNET^SEM^XRESP^FAILED if base24^rel^g >= 6 then begin if rcode := hiswsem_rvsl_txn_rte_pos( pstm, #REPLACE 00881j0S/00881j14 BNET^SEM^XRESP^FAILED begin call util^ilf^updt( fnum, ilf, ilf^lgth, sub^fail^pre^auth^l, !pstm!, sem ); return; end ! of if rcode := hiswsem_rvsl_txn_rte_pos ! else begin call util^send^pstm( pstm, auth_dest ); if log_auth_dest_resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; ! of if log_auth_dest_resp = "Y" ! #REPLACE 00881j16 BNET^SEM^XRESP^FAILED end; ! of not rcode ! #REPLACE 00881j18/00881j1C BNET^SEM^XRESP^FAILED end ! of base24^rel^g >= 6 ! else begin call util^send^pstm( pstm, ilf.orig^net^pro ); end; ! of base24^rel^g < 6 ! #ADD 00882j02 BNET^SEM^XRESP^FAILED end; ! of pos^l ! #ADD 00958 BNET^SEM^XRQST^FAILED if susp.rec^typ = atm^l then begin call stm^0200^route( susp, resp^unable^to^process^atm^l, substate ); end else if susp.rec^typ = pos^l then #REPLACE 00958j00/00958j02 BNET^SEM^XRQST^FAILED begin call pstm^0200^route( susp, resp^unable^to^process^pos^l, substate ); end; #ADD 00998}01 BNET^SEM^XRVSL^FAILED int .stm( stm^def ) := @susp.intrn^msg; #ADD 01000}0K BNET^SEM^XRVSL^FAILED if susp.rec^typ = atm^l then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), atm^l, msg^sym^source, stm, susp.extrn^msg, $len(sem^def), substate ); end ! of atm^l else if susp.rec^typ = pos^l then begin #REPLACE 01000}0L/01000}0T BNET^SEM^XRVSL^FAILED call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, susp.extrn^msg, $len(sem^def), substate ); end; !of pos^l ! #ADD 01069 CMD^^COMMAND^INPUT call cmd^logon^gsi^chk( msg, mtp, nmm^logon^group^l ) #DELETE 01070 CMD^^COMMAND^INPUT #ADD 01072 CMD^^COMMAND^INPUT call cmd^logon^gsi^chk( msg, mtp, nmm^logon^saf^l ) #DELETE 01073 CMD^^COMMAND^INPUT #ADD 01081 CMD^^COMMAND^INPUT call cmd^logoff^gsi^chk( msg, mtp ) #DELETE 01082 CMD^^COMMAND^INPUT #ADD 01144 CMD^^COMMAND^INPUT ?section cmd^actvt^sta ?page "cmd^actvt^sta" !##################################################################### !# # !# cmd^actvt^sta # !# # !# This procedure will send a Host Session Activation Network # !# Management Request/0800 message to the network. If no station # !# name is passed, activate messages will be sent to all stations. # !# # !# INPUT PARAMETERS: # !# msg - Message pointer. # !# mtp - Message text pointer. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - Message format/collapse successful # !# false - Message format/collapse error # !# # !##################################################################### int proc cmd^actvt^sta( msg, mtp ) variable; int .msg; string .mtp; begin wlform( collapse^err, "FAILURE TO SEND ACTIVATE, MESSAGE " ',' "COLLAPSE ERROR " ) wlform( frmt^err, "FAILURE TO SEND ACTIVATE, FORMATTING ERROR " ) wlform( invld^sta^nam, "INVALID STATION NAME \S SPECIFIED " ',' "IN ACTIVATE STATION COMMAND " ) wlform( no^stations, "FAILURE TO SEND ACTIVATE, NO STATIONS " ',' "DEFINED " ) struct .csem( nmm^def ); struct .sem( nmm^def ); int extlgth; int i; int nmm^info^cde; int num^of^sta; int return^cde := true; int sta^idx := 0; int sta^nam^lgth := 0; int .sta^nam^i; int strt^pos := 10; string .sta^nam[ 0:15 ] := [ 16 * [" "] ]; ?page "subproc sub^frmt^send^actvt" !################################################################# !# # !# sub^frmt^send^actvt # !# # !# This sub procedure formats and sends a network management # !# message to activate the station. # !# # !# INPUT PARAMETERS: # !# sta^x - station index in PCT table # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - 0800 activate message was sent # !# false - message was not sent # !# # !################################################################# int subproc sub^frmt^send^actvt( sta^idx ); int sta^idx; begin set( nmm^info^cde, nmm^actvt^l ); if not sem^frmt^nmm^request( sem, nmm^info^cde, ! group !, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then begin call log^message^( 2951, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^warn^l ); return false; end; if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 2952, ! routing^code !, @collapse^err, net.myname, evt^msg^severity^warn^l ); return false; end; call util^send^sem( csem, extlgth, pct.station[ sta^idx ].nam ); return true; end; ! of subproc sub^frmt^send^actvt ?page "cmd^actvt^sta" !################################################################# !# # !# This is the main body of PROC cmd^actvt^sta # !# # !################################################################# if not $param( msg ) and not $param( mtp ) then begin num^of^sta := pct.status.num^of^sta - 1; end else begin sta^nam^lgth := ( msg^length - strt^pos ); if sta^nam^lgth <= 0 then begin num^of^sta := pct.status.num^of^sta - 1; end else begin sta^nam ':=' mtp[ strt^pos ] for sta^nam^lgth; @sta^nam^i := wordaddr( @sta^nam ); if not util^station^index( sta^nam^i, sta^idx ) then begin call log^message^( 2950, ! routing^code !, @invld^sta^nam, net.myname, evt^msg^severity^warn^l, @sta^nam ); return false; end; num^of^sta := sta^idx; end; end; if num^of^sta < 0 then begin call log^message^( 4101, ! routing^code !, @no^stations, net.myname, evt^msg^severity^warn^l ); return false; end; while ( sta^idx <= num^of^sta ) do begin if not sub^frmt^send^actvt( sta^idx ) then begin return^cde := false; end; increment^d( sta^idx ); end; !of while return return^cde; end; ! of proc cmd^actvt^sta #DELETE D0114400/D011441w CMD^ACTVT^STA #ADD 01269j01 CMD^CUTOVER string .atm[ 0:2 ] := ["ATM"]; #ADD 01269j02 CMD^CUTOVER if cmd.data.byte[6] = "ATM" then begin if trace^g.cmd^d then begin call log^message^( 4103, !routing code!, @trace, net.myname, evt^msg^severity^info^l, @atm, @pct.setl.b24^atm^dat, @cmd.cutover^dat ); end; ! of if trace^g.cmd^d if compare^ascii^yymmdd( pct.setl.b24^atm^dat, 7, cmd.cutover^dat ) then begin call julian^to^yymmdd( yymmdd^to^julian( cmd.cutover^dat ) + 1d, pct.setl.b24^atm^dat ); end; ! of if compare^ascii^yymmdd end !of ATM ! else begin #REPLACE 01269j03/01269j07 CMD^CUTOVER if trace^g.cmd^d then begin call log^message^( 0430,, @trace, net.myname, 0, @pos, @pct.setl.b24^pos^dat, @cmd.cutover^dat ); end; ! of if trace^g.cmd^d ! #REPLACE 01269j09/01269j0F CMD^CUTOVER if compare^ascii^yymmdd( pct.setl.b24^pos^dat, 7, cmd.cutover^dat ) then begin call julian^to^yymmdd( yymmdd^to^julian( cmd.cutover^dat ) + 1d, pct.setl.b24^pos^dat ); end; ! of if compare^ascii^yymmdd ! end; !of POS ! #ADD 01295 CMD^CUTOVER ?section cmd^deactvt^sta ?page "cmd^deactvt^sta" !#####################################################################! !# #! !# cmd^deactvt^sta #! !# #! !# This procedure will send a Host Session Deactivation Network #! !# Management Request/0800 message to the network. #! !# #! !# INPUT PARAMETERS: #! !# msg - Message pointer. #! !# mtp - Message text pointer. #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# true - Message format/collapse successful #! !# false - Message format/collapse error #! !# #! !#####################################################################! int proc cmd^deactvt^sta( msg, mtp ) variable; int .msg; string .mtp; begin wlform( collapse^err, "FAILURE TO SEND DEACTIVATE, MESSAGE " ',' "COLLAPSE ERROR " ) wlform( frmt^err, "FAILURE TO SEND DEACTIVATE, " ',' "FORMATTING ERROR " ) wlform( invld^sta^nam, "INVALID STATION NAME \S SPECIFIED " ',' "IN DEACTIVATE STATION COMMAND " ) wlform( no^stations, "FAILURE TO SEND DEACTIVATE, NO STATIONS " ',' "DEFINED " ) struct .csem( nmm^def ); struct .sem( nmm^def ); int extlgth; int i; int nmm^info^cde; int num^of^sta; int return^cde := true; int sta^idx := -1; int sta^nam^lgth := 0; int .sta^nam^i; int strt^pos := 12; string .sta^nam[ 0:15 ] := [ 16 * [" "] ]; ?page "subproc sub^frmt^send^deactvt" !################################################################# !# # !# sub^frmt^send^deactvt # !# # !# This sub procedure formats and sends a network management # !# message to deactivate the station. # !# # !# INPUT PARAMETERS: # !# sta^x - station index in PCT table # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - 0800 deactivate message was sent # !# False - message was not sent # !# # !################################################################# int subproc sub^frmt^send^deactvt( sta^idx ); int sta^idx; begin set( nmm^info^cde, nmm^deactvt^l ); if not sem^frmt^nmm^request( sem, nmm^info^cde, ! group !, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then begin call log^message^( 2981, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^warn^l ); return false; end; if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 2982, ! routing^code !, @collapse^err, net.myname, evt^msg^severity^warn^l ); return false; end; call util^send^sem( csem, extlgth, pct.station[ sta^idx ].nam ); return true; end; ! of subproc sub^frmt^send^deactvt ?page "cmd^actvt^sta" !################################################################# !# # !# This is the main body of PROC cmd^deactvt^sta # !# # !################################################################# if not $param( msg ) and not $param( mtp ) then begin num^of^sta := pct.status.num^of^sta - 1; end else begin sta^nam^lgth := ( msg^length - strt^pos ); if sta^nam^lgth <= 0 then begin num^of^sta := pct.status.num^of^sta - 1; end else begin sta^nam ':=' mtp[ strt^pos ] for sta^nam^lgth; @sta^nam^i := wordaddr( @sta^nam ); if not util^station^index( sta^nam^i, sta^idx ) then begin call log^message^( 2980, ! routing^code !, @invld^sta^nam, net.myname, evt^msg^severity^warn^l, @sta^nam ); return false; end; num^of^sta := sta^idx; end; end; if num^of^sta < 0 then begin call log^message^( 4102, ! routing^code !, @no^stations, net.myname, evt^msg^severity^warn^l ); return false; end; while ( sta^idx <= num^of^sta ) do begin if not sub^frmt^send^deactvt( sta^idx ) then begin return^cde := false; end; increment^d( sta^idx ); end; !of while return return^cde; end; ! of proc cmd^deactvt^sta #DELETE D0129500/D012951x CMD^DEACTVT^STA #ADD 01420 CMD^LOGOFF if gsi^used^g then begin msg^length := 6; call cmd^logoff^g^gsi( msg, mtp ); end else #ADD 01513 CMD^LOGOFF^G ?section cmd^logoff^g^gsi ?page "cmd^logoff^g^gsi" !##################################################################### !# # !# cmd^logoff^g^gsi # !# # !# This procedure processes the GSI logoff command. # !# # !# SYNTAX: LOGOFFG # !# # !# INPUT PARAMETERS : # !# msg : message pointer # !# mtp : message text pointer # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^logoff^g^gsi( msg, mtp ); int .msg; string .mtp; begin wlform( error1, "No GSI \\\\\\ Logoff sent. GSI must contain # digits." ) wlform( error2, "FAILURE to SEND GSI LOGOFF, INVALID SYNTAX" ) wlform( trace1, "T - GSI LOGOFF Command Received" ) wlform( nosent, "No GSI \\\\\\ Logoff sent. No BNIIF MCI ID match found." ) int .ext bniif^tbl( fiid^mci^def ); int avs; int avs^typ := -1; int gsi^lgth := 0; int i; int match^found := false; int max^gsi^lgth := 5; int seg^id; int service; int service^typ := -1; int traffic; int traffic^typ := -1; string .gsi[ 0:4 ] := [ 5 * [" "] ]; string .prefix[ 0:10 ] := [ 11 * [" "] ]; struct .userbuf( timer^userbuf^def ); if trace^g.cmd^d then call log^message^( 4108, ! routing^code !, @trace1, net.myname, evt^msg^severity^info^l ); if msg^length > 7 then begin set( gsi^lgth, max^gsi^lgth ); if not util^parse^command( msg, mtp, service^typ, traffic^typ, avs^typ, gsi^lgth, gsi ) then begin call log^message^( 4109,!routing code!, @error2, net.myname, evt^msg^severity^err^l ); return; end; if gsi^lgth > 0 and gsi^lgth <> max^gsi^lgth then begin call log^message^( 4110, !routing code!, @error1, net.myname, evt^msg^severity^err^l, @gsi, max^gsi^lgth ); return; end; ! bad gsi length specified in command end; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; i := -1; while $dbl( i := i + 1 ) < pct.bniif^tbl.ctr and not match^found do begin if ( gsi^lgth > 0 and bniif^tbl.mci^id = gsi for gsi^lgth ) or ( bniif^tbl.fiid = pct.swi^id for $len ( bniif^tbl.fiid ) ) then begin match^found := true; init ( userbuf, " ", wlen( timer^userbuf^def ) ); movl ( userbuf.nmm.mci^id.byte, bniif^tbl.mci^id[ 0 ], $len( userbuf.nmm.mci^id ) ); call timer^delete( tcb^g, type^nmm^l, nmm^logon^group^l, userbuf, woffset( userbuf.nmm.prefix ) ); call timer^delete( tcb^g, type^xnmm^l, ! NMI Code !, userbuf, woffset( userbuf.nmm.prefix ) ); if service^typ < 0 then begin set( service, bniif^tbl.service ); end else begin set( service, service^typ ); end; if traffic^typ < 0 then begin set( traffic, bniif^tbl.traffic ); end else begin set( traffic, traffic^typ ); end; if avs^typ < 0 then begin set( avs, bniif^tbl.avs^typ ); end else begin set( avs, avs^typ ); end; call init^logoff( nmm^logoff^group^l, userbuf.nmm.mci^id, prefix, service, traffic, avs ); end; ! of match on bniif @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; ! of while call usesegment( seg^id ); if not match^found and gsi^lgth > 0 then begin call log^message^( 4111, !routing code!, @nosent, net.myname, evt^msg^severity^err^l, @gsi ); end; end; ! of cmd^logoff^g^gsi ?section cmd^logoff^gsi^chk ?page "cmd^logoff^gsi^chk" !##################################################################### !# # !# cmd^logoff^gsi^chk # !# # !# This procedure will determine whether logoff by GSI is required # !# # !# INPUT PARAMETERS : # !# msg : message pointer # !# mtp : message text pointer # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^logoff^gsi^chk( msg, mtp ); int .msg; string .mtp; begin if gsi^used^g then begin call cmd^logoff^g^gsi( msg, mtp ); end else begin call cmd^logoff^g( msg, mtp ); end; end; ! of cmd^logoff^gsi^chk #ADD 01638 CMD^LOGON if gsi^used^g then begin msg^length := 5; call cmd^logon^g^gsi( msg, mtp, pct.options.logon^typ ); end else #ADD 01755 CMD^LOGON^G ?section cmd^logon^g^gsi ?page "cmd^logon^g^gsi" !##################################################################### !# # !# cmd^logon^g^gsi # !# # !# This procedure processes the GSI logon command. # !# # !# SYNTAX: LOGONG < CREDIT/DEBIT> # !# NOTE: AVS TYP must come before GROUP in the command # !# # !# INPUT PARAMETERS : # !# msg : message pointer # !# mtp : message text pointer # !# nmm^info^cde : network management information code # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^logon^g^gsi( msg, mtp, nmm^info^cde ) variable; int .msg; string .mtp; int nmm^info^cde; begin wlform( error1, "No GSI \\\\\\ Logon sent. GSI must contain # digits." ) wlform( error2, "FAILURE to SEND GSI LOGON, INVALID SYNTAX" ) wlform( error3, "FAILURE to SEND GSI LOGON, MISSING NMI CODE" ) wlform( trace1, "T - GSI LOGON Command Received" ) wlform( trace2, "T - SAF LOGON Command Received" ) wlform( nosent, "No GSI \\\\\\ Logon sent. No BNIIF MCI ID match found." ) int .ext bniif^tbl( fiid^mci^def ); int avs; int avs^typ := -1; int gsi^lgth := 0; int i; int match^found := false; int max^gsi^lgth := 5; int seg^id; int service; int service^typ := -1; int traffic; int traffic^typ := -1; string .gsi[ 0:4 ] := [ 5 * [" "] ]; string .prefix[ 0:10 ] := [ 11 * [" "] ]; struct .userbuf( timer^userbuf^def ); if not $param( nmm^info^cde ) then begin call log^message^( 4112, ! routing code !, @error3, net.myname, evt^msg^severity^err^l ); return; end; if trace^g.cmd^d then begin if nmm^info^cde = nmm^logon^group^l then begin call log^message^( 4113, ! routing code !, @trace1, net.myname, evt^msg^severity^info^l ); end else begin call log^message^( 4114, ! routing code !, @trace2, net.myname, evt^msg^severity^info^l ); end; end; if $param( msg ) and $param( mtp ) then begin if msg^length > 6 then begin set( gsi^lgth, max^gsi^lgth ); if not util^parse^command( msg, mtp, service^typ, traffic^typ, avs^typ, gsi^lgth, gsi ) then begin call log^message^( 4115, ! routing code !, @error2, net.myname, evt^msg^severity^err^l ); return; end; if gsi^lgth > 0 and gsi^lgth <> max^gsi^lgth then begin call log^message^( 4116, !routing code!, @error1, net.myname, evt^msg^severity^err^l, @gsi, max^gsi^lgth ); return; end; ! bad gsi length specified in command end; end; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; i := -1; while $dbl( i := i + 1 ) < pct.bniif^tbl.ctr and not match^found do begin if ( gsi^lgth > 0 and bniif^tbl.mci^id = gsi for gsi^lgth ) or ( bniif^tbl.fiid = pct.swi^id for $len ( bniif^tbl.fiid ) ) then begin match^found := true; init ( userbuf, " ", wlen( timer^userbuf^def ) ); movl ( userbuf.nmm.mci^id.byte, bniif^tbl.mci^id[ 0 ], $len( userbuf.nmm.mci^id ) ); if nmm^info^cde = nmm^logon^saf^l then begin call timer^delete( tcb^g, type^xnmm^l, nmm^logon^saf^l, userbuf, woffset( userbuf.nmm.prefix ) ); end else begin call timer^delete( tcb^g, type^nmm^l, nmm^logoff^group^l, userbuf, woffset( userbuf.nmm.prefix ) ); call timer^delete( tcb^g, type^xnmm^l, !NMI Code !, userbuf, woffset( userbuf.nmm.prefix ) ); end; if service^typ < 0 then begin set( service, bniif^tbl.service ); end else begin set( service, service^typ ); end; if traffic^typ < 0 then begin set( traffic, bniif^tbl.traffic ); end else begin set( traffic, traffic^typ ); end; if avs^typ < 0 then begin set( avs, bniif^tbl.avs^typ ); end else begin set( avs, avs^typ ); end; call init^logon( nmm^info^cde, userbuf.nmm.mci^id, prefix, service, traffic, avs ); end; ! of match on bniif @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; ! of while call usesegment( seg^id ); if not match^found and gsi^lgth > 0 then begin call log^message^( 4117, !routing code!, @nosent, net.myname, evt^msg^severity^err^l, @gsi ); end; end; ! of cmd^logon^g^gsi ?section cmd^logon^gsi^chk ?page "cmd^logon^gsi^chk" !##################################################################### !# # !# cmd^logon^gsi^chk # !# # !# This procedure will determine whether logon by GSI is required # !# # !# INPUT PARAMETERS : # !# msg : message pointer # !# mtp : message text pointer # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^logon^gsi^chk( msg, mtp, nmm^info^cde ) variable; int .msg; string .mtp; int nmm^info^cde; begin if gsi^used^g then begin call cmd^logon^g^gsi( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ), nmm^info^cde ); end else begin call cmd^logon^g( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ), nmm^info^cde ); end; end; ! of cmd^logon^gsi^chk #REPLACE 02054 /02054 OFFSET 0 CMD^PERFORMANCE end; !of POS ! if pct.atm.present then begin movd ( txt, "ATM" ); call log^message^( 4118, !routing code!, @hdr, net.myname, evt^msg^severity^info^l, @txt ); if pct.rqst.out^max > 0 then begin call log^message^( 4119, !routing code!, @out, net.myname, evt^msg^severity^info^l, $int( pct.timers.perf / 6000d ), $int( pct.atm.timers.outbound/100d ) ); call log^message^( 4120,!routing code!, @hdr1, net.myname, evt^msg^severity^info^l ); for i := 0 to $occurs( pct.atm.perform ) - 1 do begin if pct.atm.perform[ i ].out^rqst.count > 0d or pct.atm.perform[ i ].out^rqst.timeouts > 0d then begin ttl^rqsts := pct.atm.perform[ i ].out^rqst.count + pct.atm.perform[ i ].out^rqst.timeouts; percent := $int( pct.atm.perform[ i ].out^rqst.timeouts * 100d / ttl^rqsts ); ttl^tim := $dbl( pct.atm.perform[ i ].out^rqst.ttl^tim / 10000f ); average := ttl^tim / $max( 1d, pct.atm.perform[ i ].out^rqst.count ); call log^message^( 4121, !routing code!, @perf, net.myname, evt^msg^severity^info^l, i, @ttl^rqsts, @pct.atm.perform[i].out^rqst.timeouts, percent, average '/' 100, average '\' 100 ); end; end; end; if pct.rqst.in^max > 0 then begin call log^message^( 4122, !routing code!, @in, net.myname, evt^msg^severity^info^l, $int ( pct.timers.perf /6000d ), $int ( pct.atm.timers.inbound / 100d ) ); call log^message^( 4123,!routing!, @hdr1, net.myname, evt^msg^severity^info^l ); for i := 0 to $occurs( pct.atm.perform ) - 1 do begin if pct.atm.perform[ i ].in^rqst.count > 0d or pct.atm.perform[ i ].in^rqst.timeouts > 0d then begin ttl^rqsts := pct.atm.perform[ i ].in^rqst.count + pct.atm.perform[ i ].in^rqst.timeouts; percent := $int( pct.atm.perform[ i ].in^rqst.timeouts * 100d / ttl^rqsts ); ttl^tim := $dbl( pct.atm.perform[ i ].in^rqst.ttl^tim / 10000f ); average := ttl^tim / $max( 1d, pct.atm.perform[ i ].in^rqst.count ); call log^message^( 4124,!routing code!, @perf, net.myname, evt^msg^severity^info^l, i, @ttl^rqsts, @pct.atm.perform[i].in^rqst.timeouts, percent, average '/' 100, average '\' 100 ); end; end; end; end; !of ATM #ADD 02153j01 CMD^STATUS wlform( atm^dat, "BASE24-atm Date: \\\\\\" ) #ADD 02174j01 CMD^STATUS if pct.atm.present then call log^message^( 4125,!routing code!, @atm^dat, net.myname, evt^msg^severity^info^l, @pct.setl.b24^atm^dat ); #ADD 02312;03 CMD^STATUS^G if gsi^used^g then begin if bniif^tbl.fiid = pct.swi^id for $len(bniif^tbl.fiid ) then begin call log^message^( 4126, !routing code!, @group, net.myname, evt^msg^severity^info^l, @fiid, @mci^id, @logonacq, @logoniss, @logoncr, @logondb ); end; end else begin call log^message^( 0880, !routing code!, @group, net.myname, evt^msg^severity^info^l, @fiid, @mci^id, @logonacq, @logoniss, @logoncr, @logondb ); end; #DELETE 02312;04/02312;06 CMD^STATUS^G #ADD 02485j02 CMD^WARMBOOT wlform( noatm, "No ATM record found in the TKN file - all " ',' "STM tokens will be logged to the ILF" ) #ADD 02516R0D CMD^WARMBOOT call util^ilf^updt^header( pct.ilf[ cur^l ].fcb.filenum, pct.trace^num ); #ADD 02516R12 CMD^WARMBOOT not init^snf or #REPLACE 02516j09/02516j09 OFFSET 0 CMD^WARMBOOT tkn^seg^id^g, @tkn^log^atm^g, #ADD 02516j0G CMD^WARMBOOT if pct.atm.present and @tkn^log^atm^g <= 0d then begin call log^message^( 4127, !routing code!, @noatm, net.myname, evt^msg^severity^warn^l ); end; #ADD 02516j4P CMD^WARMBOOT movl( pct.atm.perform, pcpl.atm.perform, sizeof( pct.atm.perform ) ); #ADD 02592 CMD^WARMBOOT begin if enhnc^session^mgmt^g then begin call cmd^actvt^sta; end else #ADD 02596 CMD^WARMBOOT end; #ADD 02599R1S CMD^WARMBOOT^STORE^GLOBALS store^file^d( snf^name^g ); #ADD 02599R20 CMD^WARMBOOT^STORE^GLOBALS store^d( snf^num^g ); #ADD D0259902 CMD^WARMBOOT^STORE^GLOBALS store^d( atm^cutover^g ); store^d( enhnc^key^mgmt^g ); store^d( fallback^alwd^g ); store^d( gsi^used^g ); store^d( incr^trc^num^g ); store^d( num^db^crd^tbl^g ); store^d( num^standin^tbl^g ); store^d( partial^apprv^alwd^g ); store^d( strt^trc^num^g ); store^addr^d( tkn^log^atm^g ); store^array^d( db^crd^tbl^g ); store^array^d( ncd^dflt^hopr^content^g ); store^array^d( standin^tbl^g ); #ADD 02599T0P CMD^WARMBOOT^STORE^GLOBALS snf^num^g := -2; #ADD 02599T0Z CMD^WARMBOOT^STORE^GLOBALS atm^cutover^g := -1; #ADD 02599]0I CMD^WARMBOOT^STORE^GLOBALS db^crd^tbl^g ':=' [ "MD", 68 * [ " " ] ]; enhnc^key^mgmt^g := false; fallback^alwd^g := true; gsi^used^g := false; incr^trc^num^g := -1d; partial^apprv^alwd^g := true; ncd^dflt^hopr^content^g ':=' ["10"]; num^db^crd^tbl^g := 1; num^standin^tbl^g := 0; standin^tbl^g ':=' [ 70 * [ " " ] ]; strt^trc^num^g := -1d; #ADD 02599T4T CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^file^d( snf^name^g ); #ADD 02599T51 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( snf^num^g ); #ADD D0259908 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( atm^cutover^g ); retrieve^d( enhnc^key^mgmt^g ); retrieve^d( fallback^alwd^g ); retrieve^d( gsi^used^g ); retrieve^d( incr^trc^num^g ); retrieve^d( num^db^crd^tbl^g ); retrieve^d( num^standin^tbl^g ); retrieve^d( partial^apprv^alwd^g ); retrieve^d( strt^trc^num^g ); retrieve^addr^d( tkn^log^atm^g ); retrieve^file^d( db^crd^tbl^g ); retrieve^file^d( ncd^dflt^hopr^content^g ); retrieve^file^d( standin^tbl^g ); #ADD 02617j02 INIT^^INITIALIZATION wlform( noatm, "No ATM record found in the TKN file - all " ',' "STM tokens will be logged to the ILF" ) #ADD 02637R02 INIT^^INITIALIZATION not init^snf or #REPLACE 02651j0Q INIT^^INITIALIZATION @tkn^log^atm^g, #ADD 02651j0W INIT^^INITIALIZATION if pct.atm.present and @tkn^log^atm^g <= 0d then begin call log^message^( 4128, !routing code! , @noatm, net.myname, evt^msg^severity^warn^l ); end; ! of if pct.atm.present ! #ADD 02668 INIT^^INITIALIZATION begin if enhnc^session^mgmt^g then begin call cmd^actvt^sta; end else #ADD 02672 INIT^^INITIALIZATION end; #ADD 02709n0J INIT^ASSIGNPROC !16! "A", 0, "SNF ", #ADD 02823j0J INIT^ASSIGNPROC !16! begin ! ! SNF ! call fnameexpand( lconf.assign^msg.file^name, snf^name^g, default^vs ); end; #ADD 02865R02 INIT^BNIIF gsi^used^g := false; #ADD 02953 INIT^BNIIF if pct.swi^id <> blanks for $len( pct.swi^id ) and bniif.fiid = pct.swi^id for $len( bniif.fiid ) then begin gsi^used^g := true; end; #ADD 03103 INIT^DAT if pct.atm.present then begin pct.setl.b24^atm^tim := atm^cutover^g; call hiswutil^posting^date( pct.setl.b24^atm^dat, pct.setl.b24^atm^tim ); end ; #ADD 03316 PARAMPROC wlform( badincr, "Bad Trace increment: $; resetting to one" ) wlform( badstrt, "Bad Start trace number: $; resetting to one" ) #ADD 03340R06 PARAMPROC if strt^trc^num^g = -1d or strt^trc^num^g > incr^trc^num^g then begin if strt^trc^num^g <> -1d then begin call log^message^( 4129, !routing code!, @badstrt, net.myname, evt^msg^severity^info^l, @strt^trc^num^g ); end; strt^trc^num^g := 1d; end; if incr^trc^num^g = -1d or strt^trc^num^g > incr^trc^num^g then begin if incr^trc^num^g <> -1d then begin call log^message^( 4130, !routing code!, @badincr, net.myname, evt^msg^severity^info^l, @incr^trc^num^g ); end; incr^trc^num^g := 1d; end; #ADD 03370Q02 INIT^ILF set ( pct.trace^num, strt^trc^num^g ); #ADD 03508 INIT^ILF^REVIEW ?page "subproc sub^align^trace^num" !################################################################# !# # !# sub^align^trace^num # !# # !# This sub procedure makes sure that trace numbers are # !# a function of s + r * i where: # !# s = start trace number # !# i = trace increment # !# r = increment factor # !# # !# INPUT PARAMETERS: # !# trace^num - the last trace number # !# # !# OUTPUT PARAMETERS: # !# trace^num - the next aligned trace number # !# # !# RETURN: # !# # !################################################################# subproc sub^align^trace^num( trace^num ); int(32) .trace^num; begin int(32) r; if strt^trc^num^g > trace^num then r := 0d else r := ( ( trace^num - strt^trc^num^g )/ incr^trc^num^g ) + 1d; trace^num := strt^trc^num^g + ( r * incr^trc^num^g ); if trace^num > 999999d then begin set ( trace^num, strt^trc^num^g ); end; end; ! of subproc sub^align^trace^num ?page "init^ilf^review" !################################################################# !# # !# This is the main body of PROC init^ilf^review # !# # !################################################################# #ADD 03544u0F INIT^ILF^REVIEW temp^trace := temp^trace + ( incr^trc^num^g * $dbl( pct.max^tran^updt ) ); #DELETE 03544u0G INIT^ILF^REVIEW #ADD 03549 INIT^ILF^REVIEW call sub^align^trace^num ( trace^num ); #ADD 03570j00 INIT^ILF^REVIEW if ( ( ilf.rec^typ = atm^l ) and ( ilf.atm.crd^ln = pct.ln for $len(pct.ln) ) ) or #REPLACE 03570j01 INIT^ILF^REVIEW ( ( ilf.rec^typ = pos^l ) and #ADD 03600 INIT^ILF^REVIEW call sub^align^trace^num ( trace^num ); #ADD 03842i0N SUB^INIT^LOGON if gsi^used^g then begin call util^set^group^logon( service, traffic ); end else begin call util^set^logon^status( nmm^info^cde, group, prefix, service, traffic ); end; #DELETE 03842i0O/03842i0P SUB^INIT^LOGON #ADD E0394506 INIT^PARAMPROC "P", "ATM-LN-CUTOVER ", "P", "BNET-STAND-IN-RCS ", "P", "BNET-DEBIT-CARD-TYPES ", "P", "ENHNC-KEY-MGMT ", "P", "FALLBACK-ALWD ", "P", "FIRST-BNET-TRACE-NUM ", "P", "INCR-BNET-TRACE-NUM-BY ", "P", "NCD-DFLT-HOPR-CONTENTS ", "P", "PARTIAL-APPROVAL-ALWD ", #ADD E039960V INIT^PARAMPROC ! ! ATM-LN-CUTOVER ! if not ferror then begin @ptr := numin( lconf.param^msg.ptxt, hour, 10, status ); @ptr := numin( ptr[ 1 ], minute, 10, status ); atm^cutover^g := ( hour * 100 ) + minute; end; ! of if not ferror ! ! BNET-STAND-IN-RCS ! if not ferror then begin call util^build^standin^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! ! BNET-DEBIT-CARD-TYPES ! if not ferror then begin call util^build^db^crd^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! ! ENHNC-KEY-MGMT ! if not ferror then begin enhnc^key^mgmt^g := false; if lconf.param^msg.ptxt = "Y" then begin enhnc^key^mgmt^g := true; end; ! of if lconf.param^msg.ptxt = "Y" end; ! ! FALLBACK-ALWD ! if not ferror then begin fallback^alwd^g := true; if lconf.param^msg.ptxt = "N" then begin fallback^alwd^g := false; end; end; ! ! FIRST-BNET-TRACE-NUM ! if not ferror then begin if not ascii^double( lconf.param^msg.ptxt, lconf.param^msg.plgth, strt^trc^num^g ) or lconf.prikey.pro^name <> net.myname for $len( lconf.prikey.pro^name ) then begin strt^trc^num^g := -1d; end; end; ! ! INCR-BNET-TRACE-NUM-BY ! if not ferror then begin if not ascii^double( lconf.param^msg.ptxt, lconf.param^msg.plgth, incr^trc^num^g ) then begin incr^trc^num^g := -1d; end; end; ! ! NCD-DFLT-HOPR-CONTENTS ! if not ferror then begin if not all^numeric( lconf.param^msg.ptxt, lconf.param^msg.plgth ) then begin movd( ncd^dflt^hopr^content^g, "10" ); end ! of not numeric, use default else begin if lconf.param^msg.plgth = 1 then begin lconf.param^msg.ptxt.byte[1] ':=' lconf.param^msg.ptxt.byte[ 0 ] for lconf.param^msg.plgth; lconf.param^msg.ptxt.byte[ 0 ] ':=' "0"; end; ! of single digit entered lconf.param^msg.plgth := 2; ncd^dflt^hopr^content^g ':=' lconf.param^msg.ptxt for lconf.param^msg.plgth; end; ! of numeric end; ! of if not ferror ! ! PARTIAL-APPROVAL-ALWD ! if not ferror then begin partial^apprv^alwd^g := true; if lconf.param^msg.ptxt = "N" then begin partial^apprv^alwd^g := false; end; end; #ADD 04099 INIT^PCT set ( pct.auto^signon^on^strt, icf.base.processing^options.auto^signon^on^strt ); move( pct.swi^id, icf.base.swi^id ); #ADD 04137 INIT^PCT set( pct.status.logon, false ); #ADD 04138 INIT^PCT if pct.station[i].nam = nulls for 16 then begin init( pct.station[i].nam, " ", 16 ); end else #ADD 04156j00 INIT^PCT if @icf.ncd <> -1 then begin ncd^exists^g := true; move( pct.atm.ncd.not^on^us, icf.ncd.not^on^us ); move( pct.atm.ncd.trans^allowed, icf.ncd.trans^allowed ); move( pct.atm.ncd.dflt^merch^typ, icf.ncd.dflt^merch^typ ); end ! of ncd segment exists else begin ncd^exists^g := false; movd( pct.atm.ncd.not^on^us, "00" ); movd( pct.atm.ncd.trans^allowed, "0" ); movd( pct.atm.ncd.dflt^merch^typ, merchandise^and^services^d ); end; ! of ncd segment does not exist, use defaults if @icf.atm <> -1 then begin set ( pct.atm.present, true ); movd( pct.atm.prod^id, "01" ); move( pct.atm.dest, icf.atm.auth^pro ); move( pct.atm.rtg^grp, icf.atm.dflt^rtg^grp ); movl( pct.atm.shrg, icf.atm.shrg^grp, 24 ); move( pct.atm.not^on^us, icf.atm.not^on^us ); move( pct.atm.trans^allowed, icf.atm.trans^allowed ); set ( pct.atm.timers.saf, icf.atm.timer^lmts.isaf * 100d ); set ( pct.atm.timers.outbound, icf.atm.timer^lmts.outbound * 100d ); set ( pct.atm.timers.inbound, icf.atm.timer^lmts.inbound * 100d ); set ( pct.atm.timers.compl, icf.atm.timer^lmts.compl * 100d ); set ( pct.atm.timers.compl^ack, icf.atm.timer^lmts.compl^ack * 100d ); end ; #ADD 04308j0X INIT_PCT_ICFE set ( pct.auto^signon^on^strt, icfe.base.processing_options.auto_signon_on_strt ); move( pct.swi^id, icfe.base.swi_id ); #ADD 04308j23 INIT_PCT_ICFE set( pct.status.logon, false ); #ADD 04308j27 INIT_PCT_ICFE if pct.station[i].nam = nulls for 16 then begin init( pct.station[i].nam, " ", 16 ); end else #ADD 04308j2O INIT_PCT_ICFE if @icfe.ncd <> -1 then begin move( pct.atm.ncd.dflt^merch^typ, icfe.ncd.dflt_merch_typ ); ncd^exists^g := true; end ! of ncd segment exists ! else begin movd( pct.atm.ncd.dflt^merch^typ, "6012" ); ncd^exists^g := false; end; ! of ncd segment does not exist, use defaults ! if @icfe.atm <> -1 then begin set ( pct.atm.present, true ); movd( pct.atm.prod^id, "01" ); move( pct.atm.dest, icfe.atm.auth_pro ); move( pct.atm.rtg^grp, icfe.atm.dflt_rtg_grp ); movl( pct.atm.shrg, icfe.atm.shrg_grp, 24 ); move( pct.atm.acq^txn^prfl, icfe.atm.acq_txn_prfl ); move( pct.atm.iss^txn^prfl, icfe.atm.iss_txn_prfl ); set ( pct.atm.timers.saf, icfe.atm.timer_lmts.isaf * 100d ); set ( pct.atm.timers.outbound, icfe.atm.timer_lmts.outbound * 100d ); set ( pct.atm.timers.inbound, icfe.atm.timer_lmts.inbound * 100d ); set ( pct.atm.timers.compl, icfe.atm.timer_lmts.compl * 100d ); set ( pct.atm.timers.compl^ack, icfe.atm.timer_lmts.compl_ack * 100d ); end ; #ADD 04546 INIT^SECURE ?section init^snf ?page "init^snf" !##################################################################### !# # !# init^snf # !# # !# This procedure reads the Station Name File into the process # !# control table. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# true - Successful. # !# false - Unsuccesful. # !# # !##################################################################### int proc init^snf; begin wlform( operr, "Failure on OPEN, File \F, Error \E" ) wlform( rderr, "FAILURE on READ, File \F, Error \E" ) struct .snf( snf^def ); int ferror; int i; if snf^name^g = invalid^name^d then begin return true; end; if ferror := hiswfile^open( snf^name^g, snf^num^g,, 1 ) then begin log^message^( 4023, ! routing code !, @operr, net.myname, 3, @snf^name^g, ferror ); return true; end; ! ! Read the records for this interface and move them into PCT. ! if ferror := hiswfile^keyposition( snf^num^g, net.myname,, 16, 1 ) then begin call hiswfile^close( snf^num^g ); movd( snf^name^g, invalid^name^d ); snf^num^g := -2; return true; end; if ferror := hiswfile^read( snf^num^g, snf, $len( snf ), , feeof ) then begin log^message^( 4024, ! routing code !, @rderr, net.myname, 2, @snf^name^g, ferror ); call hiswfile^close( snf^num^g ); return true; end; ! ! Load the stations into the PCT. ! pct.status.num^of^sta := snf.num^sta; for i := 0 to ( pct.status.num^of^sta - 1 ) do begin pct.station[ i ].nam ':=' snf.sta[ i ].snd^nam for $len( pct.station.nam ); if snf.sta[ i ].switch^data = credit^d or snf.sta[ i ].switch^data = debit^d or snf.sta[ i ].switch^data = both^d then begin call ascii^integer( snf.sta[ i ].switch^data, 1, pct.station[ i ].typ ); end else begin set( pct.station[ i ].typ, both^l ); end; pct.station[ i ].up := false; pct.station[ i ].traffic := false; pct.station[ i ].t^o^ctr := false; pct.station[ i ].t^o^max := false; end; call hiswfile^close( snf^num^g ); return true; end; ! of proc init^snf #ADD 04721j05 PSTM^0200^REQUEST int found^txn^sub^tkn := false; int txn^subtyp^tkn^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); string .tkn^id[ 0:1 ]; #ADD 04788|0k PSTM^0200^REQUEST tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); #REPLACE 04799T01/04799T02 PSTM^0200^REQUEST if ( pos^return^d( pstm ) or pos^adjust^d( pstm ) or pos^return^adjust^d( pstm ) or pos^preauth^comp^d( pstm ) ) and not ( pos^pmnt^d ( pstm ) ) then #REPLACE 04929 /04929 OFFSET 0 PSTM^0210^RESPONSE if pos^approved^d( pstm ) and not pos^inquiry^d( pstm ) and not pos^crd^vrfy^d( pstm ) then #REPLACE 04941 /04941 OFFSET 0 PSTM^0210^RESPONSE if pos^approved^d( pstm ) and not pos^inquiry^d( pstm ) and not pos^crd^vrfy^d( pstm ) then #REPLACE 04991 /04991 OFFSET 0 PSTM^0220^FORCE^POST if pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) or not pos^approved^d( pstm ) then begin #REPLACE 04993 /04993 OFFSET 0 PSTM^0220^FORCE^POST end; if pstm.tran.ovrrde^flg = "1" or pstm.tran.dft^capture^flg = "3" or pstm.responder = interface^orig^d then begin return; end; #ADD 05222 PSTM^0420^REVERSAL ! The following transactions do not generate external requests ! to MasterCard. If a reversal is generated, update the ILF only. if pos^adjust^d( pstm ) or pos^return^adjust^d( pstm ) or pos^preauth^comp^d( pstm ) then begin if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^not^supported^l, pstm ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm,,, sub^not^supported^l ); end; return; end; if pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) then begin return; end; #ADD 05222207 PSTM^0420^REVERSAL if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^not^supported^l, pstm ) then begin #REPLACE 05222208/0522220C PSTM^0420^REVERSAL call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^not^supported^l ); end; #DELETE 05223e00/05223e0G PSTM^0420^REVERSAL #REPLACE 05348j01 SEM^^INPUT^FROM^STATION !0190! call sem^response^nack ( sem, msg, sta^x ); #REPLACE 05353j01 SEM^^INPUT^FROM^STATION !0290! call sem^response^nack ( sem, msg, sta^x ); #DELETE 05374}0a SEM^ACQ^RVSL^RESP #ADD B0537408 SEM^ACQ^RVSL^RESP int ilf^rec^typ; #REPLACE B053740M SEM^ACQ^RVSL^RESP ilf^rec^typ := ilf.rec^typ; #REPLACE B053740P/B053740P OFFSET 0 SEM^ACQ^RVSL^RESP end else if sem^atm^d( sem ) and pct.atm.present then begin ilf^rec^typ := atm^l; end else begin ilf^rec^typ := pos^l; end; #REPLACE B053740d SEM^ACQ^RVSL^RESP ilf^rec^typ, #REPLACE B053740f SEM^ACQ^RVSL^RESP ! base24 msg !, #REPLACE B053740n SEM^ACQ^RVSL^RESP ! When the ILF was updated with the Base24 reversal, the SEM ! #REPLACE 05374}1b/05374}1c SEM^ACQ^RVSL^RESP ! Update the ILF record containing the Base24 0420 Reversal and ! ! the SEM 0110/Authorization Request Response with the SEM ! #REPLACE 05374}1j SEM^ACQ^RVSL^RESP ! base24 msg !, #REPLACE 05374}1p SEM^ACQ^RVSL^RESP ilf^rec^typ, #REPLACE 05374}1r SEM^ACQ^RVSL^RESP base24^msg, #ADD 05374}1y SEM^ACQ^RVSL^RESP ?section sem^acq^rvsl^rqst ?page "sem^acq^rvsl^rqst" !##################################################################### !# # !# sem^acq^rvsl^rqst # !# # !# This procedure handles a 0400/Acquirer Reversal Request # !# message from the network. # !# # !# INPUT PARAMETERS: # !# rvsl - reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^acq^rvsl^rqst( rvsl, msg, sta^x ); int .rvsl( sem^def ); int .msg; int sta^x; begin struct .ilf( ilf^def ); int fnum; int ilf^found := false; int ilf^lgth; int rvsl^typ := 0; call sem^frmt^prikey( rvsl, ilf.prikey ); if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth ) ) then begin ilf^found := true; rvsl^typ := ilf.rec^typ; end else if ( sem^atm^d( rvsl ) or sem^ncd^txn^d( rvsl ) ) and pct.atm.present then begin rvsl^typ := atm^l; end else begin rvsl^typ := pos^l; end; if rvsl^typ = atm^l then begin call sem^acq^rvsl^rqst^atm( rvsl, msg, sta^x ); end else begin call sem^acq^rvsl^rqst^pos( rvsl, msg, sta^x ); end; end; ! of proc sem^acq^rvsl^rqst #REPLACE 05374}1z/05374}20 SEM^ACQ^RVSL^RESP ?section sem^acq^rvsl^rqst^pos ?page "sem^acq^rvsl^rqst^pos" #REPLACE 05374}23 SEM^ACQ^RVSL^RESP !# sem^acq^rvsl^rqst^pos #! #REPLACE 05374}25 SEM^ACQ^RVSL^RESP !# This procedure handles a 0400/Acquirer POS Reversal Request #! #REPLACE 05374}2G SEM^ACQ^RVSL^RQST proc sem^acq^rvsl^rqst^pos( rvsl, msg, sta^x ); #REPLACE 05374}2N SEM^ACQ^RVSL^RQST "T - SEM Type \\\\ POS Acquirer Reversal Request Received" ) #REPLACE 05374}3C FRMT^AND^SEND^ACQ^RVSL^RESP ?page "sem^acq^rvsl^rqst^pos" #REPLACE 05374}3F FRMT^AND^SEND^ACQ^RVSL^RESP !# This is the main body of PROC sem^acq^rvsl^rqst^pos #! #REPLACE 05374905 FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^system^error^sem^d; #REPLACE 05374908 FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^frmt^err^sem^d; #REPLACE 0537490B FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^unable^to^route^d; #ADD 05374}6k FRMT^AND^SEND^ACQ^RVSL^RESP pos^crd^vrfy^d( pstm ) or #ADD 0537490D FRMT^AND^SEND^ACQ^RVSL^RESP if poss^dup^d( pstm ) then begin ack^resp^cde ':=' resp^dup^detect^d; end else begin ack^resp^cde ':=' resp^frmt^err^sem^d; end; #DELETE 0537490E FRMT^AND^SEND^ACQ^RVSL^RESP #REPLACE 0537490H FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^frmt^err^sem^d; #REPLACE 0537490m FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^unable^to^route^d; #REPLACE 05374}9t FRMT^AND^SEND^ACQ^RVSL^RESP end; ! of proc sem^acq^rvsl^rqst^pos ! #ADD 05374}9u FRMT^AND^SEND^ACQ^RVSL^RESP ?section sem^actvt^response ?page "sem^actvt^response" !##################################################################### !# # !# sem^actvt^response # !# # !# This proc generates a logon request if the interface is # !# configured to sign-on automatically but is not currrently # !# logged on. # !# # !# INPUT PARAMETERS: # !# sem - pointer to the external request message # !# msg - message word pointer # !# sta^x - station index request was received on # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc sem^actvt^response( sem, msg, sta^x ); int .sem( nmm^def ); int .msg; int sta^x; begin if not sem^approved^d( sem ) then begin return; end; if pct.auto^signon^on^strt and not pct.status.logon then begin call cmd^logon^gsi^chk( ! msg !, ! mtp !, pct.options.logon^typ ); end; end; ! of sem^actvt^response #ADD 05638j00 SEM^ADVICE if ( sem^atm^d( sem ) or sem^ncd^txn^d( sem ) ) and pct.atm.present then begin call sem^advice^atm( sem, msg, sta^x ); end else begin call sem^advice^pos( sem, msg, sta^x ); end; #DELETE 05638j01 SEM^ADVICE #REPLACE 05959T29/05959T29 OFFSET 0 SEM^ECHOTEST^RESPONSE if gsi^used^g or ( ( bniif^tbl.fiid = "****" ) and ( bniif^tbl.mci^id = group for $len( bniif^tbl.mci^id ) ) ) then #DELETE 05959T2A SEM^ECHOTEST^RESPONSE #ADD 06129 SEM^LOGOFF^RESPONSE^GROUP if sem^approved^d( sem ) then begin pct.status.logon := false; end; #ADD 06218 SEM^LOGON^RESPONSE^GROUP if sem^approved^d( sem ) then begin pct.status.logon := true; end; #ADD 06246K01 SEM^LOGON^RESPONSE^GROUP if ( sem^approved^d( sem ) ) and ( gsi^used^g or ( ( bniif^tbl.fiid = "****" ) and ( bniif^tbl.mci^id = group for $len( bniif^tbl.mci^id ) ) ) ) then #DELETE 06246K02/06246K03 SEM^LOGON^RESPONSE^GROUP #REPLACE D0655701 SEM^NMM^RESPONSE !081! call sem^actvt^response ( sem, msg, sta^x ); #ADD 06608500 SEM^REQUEST set ( ncd^found^g, false ); if ( sem^atm^d( sem ) or sem^ncd^txn^d( sem ) ) and pct.atm.present then begin set ( susp.rec^typ, atm^l ); if sem^ncd^txn^d( sem ) and ncd^exists^g then begin set ( ncd^found^g, true ); end; end else begin #REPLACE 06608501/06608501 OFFSET 0 SEM^REQUEST set ( susp.rec^typ, pos^l ); end; #REPLACE 06612]00 SEM^REQUEST send^on^behalf^dcln^advc^g := false; #DELETE 06612]03/E066120w SEM^REQUEST #ADD D066121V SEM^REQUEST send^on^behalf^dcln^advc^g := true; end else begin call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^system^error^l ); return; end; end; ! of if ( frst^rslt^prsnt and #DELETE D066121W/D066122R SEM^REQUEST #ADD 06612]1H SEM^REQUEST if susp.rec^typ = atm^l then begin call sem^request^atm( susp, sem, sta^x ); end else begin call sem^request^pos( susp, sem, sta^x ); end; #DELETE 06612]1I/06612j01 SEM^REQUEST #ADD 06747j03 SEM^REQUEST^POS int frmt^err; #ADD 06749 SEM^REQUEST^POS int .pbit^map := wordaddr( @sem.pbit^map ); int scnd^rslt^prsnt := false; #ADD 06763 SEM^REQUEST^POS if send^on^behalf^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to ! 'Y' and frmt^err = false, then forward ! to Router Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^system^error^l ); return; end; ! of if frmt^err := ... end; ! of if send^on^behalf^dcln^advc^g if addl^data^bit^d then begin if sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag = "76" and ( sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "M" or sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "C" or sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76. tag^data = "U" ) and deny^mc^e^comm^txn^g = true then begin if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to 'Y' and ! frmt^err = false, then forward to Router ! Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frmt^err := ... end; ! of if frwd^dcln^advc^g call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; if deny^if^atc^discrp^g then begin if sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag = "34" and ( sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind = atc^greater^than^max^d or sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind = atc^less^than^min^d ) then begin if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! LCONF parameter FRWD-DCLN-ADVC set to ! 'Y' and frmt^err = false, then forward ! to Router Authorization. ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frmt^err call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frwd^dcln^advc^g end; ! of if tag = "34" end; ! of if deny^if^atc^dicsrp^g end; ! of if addl^data^bit^d #REPLACE 06848j06 SEM^RESPONSE $len( susp.prikey ), ilf.rec^typ, #ADD 06860T03 SEM^RESPONSE ! ! Neither suspense record nor ILF found ! if ( sem^atm^d( sem ) or sem^ncd^txn^d( sem ) ) and pct.atm.present then begin set ( susp.rec^typ, atm^l ); end else begin set ( susp.rec^typ, pos^l ); end; #REPLACE 06860T05/06860T06 SEM^RESPONSE $len( susp.prikey ), susp.rec^typ, msg^sym^source,!base24^msg!, sem, #ADD 06863j00 SEM^RESPONSE if susp.rec^typ = atm^l then begin call sem^response^atm( susp, sem, sta^x ); end else begin #REPLACE 06863j01/06863j01 OFFSET 0 SEM^RESPONSE call sem^response^pos( susp, sem, sta^x ); end; #ADD 06871j00 SEM^RESPONSE ?section sem^response^nack ?page "sem^response^nack" !##################################################################### !# # !# sem^response^nack # !# # !# This procedure produces a negative acknowledgement message # !# from Banknet. # !# # !# INPUT PARAMETERS : # !# sem - authorization response nack # !# msg - message word pointer # !# sta^x - station on which this message was received # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN VALUE: # !# # !##################################################################### proc sem^response^nack( sem, msg, sta^x ) extensible; int .sem( sem^def ); int .msg; int sta^x; begin struct .ilf( ilf^def ); struct .resp( sem^def ); int fnum; int ilf^lgth; int lgth; int .prikey( prikey^def ) := wordaddr( @ilf.prikey ); int .sbit^map := wordaddr( @sem.sbit^map ); int .base24^msg[ 0:wlen( msg^def ) - 1 ]; string .dat[ 0:5 ]; call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call sem^frmt^prikey( sem, ilf.prikey ); if private^data^bit^d then begin call hiswutil^justify^field( sem.private^data.info, $len( prikey.term^id ), prikey.term^id, $len( prikey.term^id ), left^justify^l ); mov^( prikey.pan, sem.private^data.info.byte[ $len( prikey.term^id ) ] ); end; if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, resp ) ) then begin ! ! This is a reversal for a late response sent by BASE24 ! if ilf.rec^typ = atm^l then begin call sem^response^nack^atm( sem, sta^x, fnum, ilf, ilf^lgth, dat, base24^msg, resp, late^resp^nack^d ); end else begin call sem^response^nack^pos( sem, sta^x, fnum, ilf, ilf^lgth, dat, base24^msg, resp, late^resp^nack^d ); end; return; end; call sem^frmt^prikey( sem, ilf.prikey, true ); if ( fnum := util^ilf^get( ilf.prikey, $offset( prikey^def.term^id ), ilf, ilf^lgth, base24^msg, resp ) ) then begin ! ! This is a Nack to a late acquirer acknowledgment ! if ilf.rec^typ = atm^l then begin call sem^response^nack^atm( sem, sta^x, fnum, ilf, ilf^lgth, dat, base24^msg, resp, late^ack^nack^d ); end else begin call sem^response^nack^pos( sem, sta^x, fnum, ilf, ilf^lgth, dat, base24^msg, resp, late^ack^nack^d ); end; return; end; call ascii^integer^( sem.private^data.lgth, lgth ); if sem.private^data.info.byte[ lgth - 1 ] = atm^d then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), atm^l, ! source !, ! stm !, sem, $len( sem^def ), sub^rvsl^not^found^l ); end else begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, ! pstm !, sem, $len( sem^def ), sub^rvsl^not^found^l ); end; end; ! of proc sem^response^nack ?section sem^response^nack^pos ?page "sem^response^nack^pos" !##################################################################### !# # !# sem^response^nack^pos # !# # !# This procedure produces a negative acknowledgement message # !# from Banknet for POS. # !# # !# INPUT PARAMETERS : # !# sem - Authorization response nack # !# sta^x - Station on which this message was received # !# fnum - ILF file number # !# ilf - ILF record # !# ilf^lgth - length of ILF record # !# dat - ILF settlement date # !# pstm - PSTM from the ILF record # !# resp - SEM response from the ILF record # !# nack^typ - The type of nack # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN VALUE: # !# # !##################################################################### proc sem^response^nack^pos( sem, sta^x, fnum, ilf, ilf^lgth, dat, pstm, resp, nack^typ ) extensible; int .sem( sem^def ); int sta^x; int fnum; int .ilf( ilf^def ); int ilf^lgth; string .dat; int .pstm( pstm^def ); int .resp( sem^def ); string nack^typ; begin struct .adv( sem^def ); struct .csem( sem^def ); int extlgth; int .pbit^map := wordaddr( @sem.pbit^map ); if nack^typ = late^resp^nack^d then begin ! ! This is a reversal for a late response sent by BASE24 ! if pstm.term^ln = pct.ln for $len(pct.ln) then begin if ( ilf.intrn^msg^savearea^lgth = 0 ) or poss^dup^d( pstm ) or not pos^approved^d( pstm ) or pos^crd^vrfy^d( pstm ) or pos^inquiry^d( pstm ) then begin return; end; if not sem^approved^d( resp ) or sem^inquiry^d( resp ) or poss^dup^d( resp ) then begin return; end; movd ( pstm.typ, reversal^d ); movd ( pstm.rvsl^cde, rvsl^timeout^d ); movd ( pstm.originator, interchange^orig^d ); call util^send^pstm( pstm, ilf.orig^net^pro ); move ( resp.typ, sem.typ ); move ( resp.resp^cde, sem.resp^cde ); if addl^resp^bit^d then begin move ( resp.addl^resp^data, sem.addl^resp^data ); end; if not util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm, resp ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, pstm, resp, $len( sem^def ), sub^format^error^l ); end; end; return; end; if nack^typ = late^ack^nack^d then begin ! ! This is a Nack to a late acquirer acknowledgment ! if not sem^approved^d( resp ) or sem^inquiry^d( resp ) or poss^dup^d( resp ) then begin return; end; if sem^frmt^xresp^to^sem^xadv( resp, adv ) then begin if sem.banknet^data.ntwk^id^cde = "MCC" then begin if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^not^supported^l, ! pstm !, adv ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, ! pstm !, adv, $len( sem^def ), sub^not^supported^l ); end; end else begin if util^^collapse( adv, csem, extlgth ) then begin call util^saf^add( csem, extlgth, ilf.rec^typ, pct.station[ sta^x ].typ ); if not util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, ! pstm !, adv ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, ! pstm !, adv, $len( sem^def ), sub^format^error^l ); end; end else begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, ! pstm !, adv, $len( sem^def ), sub^format^error^l ); end; end; end else begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, ! source !, ! pstm !, resp, $len( sem^def ), sub^format^error^l ); end; return; end; end; !of proc sem^response^nack^pos #DELETE 06871j01/07151 SEM^RESPONSE^NACK^POS #ADD 07182 SEM^RESPONSE^POS if util^pos^standin^rcs( sem.resp^cde ) then begin call pstm^0200^route( susp, resp^unable^to^process^pos^l, sub^system^error^l ); return; end; #ADD 07242j01 SEM^REVERSAL^ADVICE int ilf^found := false; #DELETE 07242j02 SEM^REVERSAL^ADVICE #ADD 07242]01 SEM^REVERSAL^ADVICE int rvsl^typ := 0; int updt^ilf := false; #DELETE 07242j03/07242j04 SEM^REVERSAL^ADVICE #DELETE 07244j01 SEM^REVERSAL^ADVICE #ADD 07256 SEM^REVERSAL^ADVICE if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, sem ) ) then begin ilf^found := true; rvsl^typ := ilf.rec^typ end else if sem^atm^d( rvsl ) and pct.atm.present then begin rvsl^typ := atm^l; end else begin rvsl^typ := pos^l; end; if rvsl^typ = atm^l then begin updt^ilf := sem^reversal^advice^atm( rvsl, msg, sta^x, dat, base24^msg, sem, ilf, ilf^found ); end else begin updt^ilf := sem^reversal^advice^pos( rvsl, msg, sta^x, dat, base24^msg, sem, ilf, ilf^found ); end; if updt^ilf then begin if not util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, base24^msg, rvsl ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, sem, $len( sem^def ), sub^format^error^l ); end; end; end; ! of proc sem^reversal^advice ?section sem^reversal^advice^pos ?page "sem^reversal^advice^pos" !##################################################################### !# # !# sem^reversal^advice^pos # !# # !# This procedure handles a Banknet reversal message # !# # !# INPUT PARAMETERS : # !# rvsl - sem reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# dat - Settlement date # !# pstm - expanded pstm from ilf # !# ilf - ilf record # !# ilf^found - true/false result flag from util^ilf^get. # !# - true = ilf, pstm params contain data. # !# - false = this is an unmatched reversal. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - processed, caller should update ilf # !# false - problem , caller should not update ilf # !# # !##################################################################### int proc sem^reversal^advice^pos( rvsl, msg, sta^x, dat, pstm, sem, ilf, ilf^found ); int .rvsl( sem^def ); int .msg; int sta^x; string .dat; int .pstm( pstm^def); int .sem( sem^def ); int .ilf( ilf^def ); int ilf^found; begin int .auth^dest[ 0:7 ]; int fatal^flg := true; int rcode; string log^auth^dest^resp; ?page "subproc sub^process^unmatchd^pos^rvsl" !################################################################# !# # !# This subprocedure handles unmatched (no ILF) POS reversals. # !# # !# INPUT PARAMETERS: n/a # !# OUTPUT PARAMETERS: n/a # !# RETURN: n/a # !# # !################################################################# subproc sub^process^unmatchd^pos^rvsl; begin ilf.rec^typ := pos^l; if frwd^unmatched^rvsls^g = false then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, rvsl, $len( sem^def ), sub^rvsl^not^found^l ); return; end ! of if frwd^unmatched^rvsls^g = false else begin if rcode := sem^frmt^xrqst^to^pstm^0200( rvsl, pstm, sta^x ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, rvsl, $len( sem^def ), sub^format^error^l ); return; end ! if rcode = error else begin call sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm ); if base24^rel^g >= 6 then begin ! ! Determine the destination for the BASE24-pos ! reversal using the Acquirer Routing Token or the ! APCFEMT record. ! if rcode := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth^dest, log^auth^dest^resp, fatal^flg, emt_g[ apcfemt_idx_l ]. fname ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, rvsl, $len( sem^def ), sub^fail^pre^auth^l ); return; end else begin call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end; end ! of if base24^rel^g >= 6 else begin call util^send^pstm( pstm, pct.pos.dest ); end; ! of base24^rel^g < 6 call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, rvsl, $len( sem^def ), sub^rvsl^not^found^l ); return; end; ! of if rcode = no error end; ! of if frwd^unmatched^rvsls^g = true call util^ilf^add( dat, ilf.prikey, $len(ilf.prikey), ilf.rec^typ, msg^sym^source,, rvsl, $len(sem^def), sub^rvsl^not^found^l ); return; end; ! of subproc sub^process^unmatchd^pos^rvsl ?page "sem^reversal^advice^pos" !################################################################# !# # !# This is the main body of PROC sem^reversal^advice^pos # !# # !################################################################# if not ilf^found then begin call sub^process^unmatchd^pos^rvsl; return false; end; if ( ilf.intrn^msg^savearea^lgth = 0 ) or poss^dup^d( pstm ) or pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) or not pos^approved^d( pstm ) then begin return false; end; if ( rvsl.orig.msg^typ = sem^auth^advice^d ) and ( sem.typ <> sem^auth^advice^d ) then begin return false; end; if ( rvsl.orig.msg^typ = sem^advice^d ) and ( sem.typ <> sem^advice^d ) then begin return false; end; if ( rvsl.orig.msg^typ = sem^auth^request^d ) and ( sem.typ <> sem^auth^response^d ) then begin return false; end; if ( rvsl.orig.msg^typ = sem^request^d ) and ( sem.typ <> sem^response^d ) then begin return false; end; call sem^frmt^xrvsl^to^pstm^0420( rvsl, pstm, sem ); if base24^rel^g >= 6 then begin ! ! Add Acquirer Routing Token to the PSTM and send the ! reversal. ! rcode := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth^dest, log^auth^dest^resp, fatal^flg, emt_g[ apcfemt_idx_l ].fname ); if rcode then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, sem, $len( sem^def ), sub^fail^pre^auth^l ); return false; end ! of if rcode else begin call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end; ! of not if rcode end ! of if base24^rel^g >= 6 else begin call util^send^pstm( pstm, ilf.orig^net^pro ); end; ! of if base24^rel^g < 6 return true; end; !of proc sem^reversal^advice^pos #DELETE 07257 /07277j01 SEM^REVERSAL^ADVICE #DELETE 08008j01 TIM^OUT^00^OUTBOUND #ADD 08023}01 TIM^OUT^00^OUTBOUND begin ! ! When a timeout occurs on an outbound external 0400/Acquirer ! Reversal Request message, the interface will NOT format and ! send a denied response to BASE24. Upon receipt of the late ! 0410/Acquirer Reversal Request Response message inbound ! to the interface from the network, the interface will ! retrieve the original STM/PSTM 0210 Response / external ! 0110 Authorization Request Response record from the ILF and ! will update the record with the STM/PSTM 0420 Reversal / ! external 0410 Acquirer Reversal Request Response. ! if susp.rec^typ = atm^l then call stm^0200^route( susp, resp^sys^error^atm^l, sub^timeout^l ) else #DELETE 08023}02/08023}0D TIM^OUT^00^OUTBOUND #REPLACE 08023}0E/08023}0G TIM^OUT^00^OUTBOUND call pstm^0200^route( susp, resp^unable^to^process^pos^l, sub^timeout^l ); #ADD 08023}0L TIM^OUT^00^OUTBOUND if susp.rec^typ = atm^l then begin increment^dbl^d( pct.atm.perform[ 0 ].out^rqst.timeouts ); end else begin #REPLACE 08023j03/08023j03 OFFSET 0 TIM^OUT^00^OUTBOUND increment^dbl^d( pct.pos.perform[ 0 ].out^rqst.timeouts ); end; #ADD 08071 TIM^OUT^01^INBOUND int .stm( stm^def ) := @susp.intrn^msg; #ADD 08083 TIM^OUT^01^INBOUND if susp.rec^typ = atm^l then begin increment^dbl^d( pct.atm.perform[ 0 ].in^rqst.timeouts ); call integer^ascii^( stm.rqst.resp, resp^unable^to^process^atm^l ); end else #REPLACE 08083j00/08083j04 TIM^OUT^01^INBOUND begin increment^dbl^d( pct.pos.perform[ 0 ].in^rqst.timeouts ); call integer^ascii^( pstm.tran.resp^cde, resp^unable^to^process^pos^l ); end; #ADD 08333 TIM^OUT^09^PERFORMANCE if pct.atm.present then begin for per^x := begin_loop downto 1 do begin move( pct.atm.perform[ per^x ], pct.atm.perform[ per^x - 1 ] ); end; pct.atm.perform[ 0 ] ':=' [ 0 ] & pct.atm.perform[ 0 ] for $len( pct.atm.perform[ 0 ] ) - 1 ; end; if pct.pos.present then #REPLACE 08333j00/08333j05 TIM^OUT^09^PERFORMANCE begin for per^x := begin_loop downto 1 do begin move( pct.pos.perform[ per^x ], pct.pos.perform[ per^x - 1 ] ); end; #REPLACE 08333j07/08333j08 TIM^OUT^09^PERFORMANCE pct.pos.perform[ 0 ] ':=' [ 0 ] & pct.pos.perform[ 0 ] for $len( pct.pos.perform[ 0 ] ) - 1 ; end; #ENDSCN = SW0C096 !#CMP2.28 01/31/08 RQBNETS 6006 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNETS RQBNETS 6006 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNETS RQBNETS 6006 * ******************************************************************************** #SCN = SW0C097 , FILEID = RQBNETS #VOLUME = $ROOK.SW60BNET #FILE = RQBNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00018F0L * 31JAN2008 huac * Symptom: Banknet Global Authorization Enhancements * Problem: None. * Fix: Added SNF support. * Modified sections: * 400-SELECT-FUNCTION * Added section: * 400-BNSNF * Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, * BNETEMVS, BNETG, BNETLIBS, BNETM, BNETS, * CUSTMACS, DDLFSTF, FLGSDOC, OMFXS, RQBNETS, * RQSTFS, SCRNBNET, SCRNSTF, SWBNETM, * SWIFM and SWIMM. Add SW60ABNT Subvol. Run Make. * BA10SC04 subvolume. New files: ILB1107M, * ILB1107R, ILB1107S, STF1107M, STF1107R and * STF1107S. Make the ILF conversion using ILB1107M. * Run the ILF conversion using ILB1107R. Make * the STF conversion using STF1107M. Run the STF * conversion using STF1107R. Replace BNETLOGM * and BNETMNWD. * Reference: WO #070202-01. #ADD 00084 DATA DIVISION COPY SNF-PROCESSING-DEFINITIONS OF =BASRC_BACOUTLS. #REPLACE 00431 400-SELECT-FUNCTION 400-BNSNF, #ADD 00515 450-NO-ACCESS COPY SNF-PROCESSING OF =BASRC_BACOUTLS. 400-BNSNF. MOVE "SNF" TO PROG-SUF. PERFORM 880-CALL-MENU-SEL-SNF. #ENDSCN = SW0C097 !#CMP2.28 01/31/08 SWBNETM 6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SWBNETM SWBNETM 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SWBNETM SWBNETM 6001 * ******************************************************************************** #SCN = SW0C099 , FILEID = SWBNETM #VOLUME = $ROOK.SW60BNET #FILE = SWBNETM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6001 #NEWVERSION = 6002 #ADD 0055A0G # 31JAN2008 BensonE # Symptom: Banknet Global Authorization Enhancements. # Problem: None. # Fix: Added new flag, BNET_ATM_ON, to support ATM extension # in the Banknet ISO Interface. # Dependency: Apply fixes to BNETD, BNETDDLS, BNETEMVM, BNETEMVS, # BNETG, BNETLIBS, BNETM, BNETS, CUSTMACS, FLGSDOC, # OMFXS, RQBNETS, RQSTFS, SCRNBNET, SCRNSTF, SWBNETM, # SWIFM and SWIMM. Add SW60ABNT Subvol. Run # Make. BA10SC04 subvolume. New files: ILB1107M, # ILB1107R, ILB1107S, STF1107M, STF1107R and STF1107S. # Make the ILF conversion using ILB1107M. Run the ILF # conversion using ILB1107R. Make the STF conversion # using STF1107M. Run the STF conversion using STF1107R. # Replace BNETLOGM and BNETMNWD. # Reference: WO #070202-01. #ADD 0073 !IF $(bnet_atm_on) = $(TRUE) |THEN| !include $(swabnt_swabntm) !ENDIF #ADD 0099 !IF $(bnet_atm_on) = TRUE |THEN| \ $(swabnt_bnetatmo) \ !ENDIF \ #REPLACE 0110 /0111 = #APPEND :var add * from =swbnet_bneto, delete # 0110 = #APPEND :var add * from =swbnet_bnetlibo, delete # 0111 #ADD 0112 !IF $(bnet_atm_on) = TRUE |THEN| = #APPEND :var add * from =swabnt_bnetatmo, delete !ENDIF #REPLACE 0114 = #APPEND :var add * from =swibnt_bnetemvo, delete # 0114 #REPLACE 0118 = #APPEND :var add code * from =swswpm_swpmono, delete # 0118 #REPLACE 0121 = #APPEND :var select search =ACIUTILS_UTILB # 0121 #REPLACE 0123 = #APPEND :var select search =BALIB_BALIBTO # 0123 #REPLACE 0124A01 = #APPEND :var select search =BASRC_TKNCV # 0124A01 #REPLACE 0125 /0128 = #APPEND :var select search =BASRC_KEYUTIL # 0125 = #APPEND :var select search =BASRC_BAUTIL # 0126 = #APPEND :var select search =BASRC_HISWUTL # 0127 = #APPEND :var select search =BASRC_SECUTIL # 0128 #REPLACE 0133 = #APPEND :var build $(TARGET) ! # 0133 #REPLACE 0151 = check_completion $(TARGET) # 0151 #ENDSCN = SW0C099 !#CMP2.28 02/06/08 BNETLIBS6114 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6114 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6114 * ******************************************************************************** #SCN = SW0C120 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6114 #NEWVERSION = 6115 #ADD 04419N1Y ! 04FEB2008 engelk ! Symptom: CVV2 results code mappings from external values to ! BASE24 token results values are inconsistent. ! Problem: The BNET interface was setting the PS50 (04) token's ! card verify flag and the POS DATA1 (CH) token's card ! verify flag2 to "O" when MasterCard sent P-48 ! (Additional Data), SE-87 (Card Validation Code Result) ! with a value of "S" (CVV2 is on the card, but the ! merchant has indicated that CVV2 is not present). This ! was correct based upon the description of these flags ! in the documentation at the time. However, the ! documentation did not accurately describe these fields. ! The documentation for these token fields has been ! updated to reflect the correct descriptions for the ! following values as shown below: ! ! O = Card verification was not performed, CVD was ! not on the card. Not all cards have a CVD value ! encoded. The card expiration date must be equal ! to or greater than an expiration date defined on ! the CPF to insure that the CVD field has been ! encoded. If the card expiration date is equal ! to or greater than the CPF date, the CVD checks ! are performed. ! ! P = Card verification was not performed. Either the ! merchant ignored the CVD on purpose or the ! user falsely indicated no CVD was on the card. ! ! Fix: Based upon the descriptions above, the BNET interface ! was changed to set the PS50 (04) token's card verify ! flag and the POS DATA1 (CH) token's card verify flag2 ! to "P" when MasterCard sends DE-48 (Additional Data), ! SE-87 (Card Validation Code Result) with a value of ! of "S" (CVV2 is on the card, but the merchant has ! indicated that CVV2 is not present). ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! ! Also corrected the interface so that it assigns a value ! of "S" to DE-48, SE-87 for VISA cards only. "S" is not ! a valid value for MasterCard transactions. ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #455060 #ADD 06839 PSTM^FRMT^0210^TO^XRESP ! ! This value is valid only for VISA ! if sem.pan.num = "4" and ! visa ! ( sem.pan.lgth = "13" or sem.pan.lgth = "16" ) then begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "S" ); end else begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "P" ); end; #DELETE 06840 /06841 PSTM^FRMT^0210^TO^XRESP #REPLACE 12397 SEM^FRMT^XRESP^TO^PSTM^0210 movd( crd^vrfy^flg2, "P" ); #REPLACE 12425 SEM^FRMT^XRESP^TO^PSTM^0210 movd( crd^vrfy^flg2, "P" ) #ENDSCN = SW0C120 !#CMP2.28 02/13/08 BNETS 6092 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6092 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6092 * ******************************************************************************** #SCN = SW0C170 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G000261A ! 13FEB2008 BensonE ! Symptom: Add ICF/ICFE flags to control ATM and NCD processing. ! Problem: There was no control over ATM and NCD processing ! at the Banknet level. ! Fix: Modified initialization to check the new ICF/E ! parameters when initializing the PCT for ATM and NCD. ! Procs modified: init^pct ! init_pct_icfe ! Dependency: Apply fixes to BNETS, BNETDDLS, RQBNETS and SCRNBNET. ! Run Make. Replace BNETMNWD. ! Reference: Case #455664. ! 13FEB2008 BensonE ! Symptom: Advice of transaction already sent to Banknet was not ! being dropped. ! Problem: Wrong global used to check for advices already sent ! to Banknet. ! Fix: Replace interface^orig^d with interchange^orig^d. ! Procs modified: pstm^0220^force^post ! Dependency: Apply fixes to BNETS. Run Make. ! Reference: Case #455664. #REPLACE G0415601 INIT^PCT if @icf.ncd <> -1 and icf^bnet.ncd^proc = "Y" then #REPLACE G041560H INIT^PCT if @icf.atm <> -1 and icf^bnet.atm^proc = "Y" then #REPLACE G043080G INIT_PCT_ICFE if @icfe.ncd <> -1 and icfe_bnet.ncd^proc = "Y" then #REPLACE G043080R INIT_PCT_ICFE if @icfe.atm <> -1 and icfe_bnet.atm^proc = "Y" then #REPLACE G0499305 PSTM^0220^FORCE^POST pstm.responder = interchange^orig^d then #ENDSCN = SW0C170 !#CMP2.28 02/13/08 BNETLIBS6115 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6115 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6115 * ******************************************************************************** #SCN = SW0C171 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6115 #NEWVERSION = 6116 #ADD 04419O0j ! 13FEB2008 BensonE ! Symptom: New LCONF parameters BNET-DEBIT-CARD-TYPES and ! BNET-STAND-IN-RCS not working. ! Problem: An unnecessary conversion of a string pointer to string ! caused the table lookup to fail. ! Fix: Removed the use of macro byteaddr. ! Procs modified: util^debit^crd^typ ! util^pos^standin^rcs ! Dependency: Apply fixes to BNETLIBS and run Make. ! Reference: Case #455664. #DELETE 17874N15 UTIL^DEBIT^CRD^TYP #REPLACE 17874N17 UTIL^DEBIT^CRD^TYP index := ut^binary^search( db^crd^tbl^g, #DELETE 22990N0Q UTIL^POS^STANDIN^RCS #REPLACE 22990N0S UTIL^POS^STANDIN^RCS index := ut^binary^search( standin^tbl^g, #ENDSCN = SW0C171 !#CMP2.28 02/13/08 BNETDDLS6028 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6028 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6028 * ******************************************************************************** #SCN = SW0C172 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6028 #NEWVERSION = 6029 #ADD 00262b0M * 13FEB2008 BensonE * Symptom: Add ICF/ICFE flags to control ATM and NCD processing. * Problem: There was no control over ATM and NCD processing * at the Banknet level. * Fix: Added ATM and NCD flags to ICF-BNET definition. * Dependency: Apply fixes to BNETS, BNETDDLS, RQBNETS and SCRNBNET. * Run Make. Replace BNETMNWD. * Reference: Case #455664. #ADD 02323 ICF-BNET * * If "Y" then atm processing is allowed. * 02 atm-proc pic x. * * If "Y" then noncurrency dispense processing is allowed. * 02 ncd-proc pic x. #ENDSCN = SW0C172 !#CMP2.28 02/13/08 RQBNETS 6007 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNETS RQBNETS 6007 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNETS RQBNETS 6007 * ******************************************************************************** #SCN = SW0C173 , FILEID = RQBNETS #VOLUME = $ROOK.SW60BNET #FILE = RQBNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00018G0M * 13FEB2008 BensonE * Symptom: Add ICF/ICFE flags to control ATM and NCD * processing. * Problem: There was no control over ATM and NCD processing * at the Banknet level. * Fix: Added flags to ICFBNET screen 12. * Modified sections: * 480-DATA-CHECK * 595-CLEAR-DATA * Dependency: Apply fixes to BNETS, BNETDDLS, RQBNETS and * SCRNBNET. Run Make. Replace BNETMNWD. * Reference: Case #455664. #ADD 00629 480-DATA-CHECK IF WS-OVERLAY = 12 IF (ATM-PROC OF ICF-BNET NOT = "Y") AND (ATM-PROC OF ICF-BNET NOT = "N") MOVE "BAD" TO VALID-DATA MOVE 11 TO ERR-CDE TURN TEMP SERROR IN B-ATM-PROC IF MOVE-MESSAGE SET NEW-CURSOR AT B-ATM-PROC MOVE "ATM PROCESSING MUST BE EITHER 'Y' OR 'N'" TO ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-OVERLAY = 12 IF (NCD-PROC OF ICF-BNET NOT = "Y") AND (NCD-PROC OF ICF-BNET NOT = "N") MOVE "BAD" TO VALID-DATA MOVE 11 TO ERR-CDE TURN TEMP SERROR IN B-NCD-PROC IF MOVE-MESSAGE SET NEW-CURSOR AT B-NCD-PROC MOVE "NCD PROCESSING MUST BE EITHER 'Y' OR 'N'" TO ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00749B02 595-CLEAR-DATA MOVE "N" TO ATM-PROC OF ICF-BNET. MOVE "N" TO NCD-PROC OF ICF-BNET. #ENDSCN = SW0C173 !#CMP2.28 02/14/08 BNETDDLS6029 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6029 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6029 * ******************************************************************************** #SCN = SW0C176 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6029 #NEWVERSION = 6030 #ADD 00262D0J * 14FEB2008 swiftd * Symptom: Banknet Release 08.1 Mandates. * Problem: None. * Fix: 1. Changes to FRQST: Added new field to MCC107 * redefine. Added comments to existing field acct-cat * in MCC108 redefine. Added four new fields to the * MCC108 redefine. * 2. Changes to BNRLF: Added 2 new fields to the hdr. * 3. Changes to PATH-RQST: Added 3 new fields to the * MCC108 redefine. * 4. Changes to the BNET-SWI-TKN-DATA token: Updated * version to "09". Added 2 new fields. * 5. Changes to SEM: Added support for 2 new subfields, * 46 and 47, in data element 48. * Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. * Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, * RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. Make the * ILF conversion using ILB0108M. Run the ILF conversion * using ILB0108R. Replace BNETMNWD and BNETUPDT. * Reference: WO #071016-01 #ADD 00680Y28 FRQST * * Customer ID This field is the unique custom number that is * assigned by MasterCard. * Format: right-justified, zero-filled * 06 cust-id pic x(6). #REPLACE 00680Y2I FRQST * Filler added to fill out remaining 930 bytes. #REPLACE 00680Y2K FRQST 06 filler7 pic x(930). #ADD 00680Y2U FRQST * B = Enhanced (U.S. only) or Purchasing Programs (Canadian * commercial/consumer only) * space #DELETE 00680Y2V/00680Y2a FRQST #ADD 00680Y2n FRQST * * Previous Product Code This field will contain the product * code from which the account is migrating. * 06 prev-prod-cde pic x(3). * * Program ID This field is required if the issuer is * registering the account form the MasterCard Enhanced Value * Platform. This field must contain spaces if a program ID * is not provided. * 06 pgm-id pic x(6). * * Customer Specific Index (CSI) This field will contain the * issuer-defined number associated with the CSI to which the * issuer is assigning the account found in Field 1. This * field must contain spaces if a CSI number is not provided. * 06 cust-spcf-idx pic x(7). * * Customer ID This field is the unique custom number that is * assigned by MasterCard. * Format: right-justified, zero-filled * 06 cust-id pic x(6). #REPLACE 00680Y2z FRQST 06 filler8 pic x(936). #ADD 01157a1f SEM * * Card-Level Result (Visa only) * Subfield tag = 46 * Contains the Visa card-level result * 06 crd-lvl-rslt-sub-fld-46. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). * * MasterCard Payment Gateway Transaction Indicator * Subfield tag = 47 * Contains the MasterCard Payment Gateway Transaction Indicator * 06 mc-gtwy-txn-ind-sub-fld-47. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(8). #ADD 02476Y0v ICF-BNET 06 prev-prod-cde pic x(3). 06 pgm-id pic x(6). 06 cust-spcf-idx pic x(7). #REPLACE 02476Y0w ICF-BNET 06 filler8 pic x(57). #ADD 02566a01 BNRLF 04 prev-prod-cde pic x(3). 04 cust-spcf-idx pic x(7). #REPLACE 02566a04 BNRLF 04 filler1 pic x(2). #REPLACE 02760a01 SAF-BNET * Switch token version (ver-id) will be "09". #ADD 02760a07 SAF-BNET 02 crd-lvl-rslt pic x(2). 02 mc-gtwy-txn-ind pic x(8). #ENDSCN = SW0C176 !#CMP2.28 02/14/08 BNETG 6048 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6048 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6048 * ******************************************************************************** #SCN = SW0C177 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6048 #NEWVERSION = 6049 #ADD 00026v0K ! 14FEB2008 swiftd ! Symptom: Banknet Release 08.1 Mandates. ! Problem: None. ! Fix: The value "87" has been added to the list of approval ! values. ! Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. ! Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. Make the ! ILF conversion using ILB0108M. Run the ILF conversion ! using ILB0108R. Replace BNETMNWD and BNETUPDT. ! Reference: WO #071016-01 #ADD 00227k02 x.resp^cde = "85" or x.resp^cde = "87" )#, #DELETE 00227j03 #ENDSCN = SW0C177 !#CMP2.28 02/14/08 BNETLIBS6116 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6116 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6116 * ******************************************************************************** #SCN = SW0C178 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6116 #NEWVERSION = 6117 #ADD 04419P0B ! 14FEB2008 swiftd ! Symptom: Banknet Release 08.1 Mandates. ! Problem: None. ! Fix: 1. New fields Previous Product Code, Program ID and ! Customer Specific Index are mapped from the Path ! Request to the MCC108 redefinition within DE 120 of ! the 0302 message. ! 2. The interface no longer supports the update and ! delete codes for the MCC109 file. ! 3. DEs 37 and 41 are now present in POS 0400 messages ! sent outbound to the network as mandated. ! 4. Support was added for receipt of DE 48 SE 46 in 0110 ! and 0410 messages in acquirer processing and ! receipt of DE 48 SE 47 in 0100 and 0120 messages in ! issuer processing. The values in SE 46 and SE 47 ! within DE 48 will be mapped to new fields in the ! Banknet Switch token. ! 5. The interface will no longer deny trans when ! PSTM.RTE.SRV = "MD" and the Point of Service Entry ! Mode = "07" or "91" in the internal PSTM. ! 6. The interface will convert any extended EBCDIC ! characters to standard EBCDIC characters when ! expanding data elements 42, 43 and 124. A new ! procedure UTIL^FRMT^EXT^EBCDIC^TO^EBCDIC, has been ! added to make these conversions. ! Procs modified: path^frmt^file^rqst ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^acq^xrvsl ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Proc added: util^frmt^ext^ebcdic^to^ebcdic ! Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. ! Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. Make the ! ILF conversion using ILB0108M. Run the ILF conversion ! using ILB0108R. Replace BNETMNWD and BNETUPDT. ! Reference: WO #071016-01 #ADD 05227 PATH^FRMT^FILE^RQST move( sem.file^rec.mcc108.prev^prod^cde, path.frqst.mcc108.prev^prod^cde ); move( sem.file^rec.mcc108.pgm^id, path.frqst.mcc108.pgm^id ); move( sem.file^rec.mcc108.cust^spcf^idx, path.frqst.mcc108.cust^spcf^idx ); #ADD 05251A0Z PATH^FRMT^FILE^RQST if path.frqst.file^updt^cde = file^add^d then #DELETE 05251A0a/05251A0b PATH^FRMT^FILE^RQST #ADD 07372 PSTM^FRMT^0420^TO^ACQ^XRVSL ref^num^bit^d := 1; crd^acpt^term^id^bit^d := 1; #ADD 17169 UTIL^COLLAPSE^SEM if hdr.addl^data.info. crd^lvl^rslt^sub^fld^46 = "46" then begin call ascii^integer( hdr.addl^data.info. crd^lvl^rslt^sub^fld^46. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. crd^lvl^rslt^sub^fld^46.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; if hdr.addl^data.info. mc^gtwy^txn^ind^sub^fld^47 = "47" then begin call ascii^integer( hdr.addl^data.info. mc^gtwy^txn^ind^sub^fld^47. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mc^gtwy^txn^ind^sub^fld^47.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 18532 UTIL^EXPAND^SEM if ptr[ length ] = "46" then begin movl( sem^ptr.addl^data.info. crd^lvl^rslt^sub^fld^46.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else if ptr[ length ] = "47" then begin movl( sem^ptr.addl^data.info. mc^gtwy^txn^ind^sub^fld^47. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 18904 UTIL^EXPAND^SEM ! ! If data element 42, 43, or 124, convert from ! extended EBCDIC to standard EBCDIC prior to ! translating the data from EBCDIC to ASCII. ! if index = 41 or index = 42 or index = 123 then begin call util^frmt^ext^ebcdic^to^ebcdic( sem[ offset ], length ); end; #ADD 19067 UTIL^EXPAND^SETL ?section util^frmt^ext^ebcdic^to^ebcdic ?page " - util^frmt^ext^ebcdic^to^ebcdic" !##################################################################### !# # !# util^frmt^ext^ebcdic^to^ebcdic # !# # !# This procedure will translate a string from extended EBCDIC # !# to standard EBCDIC. # !# # !# INPUT PARAMETERS: # !# src^str - variable length string to be translated # !# lgth - number of bytes to translate # !# # !# OUTPUT PARAMETER: # !# src^str - translated string # !# # !# # !##################################################################### proc util^frmt^ext^ebcdic^to^ebcdic( src^str, lgth ); string .src^str; int lgth; begin string .dest^str; int i := 0; string ext^ebcdic^to^ebcdic[ 0:255 ] = 'p' := [ ! 0 1 2 3 4 5 6 7 !%000! %000, %000, %000, %000, %000, %000, %000, %000, !%010! %000, %000, %000, %000, %000, %000, %000, %000, !%020! %000, %000, %000, %000, %000, %000, %000, %000, !%030! %000, %000, %000, %000, %000, %000, %000, %000, !%040! %000, %000, %000, %000, %000, %000, %000, %000, !%050! %000, %000, %000, %000, %000, %000, %000, %000, !%060! %000, %000, %000, %000, %000, %000, %000, %000, !%070! %000, %000, %000, %000, %000, %000, %000, %000, !%100! %000, %000, %201, %201, %201, %201, %201, %201, !%110! %203, %225, %000, %000, %000, %000, %000, %000, !%120! %000, %205, %205, %205, %205, %211, %211, %211, !%130! %211, %243, %000, %000, %000, %000, %000, %000, !%140! %000, %000, %301, %301, %301, %301, %301, %301, !%150! %303, %325, %000, %000, %000, %000, %000, %000, !%160! %226, %305, %305, %305, %305, %311, %311, %311, !%170! %311, %000, %000, %000, %000, %000, %000, %000, !%200! %326, %000, %000, %000, %000, %000, %000, %000, !%210! %000, %000, %000, %000, %204, %250, %227, %000, !%220! %000, %000, %000, %000, %000, %000, %000, %000, !%230! %000, %000, %000, %000, %205, %000, %305, %000, !%240! %000, %000, %000, %000, %000, %000, %000, %000, !%250! %000, %000, %000, %000, %304, %000, %327, %000, !%260! %000, %000, %000, %000, %000, %000, %000, %000, !%270! %000, %000, %350, %000, %000, %000, %000, %247, !%300! %000, %000, %000, %000, %000, %000, %000, %000, !%310! %000, %000, %000, %226, %226, %226, %226, %226, !%320! %000, %000, %000, %000, %000, %000, %000, %000, !%330! %000, %000, %000, %244, %244, %244, %244, %250, !%340! %000, %141, %000, %000, %000, %000, %000, %000, !%350! %000, %000, %000, %326, %326, %326, %326, %326, !%360! %000, %000, %000, %000, %000, %000, %000, %000, !%370! %000, %000, %000, %344, %344, %344, %344, %000]; movl( dest^str, src^str, lgth ); for i := 0 to lgth '-' 1 do begin dest^str[ i ] := ext^ebcdic^to^ebcdic[ dest^str[ i ] ]; if dest^str[ i ] = 0 then begin dest^str[ i ] := src^str[ i ]; end; end; ! for movl( src^str, dest^str, lgth ); end; #REPLACE 24997A01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "09"; #ADD 25134 UTIL^SWI^TKN^INIT if sem.addl^data.info. crd^lvl^rslt^sub^fld^46.tag = "46" then begin movl( bnet^tkn^buf.crd^lvl^rslt, sem.addl^data.info.crd^lvl^rslt^sub^fld^46. tag^data, $len( bnet^tkn^buf.crd^lvl^rslt ) ); end; if sem.addl^data.info. mc^gtwy^txn^ind^sub^fld^47.tag = "47" then begin movl( bnet^tkn^buf.mc^gtwy^txn^ind, sem.addl^data.info.mc^gtwy^txn^ind^sub^fld^47. tag^data, $len( bnet^tkn^buf.mc^gtwy^txn^ind ) ); end; #ADD 25404A0O UTIL^SWI^TKN^UPDT if bnet^tkn^buf.crd^lvl^rslt <> blanks for $len( bnet^tkn^buf.crd^lvl^rslt ) then begin movl( bnet^tkn.crd^lvl^rslt , bnet^tkn^buf.crd^lvl^rslt , $len( bnet^tkn.crd^lvl^rslt ) ); end; ! of if bnet^tkn^buf.crd^lvl^rslt if bnet^tkn^buf.mc^gtwy^txn^ind <> blanks for $len( bnet^tkn^buf.mc^gtwy^txn^ind ) then begin movl( bnet^tkn.mc^gtwy^txn^ind , bnet^tkn^buf.mc^gtwy^txn^ind , $len( bnet^tkn.mc^gtwy^txn^ind ) ); end; ! of if bnet^tkn^buf.mc^gtwy^txn^ind #ENDSCN = SW0C178 !#CMP2.28 02/14/08 BNETS 6093 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6093 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6093 * ******************************************************************************** #SCN = SW0C179 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H000260M ! 14FEB2008 swiftd ! Symptom: Banknet Release 08.1 Mandates. ! Problem: None. ! Fix: Upon receipt of the 0312 message, the interface will ! map the Previous Product Code, Program ID, Customer ! Specific Index and Customer ID fields from the ! MCC108 redefinition within FRQST to their ! corresponding new fields in the BNRLF. ! The interface will also map the Customer ID field from ! the MCC107 redefinition within FRQST to its ! corresponding field in the BNRLF. ! Proc modified: sem^file^request^response ! Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. ! Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, ! RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. Make the ! ILF conversion using ILB0108M. Run the ILF conversion ! using ILB0108R. Replace BNETMNWD and BNETUPDT. ! Reference: WO #071016-01 #ADD D060991z SEM^FILE^REQUEST^RESPONSE move( bnrlf.mcc.cust^id, frqst.file^rec.mcc107.cust^id ); #ADD D060992E SEM^FILE^REQUEST^RESPONSE move( bnrlf.mcc.prev^prod^cde, frqst.file^rec.mcc108.prev^prod^cde ); move( bnrlf.mcc.prog^id, frqst.file^rec.mcc108.pgm^id ); move( bnrlf.mcc.cust^spcf^idx, frqst.file^rec.mcc108.cust^spcf^idx ); move( bnrlf.mcc.cust^id, frqst.file^rec.mcc108.cust^id ); #ENDSCN = SW0C179 !#CMP2.28 02/14/08 RQBNRLFS6022 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6022 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6022 * ******************************************************************************** #SCN = SW0C180 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6022 #NEWVERSION = 6023 #ADD 00018V0U * 14FEB2008 swiftd * Symptom: Banknet Release 08.1 Mandates. * Problem: None. * Fix: 1. Modified data checks for ACCOUNT CATEGORY * field on the MCC108 screen. * 2. The update and delete functions have been * removed from the MCC109 data entry screen. * A new help screen has been added for MCC109. * Modified paragraphs: 200-ACCEPT-SCREEN * 200-ACCEPT-SCREEN-OVERLAY-16 * 200-GET-DATA * 480-DATA-CHECK * 570-DISPLAY-OVERLAY-16 * Added paragraphs : 200-ACCEPT-SCREEN-OVERLAY-53 * 581-KEYS-DISPLAYED * Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. * Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, * RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. * Make the ILF conversion using ILB0108M. * Run the ILF conversion using ILB0108R. Replace * BNETMAN and BNETUPDT. * Reference: WO #071016-01. #ADD 00173S0D DATA DIVISION COPY SC-HELP109 OF =SWBNET_SCNBRLFO. #DELETE 00290U09/00290U0H 200-GET-DATA #ADD 00290U0I 200-GET-DATA 990-INVALID-MENU-KEY , #ADD 00290U0I 200-GET-DATA 800-GO-TO-SCREEN , #ADD 00290U0I 200-GET-DATA 895-CLEAR-DATA , #ADD 00290U0I 200-GET-DATA 800-GO-TO-PERUSAL , #ADD 00290U0I 200-GET-DATA 800-FILE-REQ-PAGE-BACK , #ADD 00290U0I 200-GET-DATA 581-KEYS-DISPLAYED , #ADD 00290U0I 200-GET-DATA 295-CHANGE-LOGICAL-NET , #ADD 00290U0I 200-GET-DATA 800-EXIT , #ADD 00290U0I 200-GET-DATA 990-INVALID-MENU-KEY , #ADD 00319S02 200-ACCEPT-SCREEN ELSE IF WS-OVERLAY = 53 PERFORM 200-ACCEPT-SCREEN-OVERLAY-53 #ADD 00360U08 200-ACCEPT-SCREEN-OVERLAY-17 #ADD 00384S06 200-ACCEPT-SCREEN-OVERLAY-52 200-ACCEPT-SCREEN-OVERLAY-53. ACCEPT SC-MAIN, OVERLAY-53 UNTIL ( ENTER-KEY, FKEY2 THRU FKEY9, FKEY11 THRU FKEY15, SFKEY1 THRU SFKEY8, SFKEY15 ), PRINT-KEY, EXIT-KEY, ESCAPE ( LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #DELETE 00715S3e/00715S44 480-DATA-CHECK #REPLACE 00715SN2/00715SN2 OFFSET 0 480-DATA-CHECK ( ACCT-CAT OF MCC108 OF PATH-RQST NOT = "B" AND ACCT-CAT OF MCC108 OF PATH-RQST NOT = SPACES ) #DELETE 00715SN3/00715SN7 480-DATA-CHECK #ADD 00715SNB 480-DATA-CHECK MOVE "ACCOUNT CATEGORY MUST BE 'B' OR SPACES" #DELETE 00715SNC 480-DATA-CHECK #REPLACE 00715SND 480-DATA-CHECK TO ERR-TXT #ADD 01200U02 570-DISPLAY-OVERLAY-16 MOVE "F1-ENTER F2-READ F3-ADD F12-HELP F16-EXIT" TO WS-VARIABLE-INSTRUCTIONS. #DELETE 01200U03/01200U04 570-DISPLAY-OVERLAY-16 #ADD 01260 580-KEYS-DISPLAYED 581-KEYS-DISPLAYED. MOVE WS-OVERLAY TO SAVE-OVERLAY. MOVE 53 TO WS-OVERLAY. MOVE "ANY FUNCTION KEY EXCEPT SF9-SF16, F10, OR F16 RETURNS. F10 PRI - "NTS AND RETURNS" TO WS-VARIABLE-INSTRUCTIONS. ?IF 1 MOVE "ANY FUNCTION KEY EXCEPT PF10, PF16, PA2 RETURNS. PF10 PRINTS A - "ND RETURNS" TO WS-VARIABLE-INSTRUCTIONS. ?ENDIF 1 TURN PROTECTED IN SC-DATA. DISPLAY OVERLAY OVERLAY-53 AT OVERLAY-AREA. DISPLAY OVERLAY-53. PERFORM 581-SPACE-ZERO-DISPLAY. PERFORM 200-ACCEPT-SCREEN. PERFORM ONE OF 581-RETURN-OVERLAY , 900-PRINT-SCREEN-RETURN , 800-EXIT , 800-QUIT , DEPENDING ON TERMINATION-STATUS. #ENDSCN = SW0C180 !#CMP2.28 02/14/08 SVBNRLFS6013 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.SVBNRLFS SVBNRLFS 6013 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.SVBNRLFS SVBNRLFS 6013 * ******************************************************************************** #SCN = SW0C182 , FILEID = SVBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = SVBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6013 #NEWVERSION = 6014 #ADD 00005M0H * 14FEB2008 swiftd * Symptom: Banknet Release 08.1 Mandates. * Problem: None. * Fix: Support has been added for the new fields * Previous Product Code, Program ID and Customer * Specific Index in the WS-MCC redefinition of * WS-BRLF-TXT. * Modified: WORKING-STORAGE * Dependency: New files: ILB0108M, ILB0108R, and ILB0108S. * Apply fixes to BNETDDLS, BNETG, BNETLIBS, BNETS, * RQBNRLFS, SCRNBRLF and SVBNRLFS. Run Make. * Make the ILF conversion using ILB0108M. * Run the ILF conversion using ILB0108R. Replace * BNETMAN and BNETUPDT. * Reference: WO #071016-01. #REPLACE 00194 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00214J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00214J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00247 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00267J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00267J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00300 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00320J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00320J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00353 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00373J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00373J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00406 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00426J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00426J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00459 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00479J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00479J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00512 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00532J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00532J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00565 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00585J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00585J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00618 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00638J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00638J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #REPLACE 00671 DATA DIVISION 03 WS-CUST-ID PIC X(6). #ADD 00691J03 DATA DIVISION 03 WS-PREV-PROD-CDE PIC X(3). 03 WS-PROG-ID PIC X(6). 03 WS-CUST-SPCF-IDX PIC X(7). #REPLACE 00691J06 DATA DIVISION 03 WS-FILLER1 PIC X(117). #ENDSCN = SW0C182 !#CMP2.28 02/22/08 BNETLIBS6117 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6117 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6117 * ******************************************************************************** #SCN = SW0C203 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6117 #NEWVERSION = 6118 #ADD 04419Q0e ! 22FEB2008 swiftd ! Symptom: Trans being denied in cases where PSTM.RTE.SRV = "MD" ! and the Point of Service Entry Mode = "07" or "91" in ! the internal PSTM. (See fix #5 in the history section ! above 14FEB2008) ! Problem: The code contolling this behavior was initially removed ! in the fix above (14FEB2008), and then accidentally ! reinstated during a subsequent code merge. ! Fix: Removed the lines of code that had been accidentally ! reapplied. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make ! Reference: Case #457185 #DELETE 04419N1Z #DELETE 05716N00/05741N02 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0C203 !#CMP2.28 02/26/08 BNETS 6094 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6094 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6094 * ******************************************************************************** #SCN = SW0C215 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD I000260J ! 26FEB2008 bensone ! Symptom: The BNIIF cust-id-ind, options "1" and "3" do not work. ! For acquirers, an external request is sent out but the ! response is dropped when no matching timer record can be ! found. ! Problem: Prikey is used to add the request to the timer table. ! A matching key is built from the response using DE32. ! The formatting routines would set DE32, acquiring inst, ! based on the cust-id-ind, however, the prikey as built ! by util^get^bniif did not include this logic. ! Fix: Move the cust-id-ind from the format routine to proc ! util^get^bniif. Change the format routine to set DE32 ! from the prikey. Remove cust-id-ind as a parameter in ! calls to format routines. ! Procs modified: pstm^0200^request ! pstm^0220^force^post ! pstm^0420^reversal ! Dependency: Apply fix to BNETATMS, BNETLIBS and BNETS. Run Make. ! Reference: Case #457392 #DELETE E0472101 PSTM^0200^REQUEST #ADD E047510D PSTM^0200^REQUEST pstm.acq^inst^id^num, #DELETE E047510E PSTM^0200^REQUEST #ADD E0480800 PSTM^0200^REQUEST avs^typ ) then #DELETE E0480801/E0480802 PSTM^0200^REQUEST #DELETE E0498601 PSTM^0220^FORCE^POST #ADD E049990D PSTM^0220^FORCE^POST pstm.acq^inst^id^num, #DELETE E049990E PSTM^0220^FORCE^POST #ADD E0501100 PSTM^0220^FORCE^POST avs^typ ) then #DELETE E0501101/E0501102 PSTM^0220^FORCE^POST #ADD 05210}0C PSTM^0420^REVERSAL ! avs type !, pstm.acq^inst^id^num, pstm.orig^crncy^cde ); #DELETE 05210}0D PSTM^0420^REVERSAL #REPLACE G0687113 SEM^RESPONSE^NACK resp, late^resp^nack^l ); #REPLACE G0687119 SEM^RESPONSE^NACK resp, late^resp^nack^l ); #REPLACE G068711U SEM^RESPONSE^NACK resp, late^ack^nack^l ); #REPLACE G068711a SEM^RESPONSE^NACK resp, late^ack^nack^l ); #REPLACE G068712W SEM^RESPONSE^NACK^POS int nack^typ; #REPLACE G068712f SEM^RESPONSE^NACK^POS if nack^typ = late^resp^nack^l then #REPLACE G068713T SEM^RESPONSE^NACK^POS if nack^typ = late^ack^nack^l then #ENDSCN = SW0C215 !#CMP2.28 02/26/08 BNETD 6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6001 * ******************************************************************************** #SCN = SW0C216 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6001 #NEWVERSION = 6002 #ADD 00043A0W ! 26FEB2008 bensone ! Symptom: Issues from internal testing. ! Problem: None. ! Fix: Change nack^typ to integer from a string. ! Proc modified: sem^response^nack^atm ! Dependency: Apply fix to BNETATMS, BNETD, BNETG and BNETLIBS. ! Run Make. ! Reference: Case #457392 #REPLACE 00254A2m SEM^RESPONSE^NACK^ATM int nack^typ; #ENDSCN = SW0C216 !#CMP2.28 02/26/08 BNETG 6049 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6049 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6049 * ******************************************************************************** #SCN = SW0C217 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6049 #NEWVERSION = 6050 #ADD 00026w0C ! 26FEB2008 bensone ! Symptom: Issues from internal testing. ! Problem: None. ! Fix: Change late^resp^nack and late^ack^nack from defines to ! literals. ! Dependency: Apply fix to BNETATMS, BNETD, BNETG and BNETLIBS. ! Run Make ! Reference: Case #457392 #DELETE 00175v04/00175v05 #ADD 00363 literal late^resp^nack^l = 1; literal late^ack^nack^l = 2; #ENDSCN = SW0C217 !#CMP2.28 02/26/08 BNETLIBS6118 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6118 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6118 * ******************************************************************************** #SCN = SW0C218 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6118 #NEWVERSION = 6119 #ADD 04419N1b ! 26FEB2008 bensone ! Symptom: The BNIIF cust-id-ind, options "1" and "3" do not work. ! For acquirers, an external request is sent out but the ! response is dropped when no matching timer record can be ! found. ! Problem: Prikey is used to add the request to the timer table. ! A matching key is built from the response using DE32. ! The formatting routines would set DE32, acquiring inst, ! based on the cust-id-ind, however, the prikey as built ! by util^get^bniif did not include this logic. ! Fix: Move the cust-id-ind from the format routine to proc ! util^get^bniif. Change the format routine to set DE32 ! from the prikey. Remove cust-id-ind as a parameter in ! calls to format routines. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! util^get^bniif ! Dependency: Apply fix to BNETATMS, BNETLIBS and BNETS. Run Make. ! Reference: Case #457392 ! 26FEB2008 bensone ! Symptom: Issues from internal testing. ! Problem: None. ! Fix: Proc modified: sem^frmt^nmm^request ! Dependency: Apply fix to BNETATMS, BNETD, BNETG and BNETLIBS. ! Run Make ! Reference: Case #457392 !##################################################################### #ADD 05256 PATH^FRMT^FILE^RQST !##################################################################### !# # !# PSTM^FRMT^0200^TO^XRQST # !# # !# NARRATIVE : THIS PROCEDURE FORMATS A 0200 PSTM TO AN EXTERNAL # !# REQUEST MESSAGE. # !# # !# INPUT PARAMETERS : # !# PSTM : POINTER TO BASE24 INTERNAL POS MESSAGE # !# PRIKEY : POINTER TO THE TRANSACTION PRIMARY KEY # !# AVS^TYP : AVS type for this FIID. # !# # !# OUTPUT PARAMETERS: # !# SEM : POINTER TO BANKNET EXTERNAL MESSAGE # !# # !##################################################################### #DELETE 05257 /05274 PATH^FRMT^FILE^RQST #ADD 05277A00 PSTM^FRMT^0200^TO^XRQST avs^typ ) extensible; #DELETE 05277A01 PSTM^FRMT^0200^TO^XRQST #DELETE 05283A01 PSTM^FRMT^0200^TO^XRQST #DELETE 05548A01/05548A03 PSTM^FRMT^0200^TO^XRQST #DELETE 05550A00/05550A0e PSTM^FRMT^0200^TO^XRQST #ADD 07137 PSTM^FRMT^0210^TO^XRESP !##################################################################### !# # !# PSTM^FRMT^0220^TO^XADVC # !# # !# NARRATIVE : THIS PROCEDURE FORMATS A 0220 PSTM TO AN EXTERNAL # !# ADVICE MESSAGE. # !# # !# INPUT PARAMETERS : # !# PSTM : POINTER TO A BASE24 INTERNAL POS MESSAGE # !# PRIKEY : POINTER TO THE TRANSACTION PRIMARY KEY # !# AVS^TYP : AVS type associated with this FIID # !# # !# OUTPUT PARAMETERS: # !# SEM : POINTER TO A BANKNET EXTERNAL ADVICE # !# # !##################################################################### #DELETE 07138 /07155 PSTM^FRMT^0210^TO^XRESP #ADD 07158A00 PSTM^FRMT^0220^TO^XADV avs^typ ) extensible; #DELETE 07158A01 PSTM^FRMT^0220^TO^XADV #DELETE 07164A01 PSTM^FRMT^0220^TO^XADV #ADD 07171A04 PSTM^FRMT^0220^TO^XADV avs^typ ) then #DELETE 07171A05/07171A06 PSTM^FRMT^0220^TO^XADV #ADD 11290N02 SEM^FRMT^NMM^REQUEST if max^group^lgth^g = 5 then begin movl( sem.pan.num, gsi, max^group^lgth^g ); end else begin movl( sem.pan.num, gsi[ 1 ], 5 ); end; #DELETE 11290N03/11290N0A SEM^FRMT^NMM^REQUEST #ADD 19853 UTIL^GENERATE^APPROVAL^CODE !##################################################################### !# # !# UTIL^GET^BIIF # !# # !# NARRATIVE : THIS PROCEDURE RETRIEVES INFORMATION FROM THE # !# FINANCIAL INSTITUTION TABLE WHICH CONTAINS DATA MAINTAINED # !# IN THE BANKNET INSTITUTION IDENTIFICATION FILE. # !# # !# INPUT PARAMETERS : # !# SEARCH : TABLE IS SEARCHED BY PREFIX, MCI OR FIID # !# FIID : BASE24 FIID # !# GROUP : MCI ID ASSOCIATED WITH FIID # !# PREFIX : PREFIX ASSOCIATED WITH MCI ID # !# CRNCY^CDE : Original Currency Code from the PSTM # !# ACQ^INST^ID : Acquirer Institution ID from the STM/PSTM # !# # !# OUTPUT PARAMETERS: # !# LOGON^ACQ : GROUP LOGON ACQUIRER FLAG # !# LOGON^ISS : GROUP LOGON ISSUER FLAG # !# LOGON^CR : GROUP LOGON CREDIT FLAG # !# LOGON^DB : GROUP LOGON DEBIT FLAG # !# SERVICE^TYP : SERVICE TYPE ASSOCIATED WITH GROUP # !# TRAFFIC^TYP : TRAFFIC TYPE ASSOCIATED WITH GROUP # !# SECURITY : SECURITY CODE ASSOCIATED WITH GROUP # !# PREFIX^LGTH : PREFIX LENGTH ASSOCIATED WITH THE PREFIX # !# AVS^TYP : AVS type associated with this FIID # !# # !##################################################################### #DELETE 19854 /19881 UTIL^GET^BNIIF #REPLACE 19885A01 UTIL^GET^BNIIF prefix, prefix^lgth, avs^typ, acq^inst^id, crncy^cde ) variable; #REPLACE 19887A02 UTIL^GET^BNIIF string .acq^inst^id; #ADD 19909 UTIL^GET^BNIIF ?page "subproc sub^group^get" !################################################################# !# # !# sub^group^get # !# # !# This sub procedure sets the group based on the # !# Customer ID Indicator in the BNIIF. # !# '0' - TERMINAL FIID (default) # !# MCI ID field in BNIIF for the PSTM.TERM^FIID # !# '1' - ACQ INST ID FROM PTD # !# PSTM.ACQ^INST^ID^NUM # !# '2' - CRNCY CDE PER TERM FIID # !# MC CUST ID field with CRNCY CDE that matches # !# PSTM.ORIG^CRNCY^CDE # !# '3' - ACQ INST ID FROM ICFE # !# INSTITUTION ID field in ICFE # !# # !# INPUT PARAMETERS: # !# cust^id^ind - Customer ID Indicator in the BNIIF # !# # !# OUTPUT PARAMETERS: # !# group - 6 byte MasterCard-assigned customer ID number # !# # !# RETURN: # !# # !################################################################# subproc sub^group^get( cust^id^ind, group ); string .ext cust^id^ind; string .group; begin string work^group[ 0:10 ]; fixed inst^f; init( work^group, " ", $occurs( work^group ) ); ! ! CUST ID IND = '0' - TERMINAL FIID (default) ! movl( work^group, bniif^tbl.mci^id, 6 ); ! ! CUST ID IND = '1' - ACQ INST ID FROM PTD ! if cust^id^ind = "1" and $param( acq^inst^id )then begin ! !Right justify n11 into n6, otherwise left justify! ! if not ascii^fixed( acq^inst^id, $occurs( work^group ), inst^f ) or not fixed^ascii( work^group, 6, inst^f) then begin call hiswutil^justify^field( acq^inst^id, $occurs( work^group ), work^group, 6, left^justify^l ); end; end else ! ! CUST ID IND = '2' - CRNCY CDE PER TERM FIID ! if cust^id^ind = "2" and $param( crncy^cde ) then begin idx := -1; ! ! Loop thru the bniif^tbl until a match on ! crncy^cde is found. ! while ( idx := idx + 1 ) < bniif^tbl.mc^cust^id^ctr do begin if bniif^tbl.mc^cust^id[ idx ].crncy^cde = crncy^cde for $len( bniif^tbl.mc^cust^id[ idx ]. crncy^cde ) then begin movl( work^group, bniif^tbl.mc^cust^id[ idx ].num, 6 ); end; end; end; ! ! CUST ID IND = '3' - ACQ INST ID FROM ICFE ! if cust^id^ind = "3" or ( work^group = zeroes for $occurs( work^group ) or work^group = blanks for $occurs( work^group ) ) then begin movl( work^group, pct.inst, 6 ); end; if ( work^group <> zeroes for $occurs( work^group ) and work^group <> blanks for $occurs( work^group ) ) then begin movl( group, work^group, 6 ); end; end; ! of subproc sub^group^get ?page "util^get^bniif" !################################################################# !# # !# This is the main body of PROC util^get^bniif # !# # !################################################################# #ADD 19920A01 UTIL^GET^BNIIF call sub^group^get( bniif^tbl.cust^id^ind, group ); #DELETE 19920A02/19920A0o UTIL^GET^BNIIF #DELETE 19945A01/19945A04 UTIL^GET^BNIIF #ENDSCN = SW0C218 !#CMP2.28 03/17/08 BNETLIBS6119 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6119 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6119 * ******************************************************************************** #SCN = SW0C252 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6119 #NEWVERSION = 6120 #ADD 04419S0R ! 17MAR2008 bracewm ! Symptom: The Purchase Card and Fleet Card Token (C2) is not being ! initialised correctly. ! Problem: When fleet card data is present in the external message, ! the token is added. However, the Card Type field in the ! token is not set. ! Fix: Initialise the Card Type field to indicate a Mastercard ! fleet card (C). ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #458135 #ADD 14128 SEM^FRMT^XRQST^TO^PSTM^0200 movd( purchase^tkn^data.purchase.crd^typ, "C" ); #ENDSCN = SW0C252 !#CMP2.28 04/07/08 BNETLIBS6120 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6120 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6120 * ******************************************************************************** #SCN = SW0C304 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6120 #NEWVERSION = 6121 #ADD 04419T0D ! 04APR2008 swiftd ! Symptom: Issue found during testing. ! Problem: String declaration in util^frmt^ext^ebcdic^to^ebcdic ! was not initialized. This could possibly cause the ! interface to abend when the proc is accessed. ! Fix: Initialized string .dest^str[0:254]. ! Proc modified: util^frmt^ext^ebcdic^to^ebcdic ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #461588 #REPLACE 19067Q0N UTIL^FRMT^EXT^EBCDIC^TO^EBCDIC string .dest^str[0:254]; #ENDSCN = SW0C304 !#CMP2.28 04/10/08 BNETLIBS6121 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6121 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6121 * ******************************************************************************** #SCN = SW0C308 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6121 #NEWVERSION = 6122 #ADD 04419U0A ! 09APR2008 bensone ! Symptom: Customer could not certify with MasterCard. ! Problem: MasterCard wants the PIN Block Format Code of DE 53 to ! be (10=ISO Format 0) in the Authorization Request. ! MasterCard wants the PIN Key Index of DE 53 to be 0003 ! in the issuer GSI logon. ! Fix: DE 53 is only sent when ENHNC-KEY-MGMT is true. ! Added the enhanced key management LCONF parameter ! EKM-PIN-BLOCK-FORMAT to allow customers to set the ! value of the PIN block format in DE 53. ! Added the enhanced key management LCONF parameter ! EKM-ISS-PEK-INDEX to allow customers to set the value ! of the issuer PIN key index in DE 53 for 0800 logons. ! Added the enhanced key management LCONF parameter ! EKM-ACQ-PEK-INDEX to allow customers to set the value ! of the acquirer PIN key index in DE 53 for outbound ! 0100 requests. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^nmm^request ! Dependency: Apply fix to BNETATMS, BNETLIBS, BNETG and BNETS. ! Run Make. Replace BNETMNWD and BNETLOGM. ! Reference: Case #459869 #ADD 06030N06 PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.sec^info.pb^frmt, ekm^pin^blk^frmt^g ); call integer^ascii^( sem.sec^info.pk^idx^num, ekm^acq^pek^idx^g ); #DELETE 06030N07/06030N08 PSTM^FRMT^0200^TO^XRQST #ADD 11217N06 SEM^FRMT^NMM^REQUEST call integer^ascii^( sem.sec^info.pb^frmt, ekm^pin^blk^frmt^g ); call integer^ascii^( sem.sec^info.pk^idx^num, ekm^iss^pek^idx^g ); #DELETE 11217N07/11217N08 SEM^FRMT^NMM^REQUEST #ENDSCN = SW0C308 !#CMP2.28 04/10/08 BNETS 6095 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6095 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6095 * ******************************************************************************** #SCN = SW0C309 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J000260K ! 09APR2008 bensone ! Symptom: Customer could not certify with MasterCard. ! Problem: MasterCard wants the PIN Block Format Code of DE 53 to ! be (10=ISO Format 0) in the Authorization Request. ! MasterCard wants the PIN Key Index of DE 53 to be 0003 ! in the issuer GSI logon. ! Fix: DE 53 is only sent when ENHNC-KEY-MGMT is true. ! Added the enhanced key management LCONF parameter ! EKM-PIN-BLOCK-FORMAT to allow customers to set the ! value of the PIN block format in DE 53. ! Added the enhanced key management LCONF parameter ! EKM-ISS-PEK-INDEX to allow customers to set the value ! of the issuer PIN key index in DE 53 for 0800 logons. ! Added the enhanced key management LCONF parameter ! EKM-ACQ-PEK-INDEX to allow customers to set the value ! of the acquirer PIN key index in DE 53 for outbound ! 0100 requests. ! Procs modified: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! Dependency: Apply fix to BNETATMS, BNETLIBS, BNETG and BNETS. ! Run Make. Replace BNETMNWD and BNETLOGM. ! Reference: Case #459869 #ADD G0259908 CMD^WARMBOOT^STORE^GLOBALS store^d( ekm^acq^pek^idx^g); store^d( ekm^iss^pek^idx^g); store^d( ekm^pin^blk^frmt^g ); #ADD G025990V CMD^WARMBOOT^STORE^GLOBALS ekm^acq^pek^idx^g := 3; ekm^iss^pek^idx^g := 3; ekm^pin^blk^frmt^g := 10; #ADD G025990o CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( ekm^acq^pek^idx^g); retrieve^d( ekm^iss^pek^idx^g); retrieve^d( ekm^pin^blk^frmt^g ); #ADD 03941 INIT^PARAMPROC wlform( inv^ekm^apek, "EKM-ACQ-PEK-INDEX param contains" ',' " invalid data. Default of #### will be used." ) wlform( inv^ekm^ipek, "EKM-ISS-PEK-INDEX param contains" ',' " invalid data. Default of #### will be used." ) wlform( inv^ekm^pb, "EKM-PIN-BLOCK-FORMAT param contains " ',' "invalid data. Default of ## will be used." ) #ADD G0394504 INIT^PARAMPROC "P", "EKM-ACQ-PEK-INDEX ", "P", "EKM-ISS-PEK-INDEX ", "P", "EKM-PIN-BLOCK-FORMAT ", #ADD G039960e INIT^PARAMPROC ! ! EKM-ACQ-PEK-INDEX ! if ( not ferror ) and ( enhnc^key^mgmt^g = true ) then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, ekm^acq^pek^idx^g ) then begin ekm^acq^pek^idx^g := 3; call log^message^( 4032, ! routing code !, @inv^ekm^apek, net.myname, evt^msg^severity^warn^l, ekm^acq^pek^idx^g ); end; end; ! ! EKM-ISS-PEK-INDEX ! if ( not ferror ) and ( enhnc^key^mgmt^g = true ) then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, ekm^iss^pek^idx^g ) then begin ekm^iss^pek^idx^g := 3; call log^message^( 4033, ! routing code !, @inv^ekm^ipek, net.myname, evt^msg^severity^warn^l, ekm^iss^pek^idx^g ); end; end; ! ! EKM-PIN-BLOCK-FORMAT ! if ( not ferror ) and ( enhnc^key^mgmt^g = true ) then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, ekm^pin^blk^frmt^g ) then begin ekm^pin^blk^frmt^g := 10; call log^message^( 4034, ! routing code !, @inv^ekm^pb, net.myname, evt^msg^severity^warn^l, ekm^pin^blk^frmt^g ); end; end; #ENDSCN = SW0C309 !#CMP2.28 04/10/08 BNETG 6050 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6050 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6050 * ******************************************************************************** #SCN = SW0C310 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6050 #NEWVERSION = 6051 #ADD 00026x09 ! 09APR2008 bensone ! Symptom: Customer could not certify with MasterCard. ! Problem: MasterCard wants the PIN Block Format Code of DE 53 to ! be (10=ISO Format 0) in the Authorization Request. ! MasterCard wants the PIN Key Index of DE 53 to be 0003 ! in the issuer GSI logon. ! Fix: DE 53 is only sent when ENHNC-KEY-MGMT is true. ! Added the enhanced key management LCONF parameter ! EKM-PIN-BLOCK-FORMAT to allow customers to set the ! value of the PIN block format in DE 53. ! Added the enhanced key management LCONF parameter ! EKM-ISS-PEK-INDEX to allow customers to set the value ! of the issuer PIN key index in DE 53 for 0800 logons. ! Added the enhanced key management LCONF parameter ! EKM-ACQ-PEK-INDEX to allow customers to set the value ! of the acquirer PIN key index in DE 53 for outbound ! 0100 requests. ! Globals added: ekm^acq^pek^idx^g ! ekm^iss^pek^idx^g ! ekm^pin^blk^frmt^g ! Dependency: Apply fix to BNETATMS, BNETLIBS, BNETG and BNETS. ! Run Make. Replace BNETMNWD and BNETLOGM. ! Reference: Case #459869 #ADD 00448v01 int ekm^acq^pek^idx^g := 3; int ekm^iss^pek^idx^g := 3; int ekm^pin^blk^frmt^g := 10; #ADD 01366v0C int ekm^acq^pek^idx^g; int ekm^iss^pek^idx^g; int ekm^pin^blk^frmt^g; #ENDSCN = SW0C310 !#CMP2.28 04/23/08 BNETS 6096 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6096 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6096 * ******************************************************************************** #SCN = SW0C324 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K000260O ! 23APR2008 wielerk ! Symptom: Interface abends with trap #1000. ! Problem: A late response from MasterCard which does not match ! an existing ILF record, logs just the external message ! portion. A subsequent PSTM 0420 can match on this ILF ! and the dump occurs when attempting to update this ILF. ! Fix: Modified logic to treat the PSTM 0420 as an exception ! if the ILF record has an exception value in the ILF ! substate. ! Procs modified: pstm^0420^reversal ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #462356. #ADD 05222 PSTM^0420^REVERSAL if ilf.substate > 0 then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len(ilf.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! sem lgth !, sub^rvsl^not^found^l ); return; end; #ENDSCN = SW0C324 !#CMP2.28 05/01/08 RQBNETS 6008 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNETS RQBNETS 6008 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNETS RQBNETS 6008 * ******************************************************************************** #SCN = SW0C342 , FILEID = RQBNETS #VOLUME = $ROOK.SW60BNET #FILE = RQBNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00018H0D * 01MAY2008 huac * Symptom: ATM and NCD Processing flags on Screen 12 * are equal to blanks in existing records prior to * Global Authorization Enhancements. * Problem: ATM and NCD Processing flags should be set to * 'N' instead of blanks for existing records. * Fix: Added edit checks to ensure that ATM and NCD * Processing flags set to 'N' for existing * records. * Modified sections: * 400-SAVE-RECORD * 480-DATA-CHECK * Dependency: Apply fix to RQBNETS. Run Make. * Reference: Case #460916. #ADD 00361 400-SAVE-RECORD IF ATM-PROC OF ICF-BNET = " " MOVE "N" TO ATM-PROC OF ICF-BNET. IF NCD-PROC OF ICF-BNET = " " MOVE "N" TO NCD-PROC OF ICF-BNET. #ADD 00629H00 480-DATA-CHECK IF WS-OVERLAY = 12 IF ATM-PROC OF ICF-BNET = " " MOVE "N" TO ATM-PROC OF ICF-BNET. #ADD 00629H0D 480-DATA-CHECK IF WS-OVERLAY = 12 IF NCD-PROC OF ICF-BNET = " " MOVE "N" TO NCD-PROC OF ICF-BNET. #ENDSCN = SW0C342 !#CMP2.28 05/13/08 BNETLIBS6122 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6122 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6122 * ******************************************************************************** #SCN = SW0C358 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6122 #NEWVERSION = 6123 #ADD 04419V0N ! 13MAY2008 frederr ! Symptom: The interface is denying a high number of BASE24 request ! messages with a response code of '069', edit error. ! Problem: An edit check was added to the interface to ensure that ! if DE-61.10 (Cardholder Activated Terminal Level) was a ! "1" (Automated Dispensing Machine with PIN), "2" (Self ! Service Terminal), "3" (Limited Amount Terminal) or "4" ! (In-flight Commerce) that the card was not manually ! entered. This is a MasterCard requirement. This was ! done by checking DE-61.10 for any value other than "0" ! (not a CAT transaction) or "6" (Electronic Commerce). ! A DE-61.10 value of "7" (Transponder Transaction) was ! left off the list and a manually entered card is valid ! for a DE-61.10 value of "7". This is why so many ! transactions were declined. ! Fix: Modified the interface to only deny transactions that ! are manually entered for DE-61.10 values of "1", "2", ! "3" or "4". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #464264. #ADD 06175N00 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "3" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "4" then #DELETE 06175N01/06175N02 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0C358 !#CMP2.28 06/17/08 BNETS 6097 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6097 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6097 * ******************************************************************************** #SCN = SW0C409 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L000260D ! 16JUN2008 engelk ! Symptom: Interface did not permit a logoff to be sent to ! MasterCard when traffic is set to acquirer only in the ! BNIIF. ! Problem: In times past, MasterCard did not allow logons to be ! sent from acquirer only stations. When code was ! modified to allow logons for acquirer only stations, no ! corresponding change was made to allow acquirer only ! stations to send logoff messages. ! Fix: Modified code to remove the acquirer only check which ! precluded the interface from sending logoff messages to ! MasterCard for acquirer only stations. ! Procs modified: init^logoff ! Dependency: Apply fix to BNETS and run Make. ! Reference: Case #468060 #REPLACE 03719T02 SUB^INIT^LOGOFF if pct.options.nmm^enabled then #ENDSCN = SW0C409 !#CMP2.28 06/23/08 BNETS 6098 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6098 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6098 * ******************************************************************************** #SCN = SW0C413 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M000260G ! 20JUN2008 engelk ! Symptom: The interface was sending logon messages in place of ! echotest messages. ! Problem: When MasterCard added echotest messages to their spec, ! the interface was not changed to use the reduced network ! management message for echotests. ! Fix: Modified the code to send a reduced form of the 0800 ! network management message and expect the reduced form ! of the echotest response so that timers could be ! located. ! Procs modified: init^echotest ! sem^echotest^response ! Dependency: Apply fix to BNETS and run Make. ! Reference: Case #464745 #REPLACE 03163 INIT^ECHOTEST i, #DELETE 03163O00/03163O02 INIT^ECHOTEST #REPLACE 03166*01 INIT^ECHOTEST string .group[ 0:5 ] := [ 6 * [" "] ]; #DELETE 03166*02/03168 INIT^ECHOTEST #ADD 03169 SUB^INIT^ECHOTEST int subproc sub^init^echotest( nmm^info^cde, group ); #DELETE 03170 /03171O01 SUB^INIT^ECHOTEST #DELETE 03174 /03176O02 SUB^INIT^ECHOTEST #ADD 03178 SUB^INIT^ECHOTEST int .pbit^map := wordaddr( @sem.pbit^map ), .sbit^map := wordaddr( @sem.sbit^map ); #DELETE 03179+04/03179L07 SUB^INIT^ECHOTEST #ADD 03179L0K SUB^INIT^ECHOTEST ! ! Format echotest message ! init( sem, " ", wlen( nmm^def ) ); movd( sem.typ, sem^nmm^request^d ); call hexchar^binary( sem^0800^pbit^map^g, 16, sem.pbit^map ); call hexchar^binary( sem^0800^sbit^map^g, 16, sem.sbit^map ); pan^bit^d := 1; call integer^ascii^( sem.pan.lgth, 5 ); ! P-2 ! ! ! If the MCI ID is more than 5 bytes long, set the PAN to the ! last five digits of the identifier. ! if max^group^lgth^g = 5 then begin movl( sem.pan.num, group, max^group^lgth^g ); end else begin movl( sem.pan.num, group[ 1 ], 5 ); end; call util^gmt^ascii( sem.tran^dat^tim ); ! P-7 ! call util^increment^trace( sem.trace^num, ! P-11 ! $len( sem.trace^num ) ); call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); movl( sem.fwd^inst.cde, pct.inst, ! P-33 ! max^group^lgth^g ); call integer^ascii^( sem.nmm^info^cde, nmm^echo^l ); ! P-70 ! #DELETE 03179L0L/03183 SUB^INIT^ECHOTEST #DELETE 03207+00/03210O01 SUB^INIT^ECHOTEST #REPLACE 03225 SUB^INIT^ECHOTEST if traffic = acq^l then #REPLACE 03228 /03228 OFFSET 0 SUB^INIT^ECHOTEST for i := 0 to $int( pct.bniif^tbl.ctr - 1d ) do begin if bniif^tbl.logon^acq then begin mov^ ( group, bniif^tbl.mci^id[ 0 ] ); if ( pct.station[ sta^x ].typ = credit^l or pct.station[ sta^x ].typ = both^l ) and bniif^tbl.logon^cr then begin call sub^init^echotest( nmm^echo^l, group ); call usesegment( seg^id ); return; end; if ( pct.station[ sta^x ].typ = debit^l or pct.station[ sta^x ].typ = both^l ) and bniif^tbl.logon^db then begin call sub^init^echotest( nmm^echo^l, group ); call usesegment( seg^id ); return; end; end; ! if logged on as acquirer ! @bniif^tbl :=@bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; ! for loop ! end ! traffic = acq^l ! else if traffic = iss^l then begin @bniif^tbl := pct.bniif^tbl.addr; for i := 0 to $int( pct.bniif^tbl.ctr - 1d ) do begin if bniif^tbl.logon^iss then begin mov^ ( group, bniif^tbl.mci^id[ 0 ] ); if ( pct.station[ sta^x ].typ = credit^l or pct.station[ sta^x ].typ = both^l ) and bniif^tbl.logon^cr then begin call sub^init^echotest( nmm^echo^l, group ); call usesegment( seg^id ); return; end; if ( pct.station[ sta^x ].typ = debit^l or pct.station[ sta^x ].typ = both^l ) and bniif^tbl.logon^db then begin call sub^init^echotest( nmm^echo^l, group ); call usesegment( seg^id ); return; end; end; #DELETE 03229 /03286 SUB^INIT^ECHOTEST #DELETE 05959T0W SEM^ECHOTEST^RESPONSE #REPLACE 05959T0X SEM^ECHOTEST^RESPONSE .timer( timer^def ); #DELETE 05959T0Y SEM^ECHOTEST^RESPONSE #REPLACE 05959*01 SEM^ECHOTEST^RESPONSE .group[ 0:5 ] := [ 6 * [" "] ]; #DELETE 05959*02/05959T18 SEM^ECHOTEST^RESPONSE #REPLACE 05959+01 SEM^ECHOTEST^RESPONSE movl( userbuf.nmm.mci^id, sem.pan.num, #DELETE 05959+03/05959T1G SEM^ECHOTEST^RESPONSE #REPLACE 05959U01 SEM^ECHOTEST^RESPONSE set( userbuf.sta^x, sta^x ); #DELETE 05959T1Z/05959T20 SEM^ECHOTEST^RESPONSE #DELETE 05959T22 SEM^ECHOTEST^RESPONSE #DELETE G0595901/05959T2J SEM^ECHOTEST^RESPONSE #ENDSCN = SW0C413 !#CMP2.28 06/24/08 RQBNIIFS6008 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNIIFS RQBNIIFS 6008 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNIIFS RQBNIIFS 6008 * ******************************************************************************** #SCN = SW0C415 , FILEID = RQBNIIFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNIIFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00017H0N * 23JUN2008 engelk * Symptom: BNIIF screen edits did not allow entry of an AVS * value of "4" (Issuer receives condensed numeric * postal code and condensed numeric address data * only). * Problem: When this new value was added by MasterCard, the * DDLs were updated, but this file was not. * Fix: Modified code to allow entry of an AVS value of * "4". * Modified: 480-DATA-CHECK * Dependency: Apply fixes to SCRNBIIF and RQBNIIFS. Run Make. * Reference: Case #467923 #REPLACE 00420F01 480-DATA-CHECK AND NOT = "3" AND NOT = "4" #REPLACE 00420F06 480-DATA-CHECK MOVE "AVS TYPE MUST BE 0, 1, 2, 3, 4 " #ENDSCN = SW0C415 !#CMP2.28 06/24/08 BNETLIBS6123 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6123 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6123 * ******************************************************************************** #SCN = SW0C416 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6123 #NEWVERSION = 6124 #ADD 04419W0M ! 23JUN2008 engelk ! Symptom: DE-63 (network data) sent in SEM reversal messages. ! Problem: DE-63 was not explicitly turned off when a SEM reversal ! was formatted. It is required in SEM responses, so it ! will remain turned on unless explicitly turned off. ! Fix: Added code to turn off DE-63 in SEM reversal messages. ! Procs modified: sem^frmt^xresp^to^sem^xrvsl ! pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fixes to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #468590 #ADD 07354 PSTM^FRMT^0420^TO^ACQ^XRVSL banknet^data^bit^d := 0; ! P-63 ! #REPLACE 13546N02 SEM^FRMT^XRESP^TO^SEM^XRVSL banknet^data^bit^d := 0; ! P-63 ! #ENDSCN = SW0C416 !#CMP2.28 07/03/08 BNETLIBS6124 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6124 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6124 * ******************************************************************************** #SCN = SW0C424 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6124 #NEWVERSION = 6125 #ADD 04419X0B ! 03JUL2008 wielerk ! Symptom: Process is not sending DE-23 ( crd seq num ) in 0400. ! Problem: DE-23 is sent in chip requests, but not returned in ! responses and logged to the ILF. ! Fix: Added code to save DE-23 from the suspended request in ! the SEM logged to the ILF. Added code to turn on DE-23 ! if field is non-spaces when formatting a 0400. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! pstm^frmt^0420^to^acq^rvsl ! Dependency: Apply fixes to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #469746 #ADD 07372Q03 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.crd^seq^num <> [ $len( sem.crd^seq^num ) * [ " " ] ] then begin ! ! if de-23 was not spaces in the request, send it in the 0400 ! crd^seq^num^bit^d := 1; end; #DELETE 07373 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 12216 SEM^FRMT^XRESP^TO^PSTM^0210 move ( sem.crd^seq^num, rqst.crd^seq^num ); #ENDSCN = SW0C424 !#CMP2.28 07/09/08 BNETLIBS6125 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6125 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6125 * ******************************************************************************** #SCN = SW0C430 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6125 #NEWVERSION = 6126 #ADD 04419Y0C ! 03JUL2008 engelk ! Symptom: 1) DE-48 (additional data) was not returned in a SEM ! 0110 response when SE-42 (electronic commerce ! indicators) was present in the SEM 0100 request. ! 2) DE-48 (additional data) was not returned in a SEM ! 0110 response when SE-80 (PIN Service Code) was ! present in the SEM 0100 request. ! 3) DE-54 (additional amounts) was included in SEM ! responses to purchase with cash back transactions ! with amount type 40 (cash back amount). ! Problem: 1) DE-48, SE-42 must be returned in the response if it ! was present in the original request. No code was ! present which ensured this would happen. ! 2) DE-48, SE-80 must be returned in the response if it ! was present in the original request. There was code ! present to return DE-48 in a SEM response, if that ! SEM response was formatted from an on-time PSTM ! response. However, if the transaction had format ! issues, etc. the SEM response must be formatted ! solely from the SEM request. It was here that ! code was missing to return DE-48 in the response if ! it were present in the SEM request. ! 3) DE-54 must not be included with an amount type of ! 40 (cash back amount) on purchase with cash back ! responses. ! Fix: 1) Added code to turn on DE-48 in the SEM response if ! DE-48, SE-42 was present in the SEM request. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! 2) Added code to turn on DE-48 in the SEM response if ! DE-48, SE-80 was present in the SEM request. ! Procs modified: sem^frmt^xrqst^to^sem^xresp ! 3) Added code to eliminate amount type 40 in DE-54 for ! purchase with cash back transactions. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fixes to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #470153 ! ! 08JUL2008 engelk ! Symptom: DE-48 (additional data), SE-77 (payment transaction ! type indicator) is returned in SEM response messages. ! Problem: DE-48, SE-77 is conditional in authorization and ! reversal requests, but may not be sent in authorization ! responses. ! Fix: Added code to remove DE-48, SE-77 from SEM response ! messages if it was present in the request. ! Procs modified: sem^frmt^xrqst^to^sem^xresp ! pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #470520 #ADD 06482 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag <> " " then begin ! ! This sub-field cannot be returned in SEM responses. ! Its length must be removed from DE-48's length. ! If it is the only sub-field in DE-48, then DE-48 ! must be turned off. ! call ascii^integer^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag, " " ); lgth := lgth - $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); if lgth <= 0 or lgth = $len( sem.addl^data.info.tran^cat^cde ) then begin ! ! Do not send DE-48 if it contains only the ! transaction category code ! ! Code below will turn off DE-48 if its length is ! one (only transaction category code present). ! lgth := $len( sem.addl^data.info.tran^cat^cde ); end; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! if DE-48 subfield 77 #ADD 07111 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin ! ! If DE-48, SE-42 was sent in request, DE-48 must be ! returned in the response ! addl^data^bit^d := 1; end; #ADD 07740 PSTM^FRMT^AMT^TO^SEM^AMT struct de54^info[ 0 :( $occurs( sem.addl^amt.info ) - 1 ) ]; begin struct acct^typ; begin string byte [0:1]; end; struct amt^typ; begin string byte [0:1]; end; struct crncy^cde; begin string byte [0:2]; end; string typ^amt; struct amt; begin string byte [0:11]; end; end; #DELETE 07741 PSTM^FRMT^AMT^TO^SEM^AMT #REPLACE 07754K02 PSTM^FRMT^AMT^TO^SEM^AMT int cnt; #REPLACE 07754A03 PSTM^FRMT^AMT^TO^SEM^AMT int k := 0; #ADD 07962 SUB^CONVERT^AMT if pos^purch^cb^d( pstm ) then begin ! ! remove cash back amount from DE-54 on responses for ! purchase w/cash back transactions ! if addl^amt^bit^d then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); if cnt > $occurs( sem.addl^amt.info ) then begin cnt := $occurs( sem.addl^amt.info ); end; end else begin cnt := 0; end; if cnt <= 1 then begin ! ! Cash back amount is the only amount included. ! Turn off DE-54. ! addl^amt^bit^d := 0; end else begin ! ! Find and eliminate Amount type 40 ! for i := 0 to ( $occurs( sem.addl^amt.info ) - 1 ) do begin init( de54^info[ i ], " ", wlen( de54^info[ i ] ) ); end; ! for loop to initialize temp storage k := 0; for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ <> bnet^amt^typ^cb^d then begin move( de54^info[ k ], sem.addl^amt.info[ i ] ); k := k + 1; end; ! if amount type is not 40 end; ! of amount count for init( sem.addl^amt, " ", $len( sem.addl^amt ) ); for i := 0 to k - 1 do begin move( sem.addl^amt.info[ i ], de54^info[ i ] ); end; ! of for lgth := $len( sem.addl^amt.info ) * k; call integer^ascii^( sem.addl^amt.lgth, lgth ); end; ! multiple amount types end; ! of if addl^amt^bit^d end; ! if purchase w/cash back #REPLACE 15465 SEM^FRMT^XRQST^TO^SEM^XRESP int lgth := 0; #ADD 15474 SEM^FRMT^XRQST^TO^SEM^XRESP if resp.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag <> " " then begin ! ! This sub-field cannot be returned in SEM responses. ! Its length must be removed from DE-48's length. ! If it is the only sub-field in DE-48, then DE-48 ! must be turned off. ! call ascii^integer^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag, " " ); lgth := lgth - $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); if lgth <= 0 or lgth = $len( sem.addl^data.info.tran^cat^cde ) then begin ! ! Do not send DE-48 if it contains only the ! transaction category code ! lgth := $len( sem.addl^data.info.tran^cat^cde ); end; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! if DE-48 subfield 77 if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin ! ! If DE-48, SE-42 was sent in request, DE-48 must be ! returned in the response ! send^addl^data := true; end; if resp.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" then ! ! Pinned POS transaction response - send field 48 ! begin send^addl^data := true; end; #ENDSCN = SW0C430 !#CMP2.28 07/16/08 BNETLIBS6126 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6126 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6126 * ******************************************************************************** #SCN = SW0C435 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6126 #NEWVERSION = 6127 #ADD 04419Z0p ! 15JUL2008 engelk ! Symptom: DE-48 (additional data) was not returned in a SEM 0110 ! response when SE-71 (on-behalf services) was present in ! the SEM 0100 request. ! Problem: DE-48, SE-71 must be returned in the response if it was ! present in the original request. If the transaction had ! format issues, etc. where the response must be formatted ! solely from the SEM request, no code was present to ! ensure this field was present in the SEM response if it ! was present in the SEM request. ! Fix: Added code to turn on DE-48 in the SEM response if ! DE-48, SE-71 was present in the SEM request. ! Procs modified: sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fixes to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #470869 #ADD 15474Z0a SEM^FRMT^XRQST^TO^SEM^XRESP if addl^data^bit^d and resp.addl^data.info.on^behalf^svc^sub^fld^71.tag = "71" then begin ! ! If on^behalf^svc^sub^fld^71 data was sent in the request, ! DE-48 must be sent back in the response ! send^addl^data := true; end; #ENDSCN = SW0C435 !#CMP2.28 07/28/08 BNETLIBS6127 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6127 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6127 * ******************************************************************************** #SCN = SW0C454 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6127 #NEWVERSION = 6128 #ADD 04419a0G ! 28JUL2008 engelk ! Symptom: DE-54 (additional amounts) was included in SEM responses ! to purchase with cash back transactions with a length ! of zero. ! Problem: DE-54 must not be included with an amount type of 40 ! (cash back amount) on purchase with cash back responses. ! MasterCard can send more than one instance of a given ! amount type in DE-54. These two instances allow for ! these amounts to be reflected in the issuer's and the ! acquirer's currencies. However, the code did not check ! for instances where two amount type 40s were present to ! turn DE-54 off. It would only turn DE-54 off if the ! only amount type present was 40 (cash back amount) and ! only one occurrence of this amount type were present. ! Fix: Added code to allow for two occurrences of the cash back ! amount in purchase with cash back responses and turn off ! bit 54 if no valid amount types exist to send in DE-54. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #470153 #ADD 07962Z0v SUB^CONVERT^AMT if k > 0 then begin for i := 0 to k - 1 do begin move( sem.addl^amt.info[ i ], de54^info[ i ] ); end; ! of for lgth := $len( sem.addl^amt.info ) * k; call integer^ascii^( sem.addl^amt.lgth, lgth ); end ! more than cash back amt else begin ! ! no amounts to move back in ! addl^amt^bit^d := 0; end; end; ! multiple amount types #DELETE 07962Z0w/07962Z15 SUB^CONVERT^AMT #ENDSCN = SW0C454 !#CMP2.28 08/11/08 BNETDDLS6030 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6030 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6030 * ******************************************************************************** #SCN = SW0C481 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6030 #NEWVERSION = 6031 #ADD 00262d0L * 11AUG2008 swiftd * Symptom: Banknet Release 08.2 Mandates * Problem: None * Fix: 1. Changes to NMM: Added 6 new DE 70 values for sign-on * and sign-off. * 2. Changes to SEM: Added several new values to * subelements of DE 48. Added two new definitions to * DE 124 in support of Moneysend transactions. Added * a new definition to DE 112 in support of UK Domestic * Maestro Processing. * 3. Changes to PCT-BNET: Added three new fields to * "options". * 4. Changes to ICF-BNET: Added support for alternate * issuer host. * 5. Changes to bnet-swi-tkn-data: Added support for * Virtual Pan, MasterCard assigned ID, Routing * Indicator and Visa Market-Specific Data Identifier. * Dependency: Apply fixes to BATKNCVS, BATKNID, BNETATMS, BNETDDLS, * BNETEMVS, BNETG, BNETLIBS, BNETS, COBTKN, DDLBATKN, * and DDLPSTKN. Run Make. Replace BNETLOGM, BNETUPDT, and * BNETMNWD. * Reference: WO #080401-02 #ADD 00406 NMM * 063 = group sign on alternate issuer route * 064 = group sign off alternate issuer route * 065 = prefix sign-on by gsi for primary issuer route * 066 = prefix sign-off by gsi for primary issuer route * 067 = prefix sign-on by gsi for alternate issuer route * 068 = prefix sign-off by gsi for alternate issuer route #ADD 01157a05 SEM * 17 - inControl Mapping and Spend Control Service #ADD 01157a0U SEM * 4 = Transaction was submitted as real-time substantiated but * from a non-IIAS certified merchant #REPLACE 01157Y09 SEM * PAN Mapping Information #ADD 01157d0J SEM * * Routing Indicator * Subfield tag = 12 * Contains the Routing Indicator * 06 rte-ind-sub-fld-12. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. * * Mastercard Assigned ID * Subfield tag = 32 * Contains the Mastercard Assigned ID value * 06 mc-asgn-id-sub-fld-32. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(6). #REPLACE 01157Y0e SEM 04 user-fld pic x(20). #ADD 01403M0C SEM * * Format for sender identification data. * 04 sender redefines info. 06 unique-ref-num pic x(19). 06 nam pic x(24). 06 addr pic x(91). 06 phn-num pic x(20). 06 msg pic x(45). * * Format for recipient identification data. * 04 rcv redefines info. 06 unique-ref-num pic x(19). 06 nam pic x(24). 06 addr pic x(91). 06 phn-num pic x(20). 06 msg pic x(45). #ADD 01411b9s SEM 04 ukdm redefines info. 06 rsn-onl-cde-sub-fld-1. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data pic x(2). 06 rtlr-clas-cde-sub-fld-2. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data pic x(4). 06 user-fld-aci pic x(82). #ADD 02108 PCT-BNET 04 alt-host type binary 16. 04 processing-mde pic x. 04 mult-crncy pic x. #ADD 02323c09 ICF-BNET * * Issuers that use an alternate issuer host instead of the Stand-In * System as their alternate authorization route must use the correct * Network Management Information Code to sign on and sign off their * alternate route. This field specifies when the Banknet interface * is the alternate issuer route. * * Valid values: * * "Y" - Sign on and off as the alternate host. * "N" - Sign on and off as the primary host (default). * 02 alt-host pic x. #REPLACE 02760d01 SAF-BNET * Switch token version (ver-id) will be "10". #REPLACE 02760D0A SAF-BNET 02 ver-id pic x(2). #ADD 02760d05 SAF-BNET 02 mc-asgn-id-sub-fld-32 pic x(6). 02 vpan pic x(19). 02 rte-ind pic x. 02 visa-mkt-spcfc-data pic x. #DELETE 02760Y0E/02760Y0F SAF-BNET #ENDSCN = SW0C481 !#CMP2.28 08/11/08 BNETG 6051 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6051 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6051 * ******************************************************************************** #SCN = SW0C482 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6051 #NEWVERSION = 6052 #ADD 00026y0O ! 11AUG2008 swiftd ! Symptom: Banknet Release 08.2 Mandates ! Problem: None. ! Fix: Two new tokens sourced in from baddltal; p2p^txn2^tkn ! and pos^bal^tkn. New defines for uk^domestic^maestro^d ! and nmm^prfx^by^gsi^d. Six new literals added in support ! of new sign-on/sign-off, and three new global variables ! in support of private label processing and MoneySend ! transactions. ! Dependency: Apply fixes to BATKNCVS, BATKNID, BNETATMS, BNETDDLS, ! BNETEMVS, BNETG, BNETLIBS, BNETS, COBTKN, DDLBATKN, ! DDLFSTF, DDLPSTKN, RQBNETS, SCRNBNET, AND SCRNSTF. ! Run Make. Replace BNETLOGM, BNETUPDT, and BNETMNWD. ! Reference: WO #080401-02 #ADD 00026v0b ? p2p^txn2^tkn #ADD 00026v0c ? pos^bal^tkn #ADD 00026v0p ! p2p^txn2^tkn #ADD 00026v0q ! pos^bal^tkn #ADD 00191 host^orig^d = "5"#, #ADD 00193 #ADD 00226i07 define resp^iss^unavail^sem^d = "91"#; #ADD 00233v0B define uk^domestic^maestro^d = pct.options.processing^mde = "D"#; define sem^moneysend^d ( x ) = ( x.proc^cde = sem^pmnt^txn^d and ( x.merch^typ = "6536" or x.merch^typ = "6537" ) and ( x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C07" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C08" ) ) #; define nmm^prfx^by^gsi^d( x ) = ( x = nmm^logon^prefix^gsi^l or x = nmm^logoff^prefix^gsi^l or x = nmm^logon^prefix^alt^l or x = nmm^logoff^prefix^alt^l )#; #ADD 00281 nmm^logon^group^alt^l = 063, nmm^logoff^group^alt^l = 064, nmm^logon^prefix^gsi^l = 065, nmm^logoff^prefix^gsi^l = 066, nmm^logon^prefix^alt^l = 067, nmm^logoff^prefix^alt^l = 068, #ADD 00448v0G int prvt^label^uses^de48se32^g := false; int process^moneysend^txn^g := false; int moneysend^txn^g := false; #ADD 01366v0P int prvt^label^uses^de48se32^g; int process^moneysend^txn^g; #ENDSCN = SW0C482 !#CMP2.28 08/11/08 BNETLIBS6128 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6128 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6128 * ******************************************************************************** #SCN = SW0C483 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6128 #NEWVERSION = 6129 #ADD 04419b0L ! 11AUG2008 swiftd ! Symptom: Confusion over which currency code value should be used ! in transactions involving more than one currency. ! Problem: In incoming messages from international interchanges, ! amounts are often represented in more than one currency, ! but the currency used internally by BASE24 is not ! necessarily consistent between interchanges. ! It has been agreed that the cardholder billing currency ! should override everything else. The cardholder billing ! currency should be checked first, followed by the ! settlement currency, followed by the transaction ! currency. ! Fix: In procedure sem^frmt^amt^to^pstm^amt the order of ! checking for which currency code to use in the internal ! message was modified to follow the above rules. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #461726 ! 11AUG2008 bensone/swiftd ! Symptom: Warmbooting Banknet Sessions ! Problem: The Banknet interface does not use function management ! messages from XPNET to modify the "up" state of a ! station. Instead they are used to send "echo tests" ! which are in reality, "logon" messages. In the above ! situation, the station is only marked "down" when XPNET ! returns a failed sent message. The station is only ! marked "up" when a response is received. This can cause ! a delay between the time a Start/Stop Station is issued ! and the station actually marks up/down. There are ! timing and configuration scenarios where the Start/Stop ! Station commands do not cause the station to be marked ! up or down. ! Fix: The edit to check if the interface is logged on has ! been enhanced to include a check of the logon states in ! the BNIIF for the prefixes, groups or GSI assigned to ! the process. ! ! The interface will be considered "inactive" if either: ! all the stations are marked down ! or ! all the entities in the BNIIF for the process are ! logged off. ! ! This will allow most customers to warmboot station name ! changes by: ! "logoff" the interface ! Warmboot the process ! "logon" the interface if necessary ! ! Customers using enhanced session management can ! "deactivate" all the stations with a single command ! Warmboot the process ! "activate" all the stations with a single command ! ! Procs added: util^intf^actv ! util^set^group^logon ! Procs modified: cmd^warmboot ! init^logoff ! init^logon ! sem^echotest^response ! sem^logon^response^group ! Dependency: Apply fix to BNETLIBS and BNETS. Run Make. ! Replace BNETLOGM. ! Reference: Case #463747 - Warmbooting Banknet Sessions ! 11AUG2008 swiftd ! Symptom: Incorrect mapping of extended EBCDIC to EBCDIC ! Problem: Banknet had a mistake in their table. This should have ! been corrected in the April 2008 CIS doc. ! Fix: Made change to BNET Extended EBCDIC translation table to ! correct Banknet's error ! Proc modified: util^frmt^ext^ebcdic^to^ebcdic ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #458348 ! 11AUG2008 swiftd ! Symptom: FAILURE on READ, File SNF, Error 1 (end-of-file) ! Problem: Above error was displayed if customer did not have ! an SNF record configured for an interface, even though ! processing continued. ! Fix: Enhanced error handling so the above error message was ! not displayed in this situation. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #461669 ! 11AUG2008 bensone ! Symptom: MasterCard is rejecting settlement transactions ! from EPS-Net users. BNET users could have the same ! problem. ! Problem: The layout of the Trace-ID in the Interchange ! Compliance Token does not match the layout of the ! Trace ID of DE 63-Transaction Life in GCMS. ! Fix: Move the first 9 bytes of Network Data followed by the ! 4 bytes of Settlement Data followed by 2 spaces. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: NOTE: This fix is contained within the Banknet ! Release 08.2 Mandates. ! Reference: Case #465250 ! 11AUG2008 swiftd ! Symptom: Banknet Release 08.2 Mandates ! Problem: None ! Fix: 1. MasterCard inControl Commercialization: added ! support for new value "V" in DE 48 SE 33, and new ! value "17" in DE 48 SE 71. ! 2. Payment Transaction Processing: added support for ! a new type of cash transfer transaction called ! MoneySend. ! 3. Private Label Processing Enhancements: Added support ! for retrieving the MasterCard Assigned ID from the ! STF for customers that participate in the Private ! Label Merchant Verification Service. ! 4. Revised Test Transaction Standards for Recurring ! Payment Merchants: added support to allow a merchant ! to send a recurring payment request test transaction ! for 1 unit of currency to the issuer to determine ! the account status. DE 61 subfield 7 must contain ! value 4 in recurring payment USD $1 test ! transactions. ! 5. Support for Partial Approvals, Reversal Requests, ! and Account Balance Responses: The interface has been ! updated to support the POS Balance Token (CB) when ! formatting DE 53 in a response back to the network. ! 6. Alternate Issuer Transaction Routing Enhancements: ! The interface has been modified to support new ! DE 48 SE 12 in its issuer processing of ! 0100/Authorization Request messages. The value "A" ! will indicate "Alternate issuer host routing". ! Support has been added for the new Network Management ! Request/0800 message sign-on and sign-off options. ! 7. Banknet Support for UK Domestic Maestro Processing: ! MasterCard is enhancing the Authorization System to ! support the processing of UK Domestic Maestro ! transactions. The interface has been modified to ! support these transactions. ! 8. Healthcare Transaction Processing Enhancements: added ! support for new DE 48 SE 32 (MasterCard assigned ID) ! in both acquirer and issuer. This new data element, ! in addition to the values in existing data elements ! will be used to determine the validity of the ! transaction. ! Dependency: Apply fixes to BATKNCVS, BATKNID, BNETATMS, BNETDDLS, ! BNETEMVS, BNETG, BNETLIBS, BNETS, COBTKN, DDLBATKN, ! DDLFSTF, DDLPSTKN, RQBNETS, SCRNBNET, AND SCRNSTF. ! Run Make. Replace BNETLOGM, BNETUPDT, and BNETMNWD. ! Reference: WO #080401-02 #ADD 05357 PSTM^FRMT^0200^TO^XRQST int found^pos^data1^tkn := false; int tag^lgth := 0; #ADD 05964N09 PSTM^FRMT^0200^TO^XRQST if found^pos^data1^tkn := ( hiswtkn^get^tkn( pstm, tkn^id1, @pos^data1^tkn, pos^data1^tkn^lgth ) ) then begin if pos^data1^tkn.recur^pmnt^ind = "R" then begin pos^data1^recur^pmnt := true; end; if uk^domestic^maestro^d then begin movd( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag, "001" ); call integer^ascii^( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.lgth, $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1. tag^data ) ); init( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data, " ", $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data ) ); movd( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag, "002" ); call integer^ascii^( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.lgth, $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2. tag^data ) ); init( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data, "0", $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data ) ); if pos^data1^tkn.retl^class^cde <> blanks for $len( pos^data1^tkn.retl^class^cde ) then begin move ( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data, pos^data1^tkn.retl^class^cde ); end; tag^lgth := $len( sem.adnl^data^natl. ukdm.rsn^onl^cde^sub^fld^1 ) + $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2 ); call integer^ascii^( sem.adnl^data^natl.lgth, tag^lgth ); adnl^data^ntl^bit^d := 1; end; ! uk^domestic^maestro^d #DELETE 05964N0A/05964N0G PSTM^FRMT^0200^TO^XRQST #ADD 05964N0w PSTM^FRMT^0200^TO^XRQST ! ! 'Test' recurring payment transaction will have a value of ! 1 dollar. If a transaction comes in with a value of $1, it ! will be assumed to be a test, and DE 61 Subfield 7 will ! have the value 4 moved into it. ! if pstm.tran.amt^1 = 100f then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end; ! recurring #ADD 06392 PSTM^FRMT^0210^TO^XRESP int .p2p^txn2^tkn( p2p^txn2^tkn^def ); int p2p^txn2^tkn^lgth := 0; #ADD 06985 PSTM^FRMT^0210^TO^XRESP if sem^moneysend^d( sem ) and pstm.responder = host^orig^d then begin tkn^id ':=' p2p^txn2^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^tkn, p2p^txn2^tkn^lgth ) then begin init( sem.mbr^def, " ", $len( sem.mbr^def ) ); move( sem.mbr^def.rcv.unique^ref^num, p2p^txn2^tkn.mc.rcv.unique^ref^num ); move( sem.mbr^def.rcv.nam, p2p^txn2^tkn.mc.rcv.nam ); move( sem.mbr^def.rcv.addr, p2p^txn2^tkn.mc.rcv.addr ); move( sem.mbr^def.rcv.phn^num, p2p^txn2^tkn.mc.rcv.phn^num ); move( sem.mbr^def.rcv.msg, p2p^txn2^tkn.mc.rcv.msg ); call integer^ascii^( sem.mbr^def.lgth, $len(p2p^txn2^tkn.mc.rcv) ); mbr^def^bit^d := 1; end; end; #ADD 07493 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info.mc^asgn^id^sub^fld^32 .tag = "32" then begin movl( sem.addl^data.info.mc^asgn^id^sub^fld^32, orig^sem.addl^data.info.mc^asgn^id^sub^fld^32, $len( sem.addl^data.info.mc^asgn^id^sub^fld^32 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.mc^asgn^id^sub^fld^32 ); end; #ADD 07634 PSTM^FRMT^0420^TO^XRVSL adnl^data^ntl^bit^d := 0; #ADD 07754 PSTM^FRMT^AMT^TO^SEM^AMT int .pos^bal^tkn( pos^bal^tkn^def ); int pos^bal^tkn^lgth := 0; #REPLACE 07962 /07962 OFFSET 0 SUB^CONVERT^AMT end else begin i := 0; tkn^id ':=' pos^bal^tkn^id^d; if base24^rel^g >= 5 and hiswtkn^get^tkn( pstm, tkn^id, @pos^bal^tkn, pos^bal^tkn^lgth ) and fixed^ascii^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.txn^amt^1 ) then begin addl^amt^bit^d := 1; if pos^bal^tkn.txn^amt^1 < 0f then begin movd( sem.addl^amt.info[ i ].typ^amt, "D" ); end else begin movd( sem.addl^amt.info[ i ].typ^amt, "C" ); end; if pstm.tran.tran^cde.aa = "01" then begin movd( sem.addl^amt.info[ i ].acct^typ, "20" ); end else if pstm.tran.tran^cde.aa = "11" then begin movd( sem.addl^amt.info[ i ].acct^typ, "10" ); end else if pstm.tran.tran^cde.aa = "31" then begin movd( sem.addl^amt.info[ i ].acct^typ, "30" ); end else begin movd( sem.addl^amt.info[ i ].acct^typ, "40" ); end; movd( sem.addl^amt.info[ i ].amt^typ, "02" ); move( sem.addl^amt.info[ i ].crncy^cde, pos^bal^tkn.txn^crncy^cde ); lgth := ( i + 1 ) * 20; call integer^ascii^( sem.addl^amt.lgth, lgth ); end; end; #DELETE 07962Z00 SUB^CONVERT^AMT #ADD 08301 PSTM^FRMT^RESP^CDE^TO^SEM if sem^moneysend^d( sem ) and pstm.responder <> host^orig^d then begin ! ! BASE24 standin approvals are not allowed on ! MoneySend transactions, so if the pstm.responder ! does not = "5" ( HOST ), decline the transaction. ! movd ( rcode, resp^iss^unavail^sem^d ); end; #ADD 08330 PSTM^FRMT^SEM^ADDL^DATA struct .stf( stf^def ); #REPLACE 08335 PSTM^FRMT^SEM^ADDL^DATA int lgth := 0; #ADD 08493A02 PSTM^FRMT^SEM^ADDL^DATA int auto^substan^txn := false; #ADD 08493A03 PSTM^FRMT^SEM^ADDL^DATA int found^hlthcr^transit^tkn := false; int .hlthcr^transit^tkn( hlthcr^transit^tkn^def ); int hlthcr^transit^tkn^lgth := 0; int i; int lgth^added^for^sub^fld^32 := false; #ADD 08687N02 PSTM^FRMT^SEM^ADDL^DATA if prvt^label^uses^de48se32^g then begin call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if stf.swi^merch.id <> blanks for $len( stf.swi^merch.id ) and stf.swi^merch.id <> zeroes for $len( stf.swi^merch.id ) then begin move( sem.addl^data.info.mc^asgn^id^sub^fld^32. tag^data, stf.swi^merch.id ); movd( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info.mc^asgn^id^sub^fld^32.lgth, "06" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^asgn^id^sub^fld^32 ); call integer^ascii^( sem.addl^data.lgth, lgth ); lgth^added^for^sub^fld^32 := true; end; end; end; #ADD 08687A0E PSTM^FRMT^SEM^ADDL^DATA found^auto^substan^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @auto^substan^data^tkn, auto^substan^data^tkn^lgth ); tkn^id ':=' hlthcr^transit^tkn^id^d; found^hlthcr^transit^tkn := hiswtkn^get^tkn( pstm, tkn^id, @hlthcr^transit^tkn, hlthcr^transit^tkn^lgth ); if found^hlthcr^transit^tkn then begin for i := 0 to ( hlthcr^transit^tkn.num^adnl^amt - 1 ) do begin if hlthcr^transit^tkn.adnl^amt[ i ]. amt^typ <> "4T" then begin set ( auto^substan^txn, true ); end; end; ! for loop init( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data, "0", $len( sem.addl^data.info.mc^asgn^id^sub^fld^32. tag^data ) ); end; if found^auto^substan^data^tkn and ( auto^substan^data^tkn.iias^ind = "1" or auto^substan^data^tkn.iias^ind = "4" ) then begin move( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.iias^ind, auto^substan^data^tkn.iias^ind ); if auto^substan^data^tkn.asgn^id <> blanks for $len( auto^substan^data^tkn.asgn^id ) and auto^substan^data^tkn.asgn^id <> zeroes for $len( auto^substan^data^tkn.asgn^id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, auto^substan^data^tkn.asgn^id ); end; end; if auto^substan^txn and sem.addl^data.info.mc^asgn^id^sub^fld^32. tag^data = zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if visa_tran_g then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, stf.alt^mrch^id ); end else begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, stf.swi^merch.id ); end; if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> blanks for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.iias^ind, "1" ); end; end; ! of util^stf^get end; if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> blanks for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin ! ! if the length has already been calculated in the ! previous step where the prvt^label^uses^de48se32^g ! was processed, do not add it again. ! if lgth^added^for^sub^fld^32 then begin ! don't add the length twice end else begin call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^asgn^id^sub^fld^32 ); call integer^ascii^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, "06" ); end; end; #DELETE 08687A0F/08687A0Q PSTM^FRMT^SEM^ADDL^DATA #ADD 10070 SUB^CONVERT^AMT if sem.iss^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if sem.setl^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin call ascii^fixed^( sem.setl^amt, pstm.tran.amt^1 ); end else if sem.tran^crncy^cde = pct.crncy.in^cde for $len(pct.crncy.in^cde) or sppt^multi^crncy^g then begin call ascii^fixed^( sem.tran^amt, pstm.tran.amt^1 ); end else begin if sem.iss^crncy^cde = "840" then begin ! ! Crd^iss^amt in US dollars. Use crd^iss^amt ! for conversion. ! call ascii^fixed^( sem.crd^iss^amt, tran^amt ); end else if sem.setl^amt <> zeroes for $len ( sem.setl^amt ) and setl^amt^bit^d then begin call ascii^fixed^( sem.setl^amt, tran^amt ); end else if sem.tran^crncy^cde = "840" then begin ! ! Tran^amt in US dollars. Use tran^amt for ! conversion. ! call ascii^fixed^( sem.tran^amt, tran^amt ); end else begin ! ! Conversion not possible. Return false. ! return false; end; if not sub^convert^amt( tran^amt ) then begin return false; end; if pstm.tran.tran^cde <> "22" then begin pstm.tran.amt^1 := tran^amt; end else begin pstm.tran.amt^2 := tran^amt; end; end; end else begin if pstm.tran.tran^cde <> "22" then begin call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^1 ); end else begin call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^2 ); end; end; end; !of if sem.iss^crncy^cde <> pct.crncy.in^cde #DELETE 10071 /10146 SUB^CONVERT^AMT #ADD 11124 SEM^FRMT^NMM^REQUEST int nmm^info^cde^wrk := 0; #ADD 11125N03 SEM^FRMT^NMM^REQUEST string .pan^ptr := 0; #ADD 11154 SEM^FRMT^NMM^REQUEST nmm^info^cde^wrk := nmm^info^cde; if pct.options.alt^host then begin case nmm^info^cde of begin nmm^logon^prefix^l -> begin set ( nmm^info^cde^wrk, nmm^logon^prefix^alt^l ); end; nmm^logoff^prefix^l -> begin set ( nmm^info^cde^wrk, nmm^logoff^prefix^alt^l ); end; nmm^logon^group^l -> begin set ( nmm^info^cde^wrk, nmm^logon^group^alt^l ); end; nmm^logoff^group^l -> begin set ( nmm^info^cde^wrk, nmm^logoff^group^alt^l ); end; otherwise -> ; end; !end-case end !of alt^host else if gsi^used^g and pct.options.logon^typ = nmm^logon^prefix^l then begin case nmm^info^cde of begin nmm^logon^prefix^l -> begin set ( nmm^info^cde^wrk, nmm^logon^prefix^gsi^l ); end; nmm^logoff^prefix^l -> begin set ( nmm^info^cde^wrk, nmm^logoff^prefix^gsi^l ); end; otherwise -> ; end; !end-case end; !of prefix signon by GSI call integer^ascii^( sem.nmm^info^cde, nmm^info^cde^wrk ); #DELETE 11155 SEM^FRMT^NMM^REQUEST #ADD 11223 SEM^FRMT^NMM^REQUEST @pan^ptr := @sem.pan.num; #ADD 11225 SEM^FRMT^NMM^REQUEST sem.pan.num.byte[0] ':=' group for max^group^lgth^g -> @pan^ptr; #DELETE 11226 SEM^FRMT^NMM^REQUEST #ADD 11229 SEM^FRMT^NMM^REQUEST sem.pan.num.byte[0] ':=' group[ 1 ] for 5 -> @pan^ptr; #DELETE 11230 SEM^FRMT^NMM^REQUEST #ADD 11240 SEM^FRMT^NMM^REQUEST prefix^lgth := $min( prefix^lgth, max^prefix^lgth^l ); pan^ptr ':=' prefix for prefix^lgth -> @pan^ptr; prefix^lgth := @pan^ptr '-' @sem.pan.num; call integer^ascii^( sem.pan.lgth, prefix^lgth ); #DELETE 11241 /11244 SEM^FRMT^NMM^REQUEST #ADD 12726 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the auth ! msg followed by DE15 of the auth msg followed by two ! spaces. ! movl( compliance^get^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^get^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); #DELETE 12727 /12741 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12750 SEM^FRMT^XRESP^TO^PSTM^0210 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, compliance^tkn ); ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the auth ! msg followed by DE15 of the auth msg followed by two ! spaces. ! movl( compliance^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); #DELETE 12751 /12773 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13532 SEM^FRMT^XRESP^TO^SEM^XRVSL adnl^data^ntl^bit^d := 0; #ADD 13706 SEM^FRMT^XRQST^TO^PSTM^0200 struct .p2p^txn2^tkn( p2p^txn2^tkn^def ); #ADD 13878E01 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind = "1" or sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind = "4" ) then #DELETE 13878E02/13878E03 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 13878E0E SEM^FRMT^XRQST^TO^PSTM^0200 move( auto^substan^data^tkn.iias^ind, sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind ); if sem.addl^data.info. mc^asgn^id^sub^fld^32.tag = "32" then begin move( auto^substan^data^tkn.asgn^id, sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data ); end; #DELETE 13878E0F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 13941A0v SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C06" then begin ! ! Payment of a Credit Card Balance with cash or check ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "CP" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C07" then begin ! ! MoneySend Person-to-Person ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C7" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C08" then begin ! ! Mobile-Initiated ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C8" ); end else #ADD 13961 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, compliance^tkn ); ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the auth ! msg followed by DE15 of the auth msg followed by two ! spaces. ! movl( compliance^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); #DELETE 13962 /13981 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14230 SEM^FRMT^XRQST^TO^PSTM^0200 ! If this is a recurring payment or UK Domestic Maestro ! transaction, add the POS Data1 token. #DELETE 14231 /14232 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14233 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' pos^data1^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^data1^tkn ); #REPLACE 14237 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14246 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! recurring payment if sem.typ = "0100" and adnl^data^ntl^bit^d and sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag = "002" and sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data <> blanks for $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data ) then begin movl ( pos^data1^tkn.retl^class^cde, sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data, $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data ) ); end; ! uk domestic maestro if pos^data1^tkn <> blanks for $len( pos^data1^tkn ) then begin movd( tkn^id, pos^data1^tkn^id^d ); pos^data1^tkn^lgth := $len( pos^data1^tkn ); tkn^lgth := 0; #DELETE 14247 /14253 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14294 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! pos^data1^tkn <> blanks #DELETE 14295 /14297 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15176 SEM^FRMT^XRQST^TO^PSTM^0200 if mbr^def^bit^d and ! S-124 sem^moneysend^d( sem ) then begin if not process^moneysend^txn^g then begin return resp^tran^not^supp^sem^l; end else begin tkn^id ':=' p2p^txn2^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^txn2^tkn ); movd( p2p^txn2^tkn.frmt^cde, "00" ); move( p2p^txn2^tkn.mc.sender.unique^ref^num, sem.mbr^def.sender.unique^ref^num ); move( p2p^txn2^tkn.mc.sender.nam, sem.mbr^def.sender.nam ); move( p2p^txn2^tkn.mc.sender.addr, sem.mbr^def.sender.addr ); move( p2p^txn2^tkn.mc.sender.phn^num, sem.mbr^def.sender.phn^num ); move( p2p^txn2^tkn.mc.sender.msg, sem.mbr^def.sender.msg ); tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, p2p^txn2^tkn, $len( p2p^txn2^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin call log^message^( 1892, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1891 ); end; ! of if tkn^result end; ! of if process-moneysend-txn = "N" end; #ADD 17001 UTIL^COLLAPSE^SEM if index <> 47 and index <> 111 then begin set( translate^field, true ); end else if index = 47 then ! field 48 ! #DELETE 17002 /17004 UTIL^COLLAPSE^SEM #ADD 17023 UTIL^COLLAPSE^SEM if hdr.addl^data.info. rte^ind^sub^fld^12.tag = "12" then begin call ascii^integer( hdr.addl^data.info. rte^ind^sub^fld^12. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. rte^ind^sub^fld^12.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 17023A0I UTIL^COLLAPSE^SEM if hdr.addl^data.info. mc^asgn^id^sub^fld^32.tag = "32" then begin call ascii^integer( hdr.addl^data.info. mc^asgn^id^sub^fld^32. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mc^asgn^id^sub^fld^32.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 17724 UTIL^COLLAPSE^SEM end ! index = 47 else if index = 111 then ! field 112 begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then ! ! External message is too long. ! begin return ( index + 1 ); end; ptr ':=' sem[ offset ] for $len( hdr.adnl^data^natl.lgth ); call ascii^integer( ptr, 3, t^length ); call translate( ptr, $len( hdr.adnl^data^natl.lgth ), ascii^to^ebcdic^l ); length := 3; @ptr := @ptr + length; if hdr.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag = "001" then begin call ascii^integer( hdr.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1. lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag = "002" then begin call ascii^integer( hdr.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2. lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; set( translate^field, false ); end; ! index = 111 #DELETE 17725 UTIL^COLLAPSE^SEM #REPLACE 17727 UTIL^COLLAPSE^SEM end; ! variable length field ! #ADD 17728 UTIL^COLLAPSE^SEM if index <> 47 and index <> 111 then #DELETE 17729 UTIL^COLLAPSE^SEM #ADD 18455 UTIL^EXPAND^SEM if index <> 47 and index <> 111 then #DELETE 18456 UTIL^EXPAND^SEM #ADD 18478 UTIL^EXPAND^SEM if index = 47 then ! field 48 #ADD 18502A00 UTIL^EXPAND^SEM if ptr[ length ] = "12" then begin movl( sem^ptr.addl^data.info. rte^ind^sub^fld^12.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 18502A08 UTIL^EXPAND^SEM else if ptr[ length ] = "32" then begin movl( sem^ptr.addl^data.info. mc^asgn^id^sub^fld^32.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 18889 UTIL^EXPAND^SEM end ! index = 47 else if index = 111 then ! field 112 begin call translate( ptr, $len( hdr.adnl^data^natl.lgth ), ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for $len( hdr.adnl^data^natl.lgth ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! The SEM has invalid data. ! return ( index + 1 ); end; call translate( ptr[3] , t^length, ebcdic^to^ascii^l ); set ( translate^field, true ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! The SEM has invalid data. ! return ( index + 1 ); end; length := 3; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 3 ], 3, tag^length ); if ptr[ length ] = "001" then begin movl( sem^ptr.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] <> " " then begin bad^lgth := bad^lgth + tag^length + 6; length := length + tag^length + 6; end else begin return ( index + 1 ); end; end; ! ! If this field is greater than 0, an unsupported ! subfield was hit and the length needs to be ! re-set. ! if bad^lgth > 0 then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.addl^data.lgth, t^length ); end; set( translate^field, false ); @ptr := @ptr '+' length; end; ! index = 111 end; ! variable length field if index <> 47 and index <> 111 then ! !already moved data for fields 48 and 112 ! #DELETE 18890 /18893 UTIL^EXPAND^SEM #REPLACE 19067Q0c UTIL^FRMT^EXT^EBCDIC^TO^EBCDIC !%130! %211, %242, %000, %000, %000, %000, %000, %000, #ADD 22471 UTIL^INCREMENT^TRACE ?section util^intf^actv ?page "util^intf^actv" !##################################################################### !# # !# util^intf^actv # !# # !# This procedure determines if the interface is active. # !# The interface is considered active if at least one station is up # !# and at least one entity in the BNIIF is logged on. # !# The interface is considered inactive is all the stations are # !# marked down or all the entities in the BNIIF are logged off. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - when the interface is active # !# False - when the interface is not active # !# # !##################################################################### int proc util^intf^actv; begin int .ext bniif^tbl( fiid^mci^def ); int seg^id; int i; int j; ?page "subproc sub^all^stations^down" !################################################################# !# # !# sub^all^stations^down # !# # !# This sub procedure checks the pct to determine if all of # !# the stations are down. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - when no up stations are found # !# False - when the first up station is found # !# # !################################################################# int subproc sub^all^stations^down; begin for i := 0 to pct.status.num^of^sta - 1 do begin if pct.station[ i ].up then begin return false; end; end; !end-for return true; end; ! of subproc sub^all^stations^down ?page "subproc sub^all^logged^off" !################################################################# !# # !# sub^all^logged^off # !# # !# This sub procedure checks the BNIIF to determine if all # !# applicable entities are logged off. If the interface logons # !# on by group, the group level flags are checked. If the # !# interface logons on by prefix, the prefix level flags are # !# checked. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - when no logged on entities are found # !# False - when the first logged on entity is found # !# # !################################################################# int subproc sub^all^logged^off; begin seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; for i := 0 to $int( pct.bniif^tbl.ctr - 1d ) do begin if pct.options.logon^typ = nmm^logon^group^l then begin if bniif^tbl.logon^acq or bniif^tbl.logon^iss or bniif^tbl.logon^cr or bniif^tbl.logon^db then begin return false; end; end; if pct.options.logon^typ = nmm^logon^prefix^l then begin for j := 0 to ( bniif^tbl.prefix^ctr - 1 ) do begin if bniif^tbl.prefix[ j ].logon^acq or bniif^tbl.prefix[ j ].logon^iss or bniif^tbl.prefix[ j ].logon^cr or bniif^tbl.prefix[ j ].logon^db then begin return false; end; end; !end-for end; @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; !end-for call usesegment( seg^id ); return true; end; ! of subproc sub^all^logged^off ?page "util^intf^actv" !################################################################# !# # !# This is the main body of PROC util^intf^actv # !# # !################################################################# if sub^all^stations^down or sub^all^logged^off then begin return false; end; return true; end; ! of proc util^intf^actv #REPLACE 23945 /23947 UTIL^SET^GROUP^LOGON proc util^set^group^logon( nmm^info^cde, service, traffic ); int nmm^info^cde; int service; int traffic; #ADD 23951 UTIL^SET^GROUP^LOGON wlform( logoffg, "ALL GROUPS Logged OFF as \************ and \***************" ) #ADD 23957 UTIL^SET^GROUP^LOGON int logon^state; #ADD 23977 UTIL^SET^GROUP^LOGON case nmm^info^cde of begin nmm^logon^group^l -> set ( logon^state, true ); nmm^logoff^group^l -> set ( logon^state, false ); otherwise -> set ( logon^state, true ); end; !end-case if logon^state then begin call log^message^( 2760, !routing code!, @logong, net.myname, evt^msg^severity^info^l, @service^typ, @traffic^typ ); end else begin call log^message^( 2761, !routing code!, @logoffg, net.myname, evt^msg^severity^info^l, @service^typ, @traffic^typ ); end; #DELETE 23978 /23980 UTIL^SET^GROUP^LOGON #REPLACE 23987 UTIL^SET^GROUP^LOGON set ( bniif^tbl.logon^acq, logon^state ); #REPLACE 23989 UTIL^SET^GROUP^LOGON set ( bniif^tbl.logon^iss, logon^state ); #REPLACE 23992 UTIL^SET^GROUP^LOGON set ( bniif^tbl.logon^cr, logon^state ); #REPLACE 23994 UTIL^SET^GROUP^LOGON set ( bniif^tbl.logon^db, logon^state ); #REPLACE 24000 UTIL^SET^GROUP^LOGON bniif^tbl.prefix[ j ].logon^acq := logon^state; #REPLACE 24002 UTIL^SET^GROUP^LOGON bniif^tbl.prefix[ j ].logon^iss := logon^state; #REPLACE 24005 UTIL^SET^GROUP^LOGON bniif^tbl.prefix[ j ].logon^cr := logon^state; #REPLACE 24007 UTIL^SET^GROUP^LOGON bniif^tbl.prefix[ j ].logon^db := logon^state; #REPLACE 24997Q01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "10"; #ADD 25126 UTIL^SWI^TKN^INIT if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "V" then begin move( bnet^tkn^buf.vpan, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); end else #ADD 25134Q0G UTIL^SWI^TKN^INIT if sem.addl^data.info.rte^ind^sub^fld^12.tag = "12" then begin move( bnet^tkn^buf.rte^ind, sem.addl^data.info.rte^ind^sub^fld^12.tag^data ); end; if sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96.tag = "96" then begin move( bnet^tkn^buf.visa^mkt^spcfc^data, sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96.tag^data ); end; #DELETE 25134Q0H UTIL^SWI^TKN^INIT #ADD 25136 UTIL^SWI^TKN^INIT if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = "32" then begin move( bnet^tkn^buf.mc^asgn^id^sub^fld^32, sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data ); end; #ADD 25404Q0F UTIL^SWI^TKN^UPDT if bnet^tkn^buf.mc^asgn^id^sub^fld^32 <> blanks for $len( bnet^tkn^buf.mc^asgn^id^sub^fld^32 ) then begin movl( bnet^tkn.mc^asgn^id^sub^fld^32, bnet^tkn^buf.mc^asgn^id^sub^fld^32, $len( bnet^tkn.mc^asgn^id^sub^fld^32 ) ); end; ! of if bnet^tkn^buf.mc^asgn^id^sub^fld^32 if bnet^tkn^buf.vpan <> blanks for $len( bnet^tkn^buf.vpan ) then begin movl( bnet^tkn.vpan, bnet^tkn^buf.vpan, $len( bnet^tkn.vpan ) ); end; ! of if bnet^tkn^buf.vpan if bnet^tkn^buf.rte^ind <> blanks for $len( bnet^tkn^buf.rte^ind ) then begin movl( bnet^tkn.rte^ind, bnet^tkn^buf.rte^ind, $len( bnet^tkn.rte^ind ) ); end; ! of if bnet^tkn^buf.rte^ind if bnet^tkn^buf.visa^mkt^spcfc^data <> blanks for $len( bnet^tkn^buf.visa^mkt^spcfc^data ) then begin movl( bnet^tkn.visa^mkt^spcfc^data, bnet^tkn^buf.visa^mkt^spcfc^data, $len( bnet^tkn.visa^mkt^spcfc^data ) ); end; ! of if bnet^tkn^buf.visa^mkt^spcfc^data #ENDSCN = SW0C483 !#CMP2.28 08/11/08 BNETS 6099 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6099 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6099 * ******************************************************************************** #SCN = SW0C486 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD N000260F ! 13JUL2008 bartond/swiftd ! Symptom: An error is being returned during initilization if no ! SNF record is found. ! Problem: Error handling was in place in this proc, but not in the ! correct location. ! Fix: Added additional error handling code in the proper ! location. ! Procs modified: init^snf ! Dependency: Apply fix to BNETS and run Make. ! Reference: Case #461669 ! 07AUG2008 bensone/swiftd ! Symptom: Warmbooting Banknet Sessions ! Problem: The Banknet interface does not use function management ! messages from XPNET to modify the "up" state of a ! station. Instead they are used to send "echo tests" ! which are in reality, "logon" messages. In the above ! situation, the station is only marked "down" when XPNET ! returns a failed sent message. The station is only ! marked "up" when a response is received. This can cause ! a delay between the time a Start/Stop Station is issued ! and the station actually marks up/down. There are ! timing and configuration scenarios where the Start/Stop ! Station commands do not cause the station to be marked ! up or down. ! Fix: The edit to check if the interface is logged on will be ! enhanced to include a check of the logon states in the ! BNIIF for the prefixes, groups or GSI assigned to the ! process. ! ! The interface will be considered "inactive" if either: ! all the stations are marked down ! or ! all the entities in the BNIIF for the process are ! logged off. ! ! This will allow most customers to warmboot station name ! changes by: ! "logoff" the interface ! Warmboot the process ! "logon" the interface if necessary ! ! Customers using enhanced session management can ! "deactivate" all the stations with a single command ! Warmboot the process ! "activate" all the stations with a single command ! ! Procs added: util^intf^actv ! util^set^group^logon ! Procs modified: cmd^warmboot ! init^logoff ! init^logon ! sem^echotest^response ! sem^logon^response^group ! Dependency: Apply fix to BNETLIBS and BNETS. Run Make. ! Replace BNETLOGM. ! Reference: Case #463747 - Warmbooting Banknet Sessions ! 07AUG2008 swiftd ! Symptom: Banknet Release 08.2 Mandates ! Problem: None ! Fix: 1. MasterCard in Control Commercialization: added ! support for new value "V" in DE 48 SE 33, and new ! value "17" in DE 48 SE 71. ! 2. Payment Transaction Processing: added support for ! a type of cash transfer transaction called ! Moneysend. ! 3. Private Label Processing Enhancements: Added support ! for retrieving the MasterCard Assigned ID from the ! STF for customers that participate in the Private ! Label Merchant Verification Service. ! 4. Revised Test Transaction Standards for Recurring ! Payment Merchants: added support to allow a merchant ! to send a recurring payment request test transaction ! for 1 unit of currency to the issuer to determine ! the account status. DE 61 subfield 7 must contain ! value 4 in recurring payment USD $1 test ! transactions. ! 5. Support for Partial Approvals, Reversal Requests, ! and Account Balance Responses: The interface has been ! updated to support the POS Balance Token (CB) when ! formatting DE 53 in a response back to the network. ! 6. Alternate Issuer Transaction Routing Enhancements: ! The interface has been modified to support new ! DE 48 SE 12 in its issuer processing of ! 0100/Authorization Request messages. The value "A" ! will indicate "Alternate issuer host routing". ! Support has been added for the new Network Management ! Request/0800 message sign-on and sign-off options. ! 7. Banknet Support for UK Domestic Maestro Processing: ! MasterCard is enhancing the Authorization System to ! support the processing of UK Domestic Maestro ! transactions. The interface has been modiefied to ! support these transactions. ! 8. Healthcare Transaction Processing Enhancements: added ! support for new DE 48 SE 32 (MasterCard assigned ID) ! in both acquirer and issurer. This new data element, ! in addition to the values in existing data elements ! will be used to determine the validity of the ! transaction. ! Dependency: Apply fixes to BATKNCVS, BATKNID, BNETATMS, BNETDDLS, ! BNETEMVS, BNETG, BNETLIBS, BNETS, COBTKN, DDLBATKN, ! DDLFSTF, DDLPSTKN, RQBNETS, SCRNBNET, AND SCRNSTF. ! Run Make. Replace BNETLOGM and BNETUPDT. ! Reference: WO #080401-02 #ADD 01075 CMD^^COMMAND^INPUT call cmd^logon^gsi^chk( msg, mtp, nmm^logon^prefix^l ) #DELETE 01076 CMD^^COMMAND^INPUT #ADD G0108100 CMD^^COMMAND^INPUT call cmd^logoff^gsi^chk( msg, mtp, nmm^logoff^group^l ) #DELETE G0108101 CMD^^COMMAND^INPUT #ADD 01084 CMD^^COMMAND^INPUT call cmd^logoff^gsi^chk( msg, mtp, nmm^logoff^prefix^l ) #DELETE 01085 CMD^^COMMAND^INPUT #ADD 01411 CMD^LOGOFF begin wlform( error1, "FAILURE to SEND LOGOFF, INVALID SYNTAX" ) int nmm^info^cde; if msg^length > 6 then begin call log^message^( 0480,, @error1, net.myname, 2 ); return; end; msg^length := 6; if pct.options.logon^typ = nmm^logon^prefix^l then begin set( nmm^info^cde, nmm^logoff^prefix^l ); end else begin set( nmm^info^cde, nmm^logoff^group^l ); end; call cmd^logoff^gsi^chk( msg, mtp, nmm^info^cde ); end; #DELETE 01412 /01431 CMD^LOGOFF #ADD G015132U CMD^LOGOFF^G^GSI !# nmm^info^cde : network management information code # #ADD G015132Y CMD^LOGOFF^GSI^CHK proc cmd^logoff^gsi^chk( msg, mtp, nmm^info^cde ) variable; int .msg; string .mtp; int nmm^info^cde; begin if nmm^info^cde = nmm^logoff^prefix^l then begin ! ! PREFIX LOGOFF ! if gsi^used^g then begin call cmd^logoff^p^gsi( msg, mtp ); end else begin call cmd^logoff^p( msg, mtp ); end; end else begin ! ! GROUP LOGOFF ! if gsi^used^g then begin call cmd^logoff^g^gsi( msg, mtp ); end else begin call cmd^logoff^g( msg, mtp ); end; end; !of group logoff end; ! of cmd^logoff^gsi^chk #DELETE G015132Z/G015132p CMD^LOGOFF^GSI^CHK #ADD 01609 CMD^LOGOFF^P ?section cmd^logoff^p^gsi ?page "cmd^logoff^p^gsi" !#####################################################################! !# #! !# cmd^logoff^p^gsi #! !# #! !# This procedure processes the GSI prefix logoff command. #! !# #! !# SYNTAX: LOGOFFP #! !# #! !# INPUT PARAMETERS : #! !# msg : message pointer #! !# mtp : message text pointer #! !# #! !# OUTPUT PARAMETERS: #! !# #! !#####################################################################! proc cmd^logoff^p^gsi( msg, mtp ); int .msg; string .mtp; begin wlform( error1, "FAILURE to SEND LOGOFF, INVALID Prefix \\\\\\\\\\\ Specified" ) wlform( error2, "FAILURE to SEND LOGOFF, INVALID SYNTAX" ) wlform( trace1, "T - Prefix LOGOFF Command Received" ) struct .userbuf( timer^userbuf^def ); int .ext bniif^tbl( fiid^mci^def ), prefix^lgth := 0, service := 0, traffic := 0, service^typ := -1, traffic^typ := -1; int avs := 0, avs^typ := -1, i := 0, j := 0, match^found := false, seg^id := 0; string .prefix[ 0:10 ] := [ 11 * [" "] ]; if trace^g.cmd^d then begin call log^message^( 0511, ! routing code !, @trace1, net.myname, 0 ); end; set ( prefix^lgth, $len( fiid^mci^def.prefix.num ) ); if msg^length > 7 then begin if not util^parse^command( msg, mtp, service^typ, traffic^typ, avs^typ, prefix^lgth, prefix ) then begin call log^message^( 0521, ! routing code !, @error2, net.myname, 2 ); return; end; end; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; i := -1; while $dbl( i := i + 1 ) < pct.bniif^tbl.ctr and not match^found do begin if bniif^tbl.fiid = pct.swi^id for $len( bniif^tbl.fiid ) then begin match^found := true; for j := 0 to ( bniif^tbl.prefix^ctr - 1 ) do begin if ( prefix = blanks for max^prefix^lgth^l ) or prefix = bniif^tbl.prefix[ j ].num[ 0 ] for prefix^lgth then begin init ( userbuf, " ", wlen( timer^userbuf^def ) ); movl ( userbuf.nmm.mci^id.byte, bniif^tbl.mci^id[ 0 ], $len( userbuf.nmm.mci^id ) ); movl ( userbuf.nmm.prefix.byte, bniif^tbl.prefix[ j ].num[ 0 ], $len( userbuf.nmm.prefix ) ); call timer^delete( tcb^g, type^nmm^l, nmm^logon^prefix^l, userbuf, woffset( userbuf.nmm. service ) ); call timer^delete( tcb^g, type^xnmm^l, ! nmm^logon^prefix^l !, userbuf, woffset( userbuf.nmm. service ) ); if service^typ < 0 then begin set ( service, bniif^tbl.service ); end else begin set ( service, service^typ ); end; if traffic^typ < 0 then begin set ( traffic, bniif^tbl.traffic ); end else begin set ( traffic, traffic^typ ); end; ! ! Address Verification ! if avs^typ < 0 then begin set ( avs, bniif^tbl.avs^typ ); end else begin set ( avs, avs^typ ); end; call init^logoff( nmm^logoff^prefix^l, userbuf.nmm.mci^id, userbuf.nmm.prefix, service, traffic, avs ); end; ! of logoff prefix end; !of for loop j end; ! of match found @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; ! of while call usesegment( seg^id ); end; #ADD 01629 CMD^LOGON begin wlform( error1, "FAILURE to SEND LOGON, INVALID SYNTAX" ) if msg^length > 5 then begin call log^message^( 0530,, @error1, net.myname, 2 ); return; end; msg^length := 5; call cmd^logon^gsi^chk( msg, mtp, pct.options.logon^typ ); end; #DELETE 01630 /01649 CMD^LOGON #ADD G0175539 CMD^LOGON^G^GSI !# nmm^info^cde : network management information code # #ADD G017553J CMD^LOGON^GSI^CHK if nmm^info^cde = nmm^logon^prefix^l then begin ! ! PREFIX LOGON ! if gsi^used^g then begin call cmd^logon^p^gsi( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ) ); end else begin call cmd^logon^p( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ) ); end; end else begin ! ! GROUP LOGON ! if gsi^used^g then begin call cmd^logon^g^gsi( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ), nmm^info^cde ); end else begin call cmd^logon^g( $optional( $param( msg ), msg ), $optional( $param( mtp ), mtp ), nmm^info^cde ); end; end; !of group logon #DELETE G017553K/G017553X CMD^LOGON^GSI^CHK #ADD 01852700 CMD^LOGON^P ?section cmd^logon^p^gsi ?page "cmd^logon^p^gsi" !##################################################################### !# # !# cmd^logon^p^gsi # !# # !# This procedure processes the GSI prefix logon command. # !# # !# SYNTAX: LOGONP < CREDIT/DEBIT> # !# NOTE: AVS TYP must come before PREFIX in the command # !# # !# INPUT PARAMETERS : # !# msg : message pointer # !# mtp : message text pointer # !# nmm^info^cde : network management information code # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^logon^p^gsi( msg, mtp, nmm^info^cde ) variable; int .msg; string .mtp; int nmm^info^cde; begin wlform( error1, "FAILURE to SEND LOGON, INVALID Prefix \\\\\\\\\\\ Specified" ) wlform( error2, "FAILURE to SEND LOGON, INVALID SYNTAX" ) wlform( trace1, "T - Prefix LOGON Command Received" ) struct .userbuf( timer^userbuf^def ); int .ext bniif^tbl( fiid^mci^def ), prefix^lgth := 0, service := 0, traffic := 0, service^typ := -1, traffic^typ := -1; int avs := 0, avs^typ := -1, i := 0, j := 0, match^found := false, max := 0, seg^id := 0; string .prefix[ 0:10 ] := [ 11 * [" "] ]; if trace^g.cmd^d then begin call log^message^( 0571, ! routing^code !, @trace1, net.myname, 0 ); end; set ( prefix^lgth, $len( fiid^mci^def.prefix.num ) ); if $param( msg ) and $param( mtp ) then begin if msg^length > 6 then begin if not util^parse^command( msg, mtp, service^typ, traffic^typ, avs^typ, prefix^lgth, prefix ) then begin call log^message^( 0581, ! routing^code !, @error2, net.myname, 0 ); return; end; end; end; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; i := -1; while $dbl( i := i + 1 ) < pct.bniif^tbl.ctr and not match^found do begin if bniif^tbl.fiid = pct.swi^id for $len( bniif^tbl.fiid ) then begin match^found := true; for j := 0 to( bniif^tbl.prefix^ctr - 1 ) do begin if ( prefix = blanks for max^prefix^lgth^l ) or prefix = bniif^tbl.prefix[ j ].num[ 0 ] for prefix^lgth then begin init ( userbuf, " ", wlen( timer^userbuf^def ) ); movl ( userbuf.nmm.mci^id.byte, bniif^tbl.mci^id[ 0 ], $len( userbuf.nmm.mci^id ) ); movl ( userbuf.nmm.prefix.byte, bniif^tbl.prefix[ j ].num[ 0 ], $len( userbuf.nmm.prefix ) ); call timer^delete( tcb^g, type^nmm^l, nmm^logoff^prefix^l, userbuf, woffset( userbuf.nmm. service ) ); call timer^delete( tcb^g, type^xnmm^l, !nmm^logoff^prefix^l!, userbuf, woffset( userbuf.nmm. service ) ); if service^typ < 0 then begin set ( service, bniif^tbl.service ); end else begin set ( service, service^typ ); end; if traffic^typ < 0 then begin set ( traffic, bniif^tbl.traffic ); end else begin set ( traffic, traffic^typ ); end; ! ! Address Verification ! if avs^typ < 0 then begin set ( avs, bniif^tbl.avs^typ ); end else begin set ( avs, avs^typ ); end; call init^logon( nmm^logon^prefix^l, userbuf.nmm.mci^id, userbuf.nmm.prefix, service, traffic, avs ); end; ! of logon prefix end; ! of for j := 0 to end; ! match found @bniif^tbl := @bniif^tbl + $udbl( $len( fiid^mci^def ) ); end; ! of while call usesegment( seg^id ); end; ! of cmd^logon^p^gsi #REPLACE 02485R0R CMD^WARMBOOT "rface is active - previous names retained" ) #REPLACE 02516R05 CMD^WARMBOOT intf^actv, #ADD 02516R0A CMD^WARMBOOT intf^actv := util^intf^actv; #DELETE 02516j3F CMD^WARMBOOT #DELETE 02516j3M/02516j3N CMD^WARMBOOT #REPLACE 02516j3Y/02516j3Y OFFSET 0 CMD^WARMBOOT if name^changed and intf^actv then #DELETE 02516j3Z CMD^WARMBOOT #ADD G025990E CMD^WARMBOOT^STORE^GLOBALS store^d( process^moneysend^txn^g ); store^d( prvt^label^uses^de48se32^g ); #ADD G025990Z CMD^WARMBOOT^STORE^GLOBALS process^moneysend^txn^g := false; prvt^label^uses^de48se32^g := false; #ADD G025990u CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( process^moneysend^txn^g ); retrieve^d( prvt^label^uses^de48se32^g ); #DELETE N0317903/N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST ! ! #ADD N031790g SUB^INIT^ECHOTEST ! Format echotest message ! #ADD N031790g SUB^INIT^ECHOTEST ! ! #ADD N031790g SUB^INIT^ECHOTEST init( sem, " ", wlen( nmm^def ) ); #ADD N031790g SUB^INIT^ECHOTEST movd( sem.typ, sem^nmm^request^d ); #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST call hexchar^binary( sem^0800^pbit^map^g, 16, sem.pbit^map ); #ADD N031790g SUB^INIT^ECHOTEST call hexchar^binary( sem^0800^sbit^map^g, 16, sem.sbit^map ); #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST pan^bit^d := 1; #ADD N031790g SUB^INIT^ECHOTEST call integer^ascii^( sem.pan.lgth, 5 ); ! P-2 ! #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST ! ! #ADD N031790g SUB^INIT^ECHOTEST ! If the MCI ID is more than 5 bytes long, set the PAN to the ! #ADD N031790g SUB^INIT^ECHOTEST ! last five digits of the identifier. ! #ADD N031790g SUB^INIT^ECHOTEST ! ! #ADD N031790g SUB^INIT^ECHOTEST if max^group^lgth^g = 5 then #ADD N031790g SUB^INIT^ECHOTEST begin #ADD N031790g SUB^INIT^ECHOTEST movl( sem.pan.num, group, max^group^lgth^g ); #ADD N031790g SUB^INIT^ECHOTEST end #ADD N031790g SUB^INIT^ECHOTEST else #ADD N031790g SUB^INIT^ECHOTEST begin #ADD N031790g SUB^INIT^ECHOTEST movl( sem.pan.num, group[ 1 ], 5 ); #ADD N031790g SUB^INIT^ECHOTEST end; #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST call util^gmt^ascii( sem.tran^dat^tim ); ! P-7 ! #ADD N031790g SUB^INIT^ECHOTEST call util^increment^trace( sem.trace^num, ! P-11 ! #ADD N031790g SUB^INIT^ECHOTEST $len( sem.trace^num ) ); #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST call integer^ascii^( sem.fwd^inst.lgth, max^group^lgth^g ); #ADD N031790g SUB^INIT^ECHOTEST movl( sem.fwd^inst.cde, pct.inst, ! P-33 ! #ADD N031790g SUB^INIT^ECHOTEST max^group^lgth^g ); #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST call integer^ascii^( sem.nmm^info^cde, nmm^echo^l ); ! P-70 ! #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST #ADD N031790g SUB^INIT^ECHOTEST #ADD 03677 SUB^INIT^LOGOFF init ( userbuf, " ", wlen( timer^userbuf^def ) ); movl ( userbuf.nmm.mci^id, group, max^group^lgth^g ); mov^ ( userbuf.nmm.prefix, prefix ); set ( userbuf.nmm.service, service ); set ( userbuf.nmm.traffic, traffic ); set ( userbuf.nmm.avs^typ, avs^typ ); movl ( timer.userbuf, userbuf, wlen( timer^userbuf^def ) ); if ( @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^info^cde, userbuf, woffset( userbuf.address ) ) ) then begin return false; end; if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, nmm^info^cde ) ) then begin txt ':=' "TIMER TABLE ERROR"; call log^message^( 1210, !routing code!, @error1, net.myname, evt^msg^severity^err^l, @txt ); return false; end; if not util^^collapse( sem, csem, extlgth ) then begin txt ':=' "MESSAGE COLLAPSE ERROR"; call log^message^( 1200, !routing code!, @error1, net.myname, evt^msg^severity^err^l, @txt ); return false; end; call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam, pct.timers.nmm ); #DELETE 03678 /03702 SUB^INIT^LOGOFF #ADD 03706 SUB^INIT^LOGOFF if gsi^used^g and nmm^info^cde = nmm^logoff^group^l then begin call util^set^group^logon( nmm^info^cde, service, traffic ); end else begin call util^set^logon^status( nmm^info^cde, group, prefix, service, traffic ); end; #DELETE 03706R00/03718 SUB^INIT^LOGOFF #ADD 03719T0A SUB^INIT^LOGOFF call sub^init^logoff( nmm^info^cde, group, prefix, credit^l, traffic, avs^typ ); call sub^init^logoff( nmm^info^cde, group, prefix, debit^l, traffic, avs^typ ); #DELETE 03719T0B/03720T02 SUB^INIT^LOGOFF #ADD G0384200 SUB^INIT^LOGON if gsi^used^g and nmm^info^cde = nmm^logon^group^l then begin call util^set^group^logon( nmm^info^cde, service, traffic ); #DELETE G0384201/G0384203 SUB^INIT^LOGON #ADD 03848T04 SUB^INIT^LOGON begin call sub^init^logon( nmm^info^cde, group, prefix, credit^l, traffic, avs^typ ); call sub^init^logon( nmm^info^cde, group, prefix, debit^l, traffic, avs^typ ); #DELETE 03848T05/03849T02 SUB^INIT^LOGON #ADD G0394509 INIT^PARAMPROC "P", "PRVT-LABEL-USES-DE48SE32 ", "P", "PROCESS-MONEYSEND-TXN ", #ADD G039961t INIT^PARAMPROC ! ! PRVT-LABEL-USES-DE48SE32 ! if not ferror then begin prvt^label^uses^de48se32^g := false; if lconf.param^msg.ptxt = "Y" then begin prvt^label^uses^de48se32^g := true; end; end; ! ! PROCESS-MONEYSEND-TXN ! if not ferror then begin process^moneysend^txn^g := false; if lconf.param^msg.ptxt = "Y" then begin process^moneysend^txn^g := true; end; end; #ADD 04134 INIT^PCT move( pct.options.processing^mde, icf.base.processing^options.processing^mode ); movd( pct.options.mult^crncy, " " ); #ADD 04287 INIT^PCT if icf^bnet.alt^host = "Y" then begin set( pct.options.alt^host, true ) end ! of if icf^bnet.alt^host = "Y" else begin set( pct.options.alt^host, false ); end; ! of if icf^bnet.alt^host not "Y" #ADD 04308j20 INIT_PCT_ICFE move( pct.options.processing^mde, icfe.base.processing_options.processing_mode ); move( pct.options.mult^crncy, icfe.base.processing_options.mult_crncy ); #ADD 04308j59 INIT_PCT_ICFE if icfe_bnet.alt^host = "Y" then begin set( pct.options.alt^host, true ) end ! of if icfe_bnet.alt^host = "Y" else begin set( pct.options.alt^host, false ); end; ! of if icfe_bnet.alt^host not "Y" #ADD G0454612 INIT^SNF if ferror = 1 then begin call hiswfile^close( snf^num^g ); movd( snf^name^g, invalid^name^d ); snf^num^g := -2; return true; end; #ADD 04910R03 PSTM^0210^RESPONSE wlform( standin, "T - Host not available, BASE24 standin approval not allowed " ',' "on MoneySend transactions. Transaction declined" ) #REPLACE G0494101 PSTM^0210^RESPONSE if ( pos^approved^d( pstm ) and #REPLACE G0494103 PSTM^0210^RESPONSE not pos^crd^vrfy^d( pstm ) ) then #ADD 04954 PSTM^0210^RESPONSE if sem^moneysend^d( sem ) and pstm.responder <> host^orig^d and pos^approved^d( pstm ) then begin if trace^g.out^d then begin call log^message^ ( 1355,, @standin, net.myname, 0 ); end; movd ( pstm.typ, reversal^d ); movd ( pstm.originator, interface^orig^d ); movd ( pstm.rvsl^cde, rvsl^auth^not^avail^d ); call util^send^pstm( pstm, msg^sym^source ); end; #ADD 06246K04 SEM^LOGON^RESPONSE^GROUP call util^set^group^logon( nmm^logon^group^l, service, traffic ); #DELETE 06246K05 SEM^LOGON^RESPONSE^GROUP #ADD 06512 SEM^NMM^RESPONSE "063", ! ( Group Sign-On Alternate Issuer Route ) "064", ! ( Group Sign-Off Alternate Issuer Route ) "065", ! ( Prefix Sign-On by GSI Primary Issuer Route ) "066", ! ( Prefix Sign-Off by GSI Primary Issuer Route ) "067", ! ( Prefix Sign-On by GSI Alternate Issuer Route ) "068", ! ( Prefix Sign-Off by GSI Alternate Issuer Route) #ADD 06557 SEM^NMM^RESPONSE !063! call sem^logon^response^group ( sem, msg, sta^x ); !064! call sem^logoff^response^group ( sem, msg, sta^x ); !065! call sem^logon^response^prefix ( sem, msg, sta^x ); !066! call sem^logoff^response^prefix ( sem, msg, sta^x ); !067! call sem^logon^response^prefix ( sem, msg, sta^x ); !068! call sem^logoff^response^prefix ( sem, msg, sta^x ); #ADD E0661213 SEM^REQUEST tag^data[ 0 ].svc = "16" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "17" ) and #DELETE E0661214 SEM^REQUEST #ADD F0661206 SEM^REQUEST tag^data[ 1 ].svc = "16" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "17" ) and #DELETE F0661207 SEM^REQUEST #ENDSCN = SW0C486 !#CMP2.28 08/11/08 RQBNETS 6009 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNETS RQBNETS 6009 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNETS RQBNETS 6009 * ******************************************************************************** #SCN = SW0C487 , FILEID = RQBNETS #VOLUME = $ROOK.SW60BNET #FILE = RQBNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00018I0F * 07AUG2008 bensone * Symptom: Banknet Release 08.2 Mandates * Problem: None * Fix: Added support for Alternate Issuer Host Routing. * Modified sections: * 400-SAVE-RECORD * 480-DATA-CHECK * 595-CLEAR-DATA * Dependency: Apply fixes to BATKNCVS, BATKNID, BNETATMS, * BNETDDLS, BNETEMVS, BNETG, BNETLIBS, BNETS, * COBTKN, DDLBATKN, DDLFSTF, DDLPSTKN, RQBNETS, * SCRNBNET, AND SCRNSTF. Run Make. * Replace BNETLOGM and BNETUPDT. * Reference: WO #080401-02 #ADD 00361 400-SAVE-RECORD IF ALT-HOST OF ICF-BNET = " " MOVE "N" TO ALT-HOST OF ICF-BNET. #ADD 00616 480-DATA-CHECK IF WS-OVERLAY = 12 IF ALT-HOST OF ICF-BNET = " " MOVE "N" TO ALT-HOST OF ICF-BNET. IF WS-OVERLAY = 12 IF (ALT-HOST OF ICF-BNET NOT = "Y") AND (ALT-HOST OF ICF-BNET NOT = "N") MOVE "BAD" TO VALID-DATA MOVE 11 TO ERR-CDE TURN TEMP SERROR IN B-ALT-HOST IF MOVE-MESSAGE SET NEW-CURSOR AT B-ALT-HOST MOVE "ALTERNATE HOST MUST BE EITHER 'Y' OR 'N'" TO ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00749B02 595-CLEAR-DATA MOVE "N" TO ALT-HOST OF ICF-BNET. #ENDSCN = SW0C487 !#CMP2.28 08/12/08 BNETLIBS6129 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6129 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6129 * ******************************************************************************** #SCN = SW0C500 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6129 #NEWVERSION = 6130 #ADD 04419c2P ! 12AUG2008 frederr ! Symptom: The interface is denying card verification transactions ! that contain a non zero transaction amount. ! Problem: Some issuers do not accept zero amount card verification ! transactions. So to give acquirers options with these ! transactions, the zero amount data check should not be ! in the interface. ! Fix: Modified the interface to not data check transactions ! based on the amount sent in. ! Proc modified: pstm^frmt^amt^to^sem^amt. ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #461660. #DELETE 07794 SUB^CONVERT^AMT #DELETE 07794N01/07794N0F SUB^CONVERT^AMT #ENDSCN = SW0C500 !#CMP2.28 08/19/08 BNETLIBS6130 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6130 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6130 * ******************************************************************************** #SCN = SW0C535 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6130 #NEWVERSION = 6131 #ADD 04419d0D ! 19AUG2008 wielerk ! Symptom: Outbound reversals are not formatted correctly. ! Problem: DE-11 ( trace number ) is to remain the same for the ! transaction lifecycle. ! Fix: Removed code that incremented de-11 when formatting an ! outbound reversal. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to BNETLIBS and SW60ABNT.BNETATMS. ! Run Make. ! Reference: Case #473940 #DELETE 07419 /07420 PSTM^FRMT^0420^TO^ACQ^XRVSL #DELETE 07690 PSTM^FRMT^0420^TO^XRVSL #ENDSCN = SW0C535 !#CMP2.28 08/22/08 BNETS 60100FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60100 * ******************************************************************************** #SCN = SW0C550 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O000261i ! 22AUG2008 hazrar ! Symptom: Banknet stations are been marked down due to max ! timeouts each time a timeout occurs. This ! happens no matter what the ICFE's Max Time-Out field is ! set to. ! Problem: When using the SNF the interface hardcodes each ! station's max timeout variable to Zero. This caused the ! interface to think max timeouts has been reached each ! time a timeout occurs. ! Fix: Modified the interface to hold ICFE's Max timeout field ! in a global in case the SNF is used. If the SNF is used, ! the global will be used to populate the station's pct ! max timeout field. ! Procs modified: init_pct_icfe ! init^snf ! Dependency: Apply fixes to BNETS and BNETG. Run Make. ! Reference: Case #470916. #ADD 04308j2J INIT_PCT_ICFE set( icfe^max^temp^timeout^g, icfe.base.processing_options.max_timeouts ); #ADD G045461c INIT^SNF pct.station[ i ].t^o^max := icfe^max^temp^timeout^g; #DELETE G045461d INIT^SNF #ENDSCN = SW0C550 !#CMP2.28 08/22/08 BNETG 6052 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6052 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6052 * ******************************************************************************** #SCN = SW0C551 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6052 #NEWVERSION = 6053 #ADD 00026z0F ! 22AUG2008 hazrar ! Symptom: Banknet stations are been marked down due to max ! timeouts each time a timeout occurs. This ! happens no matter what the ICFE's Max Time-Out field is ! set to. ! Problem: When using the SNF the interface hardcodes each ! station's max timeout variable to Zero. This caused the ! interface to think max timeouts has been reached each ! time a timeout occurs. ! Fix: Added global variable icfe^max^temp^timeout^g to BNETG ! to hold the value of ICFE Max timeout field. This global ! will be used during SNF initialization to populate the ! PCT. ! Globals added: icfe^max^temp^timeout^g ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #470916. #ADD 00448v08 int icfe^max^temp^timeout^g := 0; #ENDSCN = SW0C551 !#CMP2.28 08/22/08 BNETLIBS6131 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6131 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6131 * ******************************************************************************** #SCN = SW0C553 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6131 #NEWVERSION = 6132 #ADD 04419e0C ! 22AUG2008 GangarJ ! Symptom: Banknet sending incorrect value in DE-48 (Additional ! data - Private Use) Subelement-82 (Address Verification ! Service Request) for a Balance Inquiry Transaction. ! Problem: For a Balance Inquiry transaction, Banknet is sending ! value "52" in DE-48 Subfield-82 to Mastercard. As per ! Mastercard Specifications this value should be "51". ! Fix: Modified the Interface to populate the correct value ! "51" instead of "52" for DE-48 Subelement-82. ! Procs Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run MAKE. ! Reference: Case #474166 #ADD 08587 PSTM^FRMT^SEM^ADDL^DATA if ( pstm.tran.tran^cde.tc = "16" or pstm.tran.tran^cde.tc = "17" ) then #DELETE 08588 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0C553 !#CMP2.28 08/26/08 BNETS 60101FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60101 * ******************************************************************************** #SCN = SW0C554 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P000260I ! 26AUG2008 RoyK ! Symptom: The deactivate session command to the interface produces ! an XPNET station error. ! Problem: The interface is initializing its station index to a -1 ! when processing a deactivate session command. It begins ! processing the command to the stations using this index. ! This causes the interface to attempt to send the ! deactivate command to an invalid station as there is no ! station for a station index of -1. ! Fix: Modified the interface to initialize the station index ! to a 0 on deactivate session commands. ! Procs modified: cmd^deactvt^sta. ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #472003 #ADD G012950i CMD^DEACTVT^STA int sta^idx := 0; #DELETE G012950j CMD^DEACTVT^STA #ENDSCN = SW0C554 !#CMP2.28 08/29/08 BNETS 60102FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60102 * ******************************************************************************** #SCN = SW0C562 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q000260F ! 29AUG2008 frederr ! Symptom: A LOGOFF command to the interface causes it to go into ! an infinite loop. ! Problem: The interface was moving userbuf data into the timer ! table before timer table was initialized. This caused ! data to be moved to a random spot in memory, which ! caused it to loop. ! Fix: Modified the interface to move userbuf data into the ! timer table after the timer table was initialized. ! Proc modified: init^logoff. ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #475544. #DELETE O0367708 SUB^INIT^LOGOFF #ADD O036770T SUB^INIT^LOGOFF movl ( timer.userbuf, userbuf, wlen( timer^userbuf^def ) ); #DELETE O036770U SUB^INIT^LOGOFF #ENDSCN = SW0C562 !#CMP2.28 09/05/08 BNETD 6002 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6002 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6002 * ******************************************************************************** #SCN = SW0C572 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6002 #NEWVERSION = 6003 #ADD 00043B09 ! 05SEP2008 bensone ! Symptom: Customer needs a way to identify remote ATMs to Visa and ! MasterCard in order to qualify for lower rates. ! Problem: The Visa interface uses the STF ON PREMISE FLAG to set ! DE 126.12 pos 4 for outbound ATM requests. ! The Banknet interface only uses the STF during EMV ! processing. ! Fix: Add STF processing to set DE 61.3 based on the ON ! PREMISE FLAG. Move procedure stm^frmt^stf^prikey from ! BNETATMS to BNETLIBS to enable sharing across optional ! products like ATM and EMV. ! Proc removed: stm^frmt^stf^prikey. ! Dependency: Apply fixes to BNETATMS, BNETD, BNETEMVS and BNETLIBS. ! Run Make. ! Reference: Case #473568 #DELETE 00254A5K/00254A5g STM^FRMT^STF^PRIKEY #ENDSCN = SW0C572 !#CMP2.28 09/05/08 BNETLIBS6132 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6132 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6132 * ******************************************************************************** #SCN = SW0C573 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6132 #NEWVERSION = 6133 #ADD 04419f0D ! 05SEP2008 bensone ! Symptom: Customer needs a way to identify remote ATMs to Visa and ! MasterCard in order to qualify for lower rates. ! Problem: The Visa interface uses the STF ON PREMISE FLAG to set ! DE 126.12 pos 4 for outbound ATM requests. ! The Banknet interface only uses the STF during EMV ! processing. ! Fix: Add STF processing to set DE 61.3 based on the ON ! PREMISE FLAG. Move procedure stm^frmt^stf^prikey from ! BNETATMS to BNETLIBS to enable sharing across optional ! products like ATM and EMV. ! Proc added: stm^frmt^stf^prikey (from BNETATMS). ! Dependency: Apply fixes to BNETATMS, BNETD, BNETEMVS and BNETLIBS. ! Run Make. ! Reference: Case #473568 #ADD 15870 SEM^FRMT^XRVSL^TO^SEM^XACK ?section stm^frmt^stf^prikey ?page "stm^frmt^stf^prikey" !##################################################################### !# # !# STM^FRMT^STF^PRIKEY # !# # !# THIS PROCEDURE BUILDS KEY TO THE STF RECORD FROM DATA IN THE STM.# !# # !# INPUT PARAMETERS: # !# STM - POINTER TO BASE24 INTERNAL ATM MESSAGE # !# # !# OUTPUT PARAMETERS: # !# STF - SWITCH TERMINAL FILE RECORD # !# # !##################################################################### proc stm^frmt^stf^prikey( stm, stf ); int .stm( stm^def ); struct .stf( stf^def ); begin move( stf.prikey.swi^fiid, pct.fiid ); move( stf.prikey.term^fiid, stm.term^owner^fiid ); movd( stf.prikey.merch^id, [ $len( stf.prikey.merch^id ) * [ "*" ] ] ); move( stf.prikey.term^id, stm.term^id ); move( stf.prikey.prod^id, pct.atm.prod^id ); end; ! of proc stm^frmt^stf^prikey #ENDSCN = SW0C573 !#CMP2.28 09/09/08 BNETLIBS6133 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6133 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6133 * ******************************************************************************** #SCN = SW0C577 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6133 #NEWVERSION = 6134 #ADD 04419g0G ! 09SEP2008 wielerk ! Symptom: Outbound reversals for late approved responses are not ! formatted correctly. ! Problem: DE-11 ( trace number ) is to remain the same for the ! transaction lifecycle. ! Fix: Removed code that incremented de-11 when formatting an ! outbound reversal. ! Procs modified: sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #473940 #DELETE 13554 /13555 SEM^FRMT^XRESP^TO^SEM^XRVSL #ENDSCN = SW0C577 !#CMP2.28 09/24/08 BNETLIBS6134 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6134 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6134 * ******************************************************************************** #SCN = SW0C597 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6134 #NEWVERSION = 6135 #ADD 04419h0B ! 24SEP2008 frederr ! Symptom: ILF adds are failing on format 2 file types. ! Problem: HISWUTILS is using the max ILF length when considering ! how much space is left for token data. However, format ! 2 ILFs have a 24 byte shorter record length than the ILF ! definitions allow. If the token data ends up in the ! area between the shorter format 2 length and the end of ! the ILF definitions, the add will fail. ! Fix: Modified the interface to pass the ILF file format to ! Hiswutils when adding token data to the ILF. ! Proc modified: util^ilf^add. ! Dependency: Apply fix to HISWUTLS and BNETLIBS. Run Make. ! Reference: Case #469576. #ADD 20510 UTIL^ILF^ADD base24^rel^g, pct.ilf[ 1 ].fcb.file^frmt ) then #DELETE 20511 UTIL^ILF^ADD #ENDSCN = SW0C597 !#CMP2.28 10/01/08 BNETLIBS6135 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6135 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6135 * ******************************************************************************** #SCN = SW0C607 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6135 #NEWVERSION = 6136 #ADD 04419i0E ! 01OCT2008 RoyK ! Symptom: ILF shows incorrect value for Transaction Type. ! Problem: The interface is moving the Processing code into the ! Transaction Type field of ILF's SEM structure while ! logging the transaction. ! Fix: Modified the interface to move sem.typ instead of ! sem.proc^cde in the SEM field of the ILF. ! Proc modified: util^ilf^add. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #477263. #ADD 20358 UTIL^ILF^ADD move ( ilf.sem.tran^typ, sem.typ ); #DELETE 20359 UTIL^ILF^ADD #ENDSCN = SW0C607 !#CMP2.28 10/02/08 BNETG 6053 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6053 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6053 * ******************************************************************************** #SCN = SW0C608 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6053 #NEWVERSION = 6054 #ADD 00026#0H ! 30SEP2008 swiftd ! Symptom: Reversal of partial approvals fails. ! Problem: Need to add partial approvals to the list of trans that ! can be reversed. ! Fix: Added a new define for partial approval transactions. ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #478069 #ADD 00226i05 define resp^partial^approval^d = "10"#; #ENDSCN = SW0C608 !#CMP2.28 10/02/08 BNETS 60103FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60103 * ******************************************************************************** #SCN = SW0C609 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R000260D ! 30SEP2008 swiftd ! Symptom: Reversal of partial approvals fails. ! Problem: Need to add partial approvals to the list of trans that ! can be reversed. ! Fix: Added partial approval transactions to the list of ! trans that can be reversed. ! Updated comments: ! The 0400 Acquirer Reversal Request message may be ! generated only when an issuer provided an Authorization ! Response/0110 message with DE 39 value of "00", "08" ! or "10". ! Proc modified: sem^acq^rvsl^rqst^pos ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #478069 #REPLACE 05374}7N FRMT^AND^SEND^ACQ^RVSL^RESP ! message with DE 39 value of "00", "08" or "10". ! #ADD 05374}7R FRMT^AND^SEND^ACQ^RVSL^RESP sem.resp^cde <> resp^honor^with^id^sem^d and sem.resp^cde <> resp^partial^approval^d ) then #DELETE 05374}7S FRMT^AND^SEND^ACQ^RVSL^RESP #ENDSCN = SW0C609 !#CMP2.28 10/02/08 BNETLIBS6136 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6136 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6136 * ******************************************************************************** #SCN = SW0C610 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6136 #NEWVERSION = 6137 #ADD 04419j0B ! 01OCT2008 swiftd ! Symptom: Balances not returned in prepaid Debit MasterCard ! cash back transactions. ! Problem: Data in sem.addl^amt.info was being overwritten by ! data from the pos^bal^tkn. ! Fix: Altered code so that the balance is returned in ! prepaid Debit MasterCard cash back transactions. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #476157. #REPLACE 07754Z01 PSTM^FRMT^AMT^TO^SEM^AMT int cnt := 0; #ADD 07962c03 SUB^CONVERT^AMT ! ! If this is a cash back tran, the first instance of ! DE 54 will hold the cash back details. ! If currency conversion is required, the second ! instance of DE 54 will hold currency conversion values. ! The following routine determines how many instances of ! DE54 exist before the pos^bal^tkn is examined. ! If the pos^bal^tkn exists, its values are placed ! in the first available instance. ! if addl^amt^bit^d then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); if cnt > $occurs( sem.addl^amt.info ) then begin cnt := 0; end; end end; i := cnt; #DELETE 07962c04 SUB^CONVERT^AMT #ADD 07962c0l SUB^CONVERT^AMT cnt := cnt + 1; #REPLACE 07962c0m SUB^CONVERT^AMT lgth := ( cnt ) * 20; #DELETE 07962c0o SUB^CONVERT^AMT #ADD 07962c0u SUB^CONVERT^AMT if cnt >= 1 then begin ! ! Find and eliminate Amount type 40 ! for i := 0 to ( $occurs( sem.addl^amt.info ) - 1 ) do begin init( de54^info[ i ], " ", wlen( de54^info[ i ] ) ); end; ! for loop to initialize temp storage k := 0; for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ <> bnet^amt^typ^cb^d then begin move( de54^info[ k ], sem.addl^amt.info[ i ] ); k := k + 1; end; ! if amount type is not 40 end; ! of amount count for init( sem.addl^amt, " ", $len( sem.addl^amt ) ); if k > 0 then begin for i := 0 to k - 1 do begin move( sem.addl^amt.info[ i ], de54^info[ i ] ); end; ! of for lgth := $len( sem.addl^amt.info ) * k; call integer^ascii^( sem.addl^amt.lgth, lgth ); end ! more than cash back amt else begin ! ! no amounts to move back in ! addl^amt^bit^d := 0; end; end; ! multiple amount types #DELETE 07962Z01/07962Z18 SUB^CONVERT^AMT #ENDSCN = SW0C610 !#CMP2.28 10/06/08 BNETLIBS6137 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6137 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6137 * ******************************************************************************** #SCN = SW0C615 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6137 #NEWVERSION = 6138 #ADD 04419k0B ! 06OCT2008 swiftd ! Symptom: A more meaningful response code is needed. ! Problem: The Banknet interface currently maps an external ! response code of "61" to an internal response code of ! "050". This mapping is unhelpful, as the "050" response ! code is very generic. ! Fix: Other interfaces map to a response code of "204" when a ! Banknet response code of "61" is received, so that ! value will also be used in the Banknet interface. ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #476989. #REPLACE 11655 SEM^FRMT^RESP^CDE^TO^PSTM "61",! Exceeds approval amt limit ! "204",! Enter less amt ! #ENDSCN = SW0C615 !#CMP2.28 10/10/08 BNETLIBS6138 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6138 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6138 * ******************************************************************************** #SCN = SW0C618 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6138 #NEWVERSION = 6139 #ADD 04419l0D ! 10OCT2008 RoyK ! Symptom: MasterCard is rejecting SEM 0100 Balance Inquiry ! requests. ! Problem: Banknet interface is sending "30" instead of "00" in ! "From Account" field of DE-3 (Processing Code) sent ! in the outgoing requests for balance inquiry messages. ! Fix: Modified the interface to move "00" in the "From ! Account" field of DE-3(processing code) for outgoing ! balance inquiries. ! Proc modified: pstm^frmt^tran^to^sem^proc^cde. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #474365. #ADD 09587N00 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if sem.proc^cde = sem^pmnt^txn^d or sem.proc^cde = sem^bal^inq^d then #DELETE 09587N01 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ENDSCN = SW0C618 !#CMP2.28 10/15/08 BNETLIBS6139 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6139 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6139 * ******************************************************************************** #SCN = SW0C622 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6139 #NEWVERSION = 6140 #ADD 04419m0D ! 14OCT2008 bensone ! Symptom: MasterCard is rejecting prefix logons. ! Problem: Banknet Release 08.2 Mandates added support for prefix ! logon by group, alternate groups and alternate prefix ! by group, but omitted the condition where only the ! prefix is used. ! Fix: Add back the support for logon by prefix only. Limit ! alternate logons to GSI configurations. ! Proc modified: sem^frmt^nmm^request. ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #476600 #ADD 11121 SEM^FRMT^NMM^REQUEST int grp^idx := 0; int grp^lgth := 0; #REPLACE 11154c00 SEM^FRMT^NMM^REQUEST call integer^ascii^( sem.nmm^info^cde, nmm^info^cde ); #DELETE 11154c01/11155c01 SEM^FRMT^NMM^REQUEST #DELETE 11218 SEM^FRMT^NMM^REQUEST #ADD 11219 SEM^FRMT^NMM^REQUEST ! Set DE 2 with group, prefix, GSI or prefix by GSI ! ! if ICF/E LOGON TYPE = P then ! pct.options.logon^typ = nmm^logon^prefix^l ! if ICF/E LOGON TYPE = G then ! pct.options.logon^typ = nmm^logon^group^l ! if ICF/E ALTERNATE HOST = Y then ! pct.options.alt^host = True ! pct.options.logon^typ = nmm^logon^prefix^l ! if ICF/E ALTERNATE HOST = N then ! pct.options.alt^host = False ! if ICF/E SWITCH ID = any BNIIF BANKNET MCI ID then ! global gsi^used = True ! if ICF/E SWITCH ID <> any BNIIF BANKNET MCI ID then ! global gsi^used = False ! Logon Type Non-GSI GSI GSI Alt Host ! Prefix On 001 065(Prefix by GSI) 067(Prefix by GSI) ! Prefix Off 002 066(Prefix by GSI) 068(Prefix by GSI) ! ! Group On 061 061 063 ! Group Off 062 062 064 ! ! ! If the MCI ID is more than 5 bytes long, set the PAN to the ! last five digits of the identifier. Set grp^idx to the ! offset into the MCI ID. The length, grp^lgth, is always 5. ! grp^lgth := 5; if max^group^lgth^g = 5 then begin grp^idx := 0; end else begin grp^idx := 1; end; ! ! If the prefix is blanks prefix^lgth will be 0. ! if $param( prefix ) and prefix <> blanks for max^prefix^lgth^l then begin if prefix = "59" then begin return false; end else begin prefix^lgth := $min( prefix^lgth, max^prefix^lgth^l ); end; end; ! ! Only GSI users can use DE 70—Network Management Information ! Codes 063 through 068. Here we determine which one to use ! based on gsi^used^g, pct.options.logon^typ and ! pct.options.alt^host. ! nmm^info^cde^wrk := nmm^info^cde; if gsi^used^g then begin if pct.options.alt^host then begin case nmm^info^cde of begin nmm^logon^prefix^l -> begin ! ! 067 Alternate Prefix sign-on (by GSI) ! set ( nmm^info^cde^wrk, nmm^logon^prefix^alt^l ); end; nmm^logoff^prefix^l -> begin ! ! 068 Alternate Prefix sign-off (by GSI) ! set ( nmm^info^cde^wrk, nmm^logoff^prefix^alt^l ); end; nmm^logon^group^l -> begin ! ! 063 Alternate GSI sign-on ! set ( nmm^info^cde^wrk, nmm^logon^group^alt^l ); end; nmm^logoff^group^l -> begin ! ! 064 Alternate GSI sign-off ! set ( nmm^info^cde^wrk, nmm^logoff^group^alt^l ); end; otherwise -> ; end; ! end-case end ! of pct.options.alt^host else if pct.options.logon^typ = nmm^logon^prefix^l then begin case nmm^info^cde of begin nmm^logon^prefix^l -> begin ! ! 065 Prefix sign-on (by GSI) ! set ( nmm^info^cde^wrk, nmm^logon^prefix^gsi^l ); end; nmm^logoff^prefix^l -> begin ! ! 066 Prefix sign-off (by GSI) ! set ( nmm^info^cde^wrk, nmm^logoff^prefix^gsi^l ); end; otherwise -> ; end; !end-case end; !of prefix signon by GSI call integer^ascii^( sem.nmm^info^cde, nmm^info^cde^wrk ); end; !GSI Logon ! ! Set DE 2 based on DE 70—Network Management Information Code ! @pan^ptr := @sem.pan.num; case nmm^info^cde^wrk of begin nmm^logon^prefix^l, nmm^logoff^prefix^l -> begin ! ! Prefix only (001, 002) ! pan^ptr ':=' prefix for prefix^lgth -> @pan^ptr; end; nmm^logon^group^l, nmm^logoff^group^l, nmm^logon^group^alt^l, nmm^logoff^group^alt^l -> begin ! ! Group or GSI only (061, 062, 063, 064) ! pan^ptr ':=' group[ grp^idx ] for grp^lgth -> @pan^ptr; end; otherwise -> ! ! GSI followed by Prefix (065, 066, 067, 068) ! begin pan^ptr ':=' group[ grp^idx ] for grp^lgth -> @pan^ptr; pan^ptr ':=' prefix for prefix^lgth -> @pan^ptr; end; end; !end-case ! ! Calculate the length of DE 2 ! prefix^lgth := @pan^ptr '-' @sem.pan.num; call integer^ascii^( sem.pan.lgth, prefix^lgth ); #DELETE 11220 /11246 SEM^FRMT^NMM^REQUEST #ENDSCN = SW0C622 !#CMP2.28 10/15/08 BNETLIBS6140 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6140 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6140 * ******************************************************************************** #SCN = SW0C623 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6140 #NEWVERSION = 6141 #ADD 04419n0C ! 14OCT2008 engelk ! Symptom: The interface was always adding the POS DATA1 (CH) token ! on inbound POS requests, even when no data was available ! for it. CVC result in SEM responses was always set to ! "P", CVC 2 not processed (issuer temporarily ! unavailable). ! Problem: Code was added to initialize the CH token using ! tkn^main^convert instead of initializing it to spaces, ! as was previously done. This caused the online limit ! field of the CH token to be initialized to zero. The ! interface would then add the token if it were not all ! spaces. This resulted in the interface always adding ! the CH token. When this empty CH token's blank card ! verify flag 1 field was subsequently interrogated during ! BASE24 response processing, the interface would set the ! CVC result to "P", even overwriting a valid value set ! based upon the card verify flag in the PS50 token. ! Fix: Added an additional variable to keep track of whether ! valid data was placed in the CH token, so that it would ! be added only when necessary. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #478844 #REPLACE 13715 SEM^FRMT^XRQST^TO^PSTM^0200 add^pos^data1 := false, #REPLACE 14246c00 SEM^FRMT^XRQST^TO^PSTM^0200 add^pos^data1 := true; #ADD 14246c0G SEM^FRMT^XRQST^TO^PSTM^0200 add^pos^data1 := true; end; ! uk domestic maestro if add^pos^data1 then #DELETE 14246c0H/14246c0I SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 14294c02 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! pos^data1^tkn needs to be added ! #ENDSCN = SW0C623 !#CMP2.28 10/20/08 BNETLIBS6141 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6141 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6141 * ******************************************************************************** #SCN = SW0C625 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6141 #NEWVERSION = 6142 #ADD 04419o0O ! 20OCT2008 BhattaD ! Symptom: Interface is sending a Recurring Payment Transaction ! from MasterCard into Base24 as a Purchase. ! Problem: For the incoming Recurring Payment transactions, the ! interface is expecting DE-48 (Transaction Category Code) ! to be "T" (Phone, Mail or E-Commerce Order) before it ! flags the transaction as Recurring Payment request. As ! per Mastercard specifications, this check should not ! exist. ! Fix: Modified the interface to remove the check for value ! "T" in DE-48 for Recurring Payment transactions. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #477421. #ADD 14233c07 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then #DELETE 14234 /14235 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0C625 !#CMP2.28 11/06/08 BNETLIBS6142 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6142 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6142 * ******************************************************************************** #SCN = SW0C658 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6142 #NEWVERSION = 6143 #ADD 04419p0F ! 17OCT2008 NamperJ ! Symptom: PCI - Event and Trace Messages Enhancement ! Problem: None ! Fix: Modified event message number 1880 to 1882. ! Proc modified: util^^collapse ! Dependency: Apply fix to BNETLIBS and run Make. Refer to ! BA60UD0C.SCNPCIE for a complete listing of dependencies. ! Reference: WO #070104-03 #REPLACE 15952 UTIL^^COLLAPSE call log^message ( 1882,, @sem, max^logger^l, net.myname, 2 ); #ENDSCN = SW0C658 !#CMP2.28 12/10/08 BNETG 6054 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6054 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6054 * ******************************************************************************** #SCN = SW0D008 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6054 #NEWVERSION = 6055 #ADD 00026$08 ! 10DEC2008 SaderC ! Symptom: UKDM Globalization and Maestro Best In Class for BASE24 ! Banknet Interface ! Problem: None ! Fix: 1. Added a new INT global saf^0120^msg^g. ! 2. Added a new literal typ^16^actvt^intrvl^l. ! 3. Added a new INT32 global actvt^intrvl^timr^g. ! 4. Added a new defines offline^completion^d ! pre^auth^tran^req^d, sta^dest^not^avail^d and ! sta^line^down^d. ! 5. Modified the sem^ncd^txn^d define to include ! merchant type "4814". ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETG, BNETLIBS and ! BNETS. Run Make. Replace BNETLOGM, BNETUPDT, and ! BNETMNWD. ! Reference: WO #080905-01 #REPLACE 00177I00/00177I02 define offline^completion^d = "2"#; define sta^dest^not^avail^d = "11"#; define sta^line^down^d = "12"#; #ADD 00233v09 ( x.merch^typ = "6012" or x.merch^typ = "4814" ) ) #; #DELETE 00233v0A #ADD 00326P02 literal typ^16^actvt^intrvl^l = 16; #ADD 00436 int(32) actvt^intrvl^timr^g := 360000d; #ADD 00448z03 int saf^0120^msg^g := false; #ADD 01366z03 int saf^0120^msg^g; #ADD 01366G0E int(32) actvt^intrvl^timr^g; #ADD 01366b06 pre^auth^tran^req^d = "06"#, #ENDSCN = SW0D008 !#CMP2.28 12/10/08 BNETLIBS6143 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6143 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6143 * ******************************************************************************** #SCN = SW0D009 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6143 #NEWVERSION = 6144 #ADD 04419q09 ! 10DEC2008 SaderC ! Symptom: UKDM Globalization and Maestro Best In Class for BASE24 ! Banknet Interface ! Problem: None ! Fix: 1. Added data element requirements for 0100/auth request ! message in UKDM transaction processing that differ ! from Non-UKDM transaction processing. ! 2. Added data element requirements for 0110/auth request ! response message in UKDM transaction processing that ! differ from Non-UKDM transaction processing. ! 3. Added support for new LCONF param SAF-0120-MESSAGES ! (Case #468734 - Banknet SAF). ! 4. Modified the interface to allow AVS and CVD2 data to ! be formatted if the interface is processing for UK ! Domestic Maestro. ! 5. Modified the interface to set fields used in ! preauth/preauth completion processing, including ! pstm.tran.tran^cde = "11", pstm.tran.pre^auth^hld ! and pstm.pre^auth^seq^num. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETG, BNETLIBS and ! BNETS. Run Make. Replace BNETLOGM, BNETUPDT, and ! BNETMNWD. ! Reference: WO #080905-01 #ADD 05329 PSTM^FRMT^0200^TO^XRQST int trk2^prsn := false; #ADD 05583N03 PSTM^FRMT^0200^TO^XRQST trk2^prsn := 1; #ADD 05614 PSTM^FRMT^0200^TO^XRQST trk2^prsn := 1; #ADD 05655N01 PSTM^FRMT^0200^TO^XRQST if track2^bit^d or ( uk^domestic^maestro^d and trk2^prsn ) then #DELETE 05655N02 PSTM^FRMT^0200^TO^XRQST #DELETE 05964c0A/05964c0r PSTM^FRMT^0200^TO^XRQST #ADD 06267 PSTM^FRMT^0200^TO^XRQST ( uk^domestic^maestro^d or not util^debit^crd^typ( pstm.rte.srv ) ) then #DELETE 06267N00/06267N01 PSTM^FRMT^0200^TO^XRQST #ADD 06331 PSTM^FRMT^0200^TO^XRQST if uk^domestic^maestro^d then begin ! ! Bits 12, 13, 37 and 41 will not be sent if POS Entry ! Mode is not '01x', '02x', '05x', '07x', '79x', '80x', ! '90x' and '91x'. ! if sem.pos^entry^mde <> "01" and sem.pos^entry^mde <> "02" and sem.pos^entry^mde <> "05" and sem.pos^entry^mde <> "07" and sem.pos^entry^mde <> "79" and sem.pos^entry^mde <> "80" and sem.pos^entry^mde <> "90" and sem.pos^entry^mde <> "91" then begin local^tim^bit^d := 0; local^dat^bit^d := 0; ref^num^bit^d := 0; crd^acpt^term^id^bit^d := 0; end; if pstm.tran.track2.byte[ 0 ] = "M" or pstm.tran.track2.byte[ 0 ] = "m" then begin crd^seq^num^bit^d := 1; move( sem.crd^seq^num, pstm.tran.mbr^num ); end; ! ! If track1^bit^d turned on and track2 present, then ! turn off track1 and turn on track2. ! if track1^bit^d and trk2^prsn then begin track1^bit^d := 0; track2^bit^d := 1; end; pin^bit^d := 0; sec^control^info^bit^d := 0; if not emv^data^bit^d and ( sem.pos^entry^mde = "05" or sem.pos^entry^mde = "07" ) then begin return resp^format^error^pos^l; end; if found^pos^data1^tkn then begin movd( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag, "001" ); call integer^ascii^( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.lgth, $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1. tag^data ) ); init( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data, " ", $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data ) ); movd( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag, "002" ); call integer^ascii^( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.lgth, $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2. tag^data ) ); init( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data, "0", $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data ) ); if pos^data1^tkn.retl^class^cde <> [ $len( pos^data1^tkn.retl^class^cde ) * [" "] ] then begin move ( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2.tag^data, pos^data1^tkn.retl^class^cde ); end; tag^lgth := $len( sem.adnl^data^natl. ukdm.rsn^onl^cde^sub^fld^1 ) + $len( sem.adnl^data^natl.ukdm. rtlr^clas^cde^sub^fld^2 ); call integer^ascii^( sem.adnl^data^natl.lgth, tag^lgth ); adnl^data^ntl^bit^d := 1; end; ! of found^pos^data1^tkn end; ! of uk^domestic^maestro^d #ADD 06601 PSTM^FRMT^0210^TO^XRESP if uk^domestic^maestro^d then begin if auth^id^resp^bit^d then begin movd( sem.auth^id^resp.byte[ 4 ], "00" ); end else begin if sem^referral^d( sem ) then begin sem.auth^id^resp ':=' [ $len( sem.auth^id^resp ) * ["0"] ]; auth^id^resp^bit^d := 1; end; ! of sem^referral^d end; ! of NOT auth^id^resp^bit^d end; ! of uk^domestic^maestro^d #ADD 07065 PSTM^FRMT^0210^TO^XRESP mrch^advc^cde^sub^fld^84.tag^data <> " " and not uk^domestic^maestro^d then #DELETE 07066 PSTM^FRMT^0210^TO^XRESP #ADD 08291 PSTM^FRMT^RESP^CDE^TO^SEM ! ! If the interface is processing for UK Domestic Maestro and ! the response code equals '55' (Invalid PIN) or ! response code equals '75' (PIN tries exceeded), ! then set the reponse code to '96' (System problem). ! if uk^domestic^maestro^d and ( rcode = "55" or rcode = "75" ) then begin rcode ':=' "96" end; #REPLACE 08298 PSTM^FRMT^RESP^CDE^TO^SEM not uk^domestic^maestro^d and #REPLACE 08577N01/08577N01 OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA if pstm.addr^typ = "98" and ( uk^domestic^maestro^d or not util^debit^crd^typ( pstm.rte.srv ) ) then #DELETE 08577N02 PSTM^FRMT^SEM^ADDL^DATA #ADD 09256N01 PSTM^FRMT^SEM^ADDL^DATA ( uk^domestic^maestro^d or not util^debit^crd^typ( pstm.rte.srv ) ) then #DELETE 09256N02 PSTM^FRMT^SEM^ADDL^DATA #ADD 11486 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN int strt^byte := 0; string .days^hld^ptr[ 0:2 ] := ["2 "]; #ADD 11594 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.merch^typ = "5542" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" and ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) then begin if sem.typ = sem^auth^request^d then begin movd ( pstm.tran.tran^cde, "11" ); if sem.ntl^pos^data.days^hld <> [ $len( sem.ntl^pos^data.days^hld ) * [" "] ] then begin movl( days^hld^ptr[ 1 ], sem.ntl^pos^data.days^hld, 2 ); call ascii^integer( days^hld^ptr, $occurs( days^hld^ptr ), pstm.tran.pre^auth^hld ); end else begin set( pstm.tran.pre^auth^hld, pct.pos.pre^auth^hld ); end; ! of NOT if sem.ntl^pos^data.days^hld <> movd( pstm.pt^srv^cond^cde, pre^auth^tran^req^d ); end ! of if sem.typ = sem^auth^request^d then else if sem.typ = sem^auth^advice^d then begin movd ( pstm.tran.tran^cde, "12" ); movd( pstm.pt^srv^cond^cde, pre^auth^tran^req^d ); end; ! of if sem.typ = sem^auth^advice^d then ! ! The first 4 bytes of pstm.pre^auth^seq^num must be set ! to the value in the last 4 bytes of DE 32 (acq^inst). ! The remaining 8 bytes of pstm.pre^auth^seq^num will be set ! to the value in the last 8 bytes of DE 7 (tran^dat^tim). ! call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); strt^byte := ( max^group^lgth^g - 4 ); if strt^byte >= 0 then begin movl( pstm.pre^auth^seq^num, sem.acq^inst.cde.byte[ strt^byte ], 4 ); end; movl( pstm.pre^auth^seq^num.byte[ 4 ], sem.tran^dat^tim.byte[ 2 ], 8 ); end; ! of if sem.merch^typ = "5542" and #ADD 15645 SEM^FRMT^XRVSL^TO^PSTM^0420 int strt^byte := 0; #ADD 15732 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.merch^typ = "5542" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" and ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) then begin ! ! The first 4 bytes of pstm.pre^auth^seq^num must be set ! to the value in the last 4 bytes of DE 32 (acq^inst). ! The remaining 8 bytes of pstm.pre^auth^seq^num will be set ! to the value in the last 8 bytes of DE 7 (tran^dat^tim). ! call integer^ascii^( sem.acq^inst.lgth, max^group^lgth^g ); strt^byte := ( max^group^lgth^g - 4 ); if strt^byte >= 0 then begin movl( pstm.pre^auth^seq^num, sem.acq^inst.cde.byte[ strt^byte ], 4 ); end; movl( pstm.pre^auth^seq^num.byte[ 4 ], sem.tran^dat^tim.byte[ 2 ], 8 ); end; ! of if sem.merch^typ = "5542" and #ENDSCN = SW0D009 !#CMP2.28 12/10/08 BNETS 60104FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60104 * ******************************************************************************** #SCN = SW0D012 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S000260F ! 10DEC2008 SaderC ! Symptom: UKDM Globalization and Maestro Best In Class for BASE24 ! BankNet Interface ! Problem: None ! Fix: 1. Added support for new LCONF param SAF-0120-MESSAGES ! (Case #468734 - BankNet SAF). ! 2. Added support for new LCONF param ! ACTVT-INTERVAL-TIMER. ! 3. Modified the interface to invoke a new UK Domestic ! Maestro procedure that performs UKDM specific ! processing. ! 4. Modified the interface to format messages with ! preauth/completion data for the Maestro Petrol ! transactions. ! Procs added: init^actvt ! tim^out^16^actvt^intrvl ! ukdm^pstm^0200^route ! Procs modified: cmd^actvt^sta ! cmd^warmboot ! cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^^initialization ! init^paramproc ! pstm^0200^request ! pstm^0200^route ! pstm^0220^force^post ! pstm^0420^reversal ! tim^^timeout ! tim^out^05^nmm ! tim^out^06^xnmm ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETG, BNETLIBS and ! BNETS. Run Make. Replace BNETLOGM, BNETUPDT, and ! BNETMNWD. ! Reference: WO #080905-01 #DELETE G011440T/G011440V CMD^ACTVT^STA #ADD G011440o CMD^ACTVT^STA #DELETE G011440p/G011441r SUB^FRMT^SEND^ACTVT #ADD G011442U SUB^FRMT^SEND^ACTVT call init^actvt( sta^idx ); #DELETE G011442V/G011442Y SUB^FRMT^SEND^ACTVT #ADD 02516j2D CMD^WARMBOOT ! ! Delete and reset the activation interval timer ! call timer^delete( tcb^g, typ^16^actvt^intrvl^l ); ! ! Reset the activation interval timer, if ENHANCED SESSION MGMT ! is turned on. ! if enhnc^session^mgmt^g then begin call timer^insert( tcb^g, actvt^intrvl^timr^g, typ^16^actvt^intrvl^l ); end; ! of if enhnc^session^mgmt^g #ADD O0259903 CMD^WARMBOOT^STORE^GLOBALS store^d( actvt^intrvl^timr^g ); store^d( saf^0120^msg^g ); #ADD E0259909 CMD^WARMBOOT^STORE^GLOBALS actvt^intrvl^timr^g := 360000d; saf^0120^msg^g := false; #ADD O025990B CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( actvt^intrvl^timr^g ); retrieve^d( saf^0120^msg^g ); #ADD 02666 INIT^^INITIALIZATION ! ! Reset the activation interval timer, if ENHANCED SESSION MGMT ! is turned on. ! if enhnc^session^mgmt^g then begin call timer^insert( tcb^g, actvt^intrvl^timr^g, typ^16^actvt^intrvl^l ); end; ! of if enhnc^session^mgmt^g #ADD 02675 INIT^^INITIALIZATION ?section init^actvt ?page "init^actvt" !##################################################################### !# # !# init^actvt # !# # !# This procedure formats and sends a network management # !# message to activate the station. # !# # !# INPUT PARAMETERS: # !# sta^x - station index in PCT table # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc init^actvt( sta^idx ); int sta^idx; begin wlform( collapse^err, "FAILURE TO SEND ACTIVATE, MESSAGE " ',' "COLLAPSE ERROR " ) wlform( frmt^err, "FAILURE TO SEND ACTIVATE, FORMATTING ERROR " ) wlform( timr^err, "FAILURE TO SEND ACTIVATE, TIMER TABLE ERROR " ) struct .csem( nmm^def ); struct .sem( nmm^def ); struct .userbuf( timer^userbuf^def ); int extlgth := 0; int nmm^info^cde := 0; int .timer( timer^def ); set( nmm^info^cde, nmm^actvt^l ); if not sem^frmt^nmm^request( sem, nmm^info^cde, ! group !, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then begin call log^message^( 2951, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^warn^l ); return; end; ! of if not sem^frmt^nmm^request( init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^idx ); if find^specific^timer( tcb^g, type^nmm^l, nmm^info^cde, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin ! ! A session activation message is outstanding for this ! station, so return. ! return; end; if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, nmm^info^cde ) ) then begin call log^message^( 2953, ! routing^code !, @timr^err, net.myname, evt^msg^severity^err^l ); return; end; if not util^^collapse( sem, csem, extlgth ) then begin call delete^this^timer( tcb^g, timer ); call log^message^( 2952, ! routing^code !, @collapse^err, net.myname, evt^msg^severity^warn^l ); return; end; call util^send^sem( csem, extlgth, pct.station[ sta^idx ].nam ); end; ! of proc init^actvt #ADD 03941 INIT^PARAMPROC wlform( inv^actvt^timr, "ACTVT-INTERVAL-TIMER param contains in" ','"valid data. Default of 360000 will be used." ) #ADD O0394502 INIT^PARAMPROC "P", "SAF-0120-MESSAGES ", "P", "ACTVT-INTERVAL-TIMER ", #ADD O039960M INIT^PARAMPROC ! ! SAF-0120-MESSAGES ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin saf^0120^msg^g := true; end else begin saf^0120^msg^g := false; end; end; ! ! ACTVT-INTERVAL-TIMER ! if not ferror then begin if not ascii^double( lconf.param^msg.ptxt, lconf.param^msg.plgth, actvt^intrvl^timr^g ) or actvt^intrvl^timr^g < 100d or actvt^intrvl^timr^g > 8640000d then begin actvt^intrvl^timr^g := 360000d; call log^message^( 4035, ! routing code !, @inv^actvt^timr, net.myname, evt^msg^severity^warn^l ); end; end; #ADD 04731 PSTM^0200^REQUEST if uk^domestic^maestro^d then begin move ( pstm.tran.dest, pct.fiid ); end; #ADD 04859 PSTM^0200^ROUTE string dest[ 0:15 ] := [ 16 * [" "] ]; #ADD 04864\03 PSTM^0200^ROUTE dest ':=' susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ); #REPLACE 04883 PSTM^0200^ROUTE call util^pos^alt^routing( pstm, dest ); #ADD 04884 PSTM^0200^ROUTE if uk^domestic^maestro^d then begin call ukdm^pstm^0200^route( susp, substate, dest ); end; #REPLACE 04884R01 PSTM^0200^ROUTE call util^send^pstm( pstm, dest ); #ADD 04982 PSTM^0220^FORCE^POST struct .csem( sem^def ); #REPLACE 04986j00 PSTM^0220^FORCE^POST int extlgth := 0; #REPLACE 04986j02 PSTM^0220^FORCE^POST int service^typ := debit^l; #ADD G0499309 PSTM^0220^FORCE^POST if pct.options.auth^only or pstm.tran.tran^cde = "11" or ( pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) then begin set( service^typ, credit^l ); end; #ADD 05011j05 PSTM^0220^FORCE^POST if response := pstm^frmt^0220^to^xadv( pstm, sem, susp.prikey, avs^typ ) and not util^^collapse( sem, csem, extlgth ) then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^format^error^l ); end ! of if response := pstm^frmt^0220^to^xadv( else if saf^0120^msg^g and sem.typ = sem^auth^advice^d then begin call util^saf^add( csem, extlgth, pos^l, service^typ ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ) ); end ! of saf^0120^msg^g #DELETE 05011R01/05016 PSTM^0220^FORCE^POST #ADD 07974k03 TIM^^TIMEOUT !16! call tim^out^16^actvt^intrvl( timer, userbuf ); #ADD 08178 TIM^OUT^05^NMM nmm^info^cde = nmm^actvt^l or #ADD 08243 TIM^OUT^06^XNMM if timer.subtype = nmm^actvt^l then begin if pct.options.acq then begin call init^echotest( sta^x, acq^l ); end; if pct.options.iss then begin call init^echotest( sta^x, iss^l ); end; return; end; #ADD 08468k3D TIM^OUT^15^CLR^OLD^KEYS ?section tim^out^16^actvt^intrvl ?page " - tim^out^16^actvt^intrvl" !##################################################################### !# # !# tim^out^16^actvt^intrvl # !# # !# This procedure processed an expired session activation # !# interval timer. # !# # !# INPUT PARAMETERS: # !# timer - Expired timer # !# userbuf - Expired timer's userbuf extension # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc tim^out^16^actvt^intrvl( timer, userbuf ); int .timer( timer^def ); int .userbuf( timer^userbuf^def ); begin wlform( no^stations, "FAILURE TO SEND ACTIVATE, NO STATIONS " ',' "DEFINED " ) int num^of^sta := -1; int sta^idx := 0; if enhnc^session^mgmt^g then begin num^of^sta := pct.status.num^of^sta - 1; end; if num^of^sta < 0 then begin call log^message^( 2890, ! routing^code !, @no^stations, net.myname, evt^msg^severity^warn^l ); end; ! of if num^of^sta < 0 then while sta^idx <= num^of^sta do begin if pct.station[ sta^idx ].up then begin call init^actvt( sta^idx ); end; ! of if pct.station[ sta^idx ].up then sta^idx := sta^idx + 1; end; ! of while sta^idx <= num^of^sta do ! ! Start a new session activation timer. ! call timer^insert( tcb^g, actvt^intrvl^timr^g, typ^16^actvt^intrvl^l ); end; ! of proc tim^out^16^actvt^intrvl ?section ukdm^pstm^0200^route ?page "ukdm^pstm^0200^route" !##################################################################### !# # !# ukdm^pstm^0200^route # !# # !# This procedure performs additional formatting on a response # !# denial to the local AUTH for UK Domestic Maestro transactions. # !# # !# INPUT PARAMETERS: # !# susp - pointer to suspense record # !# substate - ILF substate # !# dest - BASE24 transaction originator or authorizer # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### int proc ukdm^pstm^0200^route( susp, substate, dest ); int .susp( susp^bnet^def ); int substate; string .dest; begin int .pstm( pstm^def ) := @susp.intrn^msg; if dest <> susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ) then begin return false; end; pstm.compl^req ':=' offline^completion^d; if substate = sub^timeout^l then begin movd( pstm.rte^stat, sta^dest^not^avail^d ); end else begin movd( pstm.rte^stat, sta^line^down^d ); end; if pstm.auth^ind2 = "9" then begin movd( pstm.auth^ind2, "P" ); movd( pstm.rte.pri, "AUTHH " ); end else if pstm.rte.auth^ind = "9" then begin movd( pstm.rte.auth^ind, "P" ); movd( pstm.rte.pri, "AUTHH " ); end; return false; end; ! of proc ukdm^pstm^0200^route #ENDSCN = SW0D012 !#CMP2.28 12/19/08 BNETS 60105FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60105 * ******************************************************************************** #SCN = SW0D036 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T000260Z ! 19DEC2008 engelk ! Symptom: Cash back amount was returned in purchase with cash back ! responses. ! Problem: DE-54 (additional amounts) must not be included with an ! amount type of 40 (cash back amount) on purchase with ! cash back responses. This was corrected for SEM ! responses formatted from PSTM responses, but not for ! time-out or format error situations. ! Fix: Modified the code to remove DE-54 amount type 40 from ! SEM responses generated for time-out or format error ! situations. ! Procs modified: sem^request^deny ! Subproc added: elim^de54^cash^back^amt ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #484440 #ADD 06705 SEM^REQUEST^DENY struct de54^info[ 0 :( $occurs( resp.addl^amt.info ) - 1 ) ]; begin struct acct^typ; begin string byte [0:1]; end; struct amt^typ; begin string byte [0:1]; end; struct crncy^cde; begin string byte [0:2]; end; string typ^amt; struct amt; begin string byte [0:11]; end; end; #ADD 06711 SEM^REQUEST^DENY ?page "elim^de54^cash^back^amt" !################################################################# !# # !# elim^de54^cash^back^amt # !# # !# This subproc eliminates the cash back amount (amount type # !# 40) from SEM responses for purchase with cash back. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc elim^de54^cash^back^amt; begin int cnt := 0; int i := 0; int k := 0; int lgth := 0; if not addl^amt^bit^d then begin ! ! no action required ! return; end; ! ! Determine whether amount type 40 (cash back amount) ! is present. If so, it must be removed as it cannot ! be returned in SEM responses. ! if ascii^integer^( resp.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( resp.addl^amt.info ); if cnt > $occurs( resp.addl^amt.info ) then begin cnt := 0; end; end; ! if ascii^integer^ on length is successful ! if cnt = 0 then begin ! ! No amounts present in DE-54. Turn bit off. ! No additional processing required to eliminate ! cash back amount. ! addl^amt^bit^d := 0; return; end; ! ! Initialize the temporary storage location and move amounts ! having a type other than 40 into it. ! for i := 0 to ( $occurs( resp.addl^amt.info ) - 1 ) do begin init( de54^info[ i ], " ", wlen( de54^info[ i ] ) ); end; ! for loop to initialize temp storage k := 0; for i := 0 to ( cnt - 1 ) do begin if resp.addl^amt.info[ i ].amt^typ <> bnet^amt^typ^cb^d then begin move( de54^info[ k ], resp.addl^amt.info[ i ] ); k := k + 1; end; ! if amount type is not 40 end; ! of amount count for ! ! initialize DE-54 and move any saved amounts back in ! init( resp.addl^amt, " ", $len( resp.addl^amt ) ); if k > 0 then begin for i := 0 to k - 1 do begin move( resp.addl^amt.info[ i ], de54^info[ i ] ); end; ! of for lgth := $len( resp.addl^amt.info ) * k; call integer^ascii^( resp.addl^amt.lgth, lgth ); end ! more than cash back amt else begin ! ! no amounts to move back in; turn DE-54 off ! addl^amt^bit^d := 0; end; end; ! end subproc elim^de54^cash^back^amt ! ?page #REPLACE 06718T00 SEM^REQUEST^DENY call elim^de54^cash^back^amt; #ENDSCN = SW0D036 !#CMP2.28 01/06/09 BNETLIBS6144 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6144 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6144 * ******************************************************************************** #SCN = SW0D046 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6144 #NEWVERSION = 6145 #ADD 04419r0U ! 05JAN2009 engelk ! Symptom: Transaction subtype (BM) token contains garbage. ! Problem: An attempt was made to initialize the transaction ! subtype token structure via a call to tkn^main^convert. ! However, the token id was not set prior to the call, so ! no token initialization took place. Since ! tkn^main^convert may result in some fields being ! initialized to something other than spaces, this token ! structure should not be compared with spaces to ! determine whether the token should be added. ! Fix: Added code to set the token id prior to the call to ! tkn^main^convert. Added code to set a flag to indicate ! when the transaction subtype token should be added. ! Modified the code to test the flag instead of comparing ! the structure to spaces. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #482728 #REPLACE 09994 SEM^FRMT^AMT^TO^PSTM^AMT int add^subtyp^tkn := false; #REPLACE 10217A0R SUB^CONVERT^AMT movd( tkn^id, txn^subtyp^tkn^id^d ); #ADD 10217A0d SUB^CONVERT^AMT add^subtyp^tkn := true; #REPLACE 10298 /10298A04 SUB^CONVERT^AMT if add^subtyp^tkn then begin ! ! ! Check here to see if the txn^subtyp^tkn exists, if ! ! it does not, then add it. ! ! ! #REPLACE 10298A06/10298A0E SUB^CONVERT^AMT tkn^id ':=' txn^subtyp^tkn^id^d; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @txn^subtyp^tkn^ptr, tkn^lgth, ! ascii format flag !, pos^userdata ); #REPLACE 10298A0G/10298A0H SUB^CONVERT^AMT if tkn^result = tkn^does^not^exist^l then begin #DELETE 10298A0J/10298A0L SUB^CONVERT^AMT #REPLACE 10298A18 SUB^CONVERT^AMT end; ! of if tkn^result = tkn^does^not^exist^l ! #REPLACE 10298A1A SUB^CONVERT^AMT end; ! of if subtype token needs to be added ! #ENDSCN = SW0D046 !#CMP2.28 01/07/09 BNETS 60106FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60106 * ******************************************************************************** #SCN = SW0D048 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U000260G ! 07JAN2009 HazraR ! Symptom: MasterCard is rejecting 0620 admin messages from the ! interface. ! Problem: The Interface is formatting and sending a 0620 message ! to MasterCard when it fails to expand incoming messages ! from MasterCard. The hope was that MasterCard would ! take the reject and process the message that was ! rejected per MasterCard and the customer's agreements. ! According to spec though, MasterCard does not process ! an 0620 message from members in this manner. 0620 ! messages from members to MasterCard are Text messages ! only and are not processed by the MasterCard networks. ! Fix: Modified the interface not to send a 0620 admin message ! on expand failure of the incoming message. ! Modified proc: sem^^input^from^station ! Dependency: Apply changes to BNETS and BNETLIBS. Run Make. ! Reference: Case #480305 #DELETE 05335h01 SEM^^INPUT^FROM^STATION #ENDSCN = SW0D048 !#CMP2.28 01/07/09 BNETLIBS6145 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6145 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6145 * ******************************************************************************** #SCN = SW0D049 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6145 #NEWVERSION = 6146 #ADD 04419s0J ! 07JAN2009 MhaskaS ! Symptom: Interface is rejecting 0100 Authorization Requests for ! not being able to expand DE-61. ! Problem: When the EMV module is not bound in and the incoming ! 0100 message includes DE-55, then a EMV dummy proc gets ! invoked to expand DE-55. This proc returns the value ! "True" and does not set the length of DE-55. Since the ! message pointer PTR continues to point to DE-55 while ! attempting to parse next field i.e DE-61, it gets an ! expand failure on DE-61. ! Fix: Modified the interface to skip DE-55 when EMV Module is ! not bound in. ! Modified proc: util^expand^sem ! Dependency: Apply fixes to BNETLIBS and run Make. ! Reference: Case #480291. ! 07JAN2009 HazraR ! Symptom: MasterCard is rejecting 0620 admin messages from the ! interface. ! Problem: The Interface is formatting and sending a 0620 message ! to MasterCard when it fails to expand incoming messages ! from MasterCard. The hope was that MasterCard would ! take the reject and process the message that was ! rejected per MasterCard and the customer's agreements. ! According to spec though, MasterCard does not process ! an 0620 message from members in this manner. 0620 ! messages from members to MasterCard are Text messages ! only and are not processed by the MasterCard networks. ! Fix: Modified the interface to delete the proc sending the ! 0620 reject messages. ! Deleted proc: util^send^reject ! Dependency: Apply changes to BNETS and BNETLIBS. Run Make. ! Reference: Case #480305 #ADD 18438 UTIL^EXPAND^SEM length := 0; #ADD 18443 UTIL^EXPAND^SEM ! ! Here length equals zero indicates that EMV module ! is not bound in. Calculate the length of DE-55 ! and adjust PTR. ! if length = 0 then begin ! ! Translate total length of DE-55 if necessary. ! if ebcdic^g then begin call translate( ptr, $len( hdr.emv^data.lgth ), ebcdic^to^ascii^l ); end; if not ascii^integer( ptr, $len( hdr.emv^data.lgth ), length ) then begin return ( index + 1 ); end; length := length '+' 3; end; #DELETE 23628 /23747 UTIL^SEND^REJECT #ENDSCN = SW0D049 !#CMP2.28 02/05/09 BNETS 60107FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60107 * ******************************************************************************** #SCN = SW0D073 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V000260I ! 05FEB2009 wielerk ! Symptom: The interface is not processing Activate messages in ! the manner required by Mastercard. ! Problem: The Interface is allowing issuer traffic from ! Mastercard while only sending a activate message. ! Fix: Modified the interface to send a logon after receiving ! an activate response if the process is configured as ! issuer. ! Modified proc: sem^actvt^response ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #480068. ! ! 05FEB2009 wielerk ! Symptom: The interface is not processing Activate messages in ! the manner required by Mastercard. ! Problem: The Interface is not allowing acquirer traffic from ! Base24 to be sent to Mastercard without being logged on ! for issuer traffic. ! Fix: Modified the interface to set internal flags that will ! allow Base24 traffic to be sent when the activate ! response is received. ! Modified proc: sem^actvt^response ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #486372. #ADD G0537437 SEM^ACTVT^RESPONSE pct.options.iss and #ADD G053743D SEM^ACTVT^RESPONSE if not pct.auto^signon^on^strt or not pct.options.iss then begin call util^set^group^logon( nmm^logon^group^l, both^l, acq^l ); set( pct.station[ sta^x ].t^o^ctr, 0 ); end; #ENDSCN = SW0D073 !#CMP2.28 02/09/09 BNETLIBS6146 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6146 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6146 * ******************************************************************************** #SCN = SW0D078 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6146 #NEWVERSION = 6147 #ADD 04419t0Z ! 09FEB2009 frederr ! Symptom: Customers are unable to match issuer request/response ! messages with the reversals for said request/response ! due to the reversal PSTM's original data's date/time ! being different than the request's tran date/time. ! Problem: Original issuer requests set date and time using ! DE-7 (tran date/time) adjusted to the local time zone. ! The PSTM's original date/time is set using DE-90 ! (original date/time) which is based on an unadjusted ! DE-7. ! Fix: Modified code to use the date/time of the internal ! message to set the date/time of the original data in ! the reversals. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS and run MAKE. ! Reference: Case #488274. #DELETE 15700 /15701 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15704 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! field 90 date/time is from field 7 of original SEM ! field 7 is GMT, so use date/time from PSTM which is local ! move( pstm.orig^data.trn^tim, pstm.tran^tim ); movl( pstm.orig^data.trn^dat, pstm.tran^dat.mm, $len( pstm.orig^data.trn^dat ) ); #ENDSCN = SW0D078 !#CMP2.28 02/10/09 BNETS 60108FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60108 * ******************************************************************************** #SCN = SW0D079 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W000260P ! 10FEB2009 frederr ! Symptom: The interface is SAFing a SEM advice message even if a ! format error occurs when the SEM advice is formatted ! from a PSTM 0220. ! Problem: The Interface does not error out a format error from ! a PSTM 0220 message if that partial message can still ! be collapsed. The reason is that the check uses an ! 'and' statement instead of an 'or' when checking if the ! format completed and the collapse worked. ! Fix: Modified the interface to use an 'or' instead of an ! 'and' when checking that the formatting of the SEM ! advice and the collapse of said advice completed without ! error. ! Modified proc: pstm^0220^force^post ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #488473. #REPLACE T0501104 PSTM^0220^FORCE^POST avs^typ ) or #ENDSCN = SW0D079 !#CMP2.28 02/18/09 BNETDDLS6031 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6031 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6031 * ******************************************************************************** #SCN = SW0D099 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6031 #NEWVERSION = 6032 #ADD 00262e0N * 18FEB2009 bensone * Symptom: Banknet Release 09.1 Mandates. * Effective Date: 16 June 2009 * Problem: None. * Fix: Rearrange DE 48, add new entry for SE 13, add inControl * comments, expand SE33 and user field. Rearrange Prikey * definition. Add security field to TIMER-USERBUF. * Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, * BNETLIBS, BNETS, COBTKN, DDLPSTKN, PSTKNCVS, and * PSTKNID. Run Make. * New files: ILB0902M, ILB0902R, ILB0902S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0902M. Run the ILF conversion using ILB0902R. * Replace BNETLOGM, BNETMNWD and BNETUPDT. * Reference: WO #081007-04 #ADD 00932 SEM * 06 Integrated circuit card code read - Paypass Mapping Service ! * applied ! #ADD 00932Y01 SEM * 08 PAN auto-entry via contactless M/Chip - Paypass Mapping Service ! * applied ! #ADD 01157H02 SEM * * Payment Transaction Type Indicator * Subfield tag = 77 * Value that identifies the type of payment transaction taking * place. * 06 pmnt-txn-typ-ind-sub-fld-77. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(3). #DELETE 01157B00/01157B05 SEM #ADD 01157L0O SEM 06 cvc2-sub-fld-92. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9(3). 08 user-fld pic x(3). 06 visa-cvv2-sub-fld-92 redefines cvc2-sub-fld-92. #DELETE 01157K09/01157E0A SEM #ADD 01157e02 SEM * 20 - inControl RCN Spend Control #ADD 01157R0J SEM * L - inControl - Geographic Restriction * M - inControl - Transaction Type Restriction * N - inControl - Transaction Frequency Limit #ADD 01157a0E SEM * P - inControl - Time or Date Restriction #ADD 01157Y0R SEM 08 prod-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). #DELETE 01157a1M/01157a1V SEM #ADD 01157e0J SEM * * Mobile Phone Top-up Request Data * Subfield tag = 13 * Contains the Mobile Phone Top-up Request Data * 06 mptu-rqst-sub-fld-13. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(47). #REPLACE 01157e0V SEM 04 user-fld pic x(35). #ADD 02701 SAF-BNET 02 pan pic x(19). 02 term-id pic x(8). 02 seq-num pic x(12). 02 tran-dat-tim pic x(10). #DELETE 02702 /02705 SAF-BNET #ADD 02733 SAF-BNET 04 filler pic x. #ADD 02739 SAF-BNET 04 security pic x(8). #ENDSCN = SW0D099 !#CMP2.28 02/18/09 BNETG 6055 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6055 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6055 * ******************************************************************************** #SCN = SW0D100 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6055 #NEWVERSION = 6056 #ADD 00026%0H ! 18FEB2009 bensone ! Symptom: Banknet Release 09.1 Mandates. ! Effective Date: 16 June 2009 ! Problem: None. ! Fix: Source in new token id e^com^addl^data^tkn^id^d (F1). ! Add new defines concat( s ), pos^pmnt^adj^d( x ), ! pos^preauth^match^d( x ), sem^preauth^match^d( x ), ! mobile^phone^top^up^d, etc. Source in external for ! get^iso^dec^places. ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLPSTKN, PSTKNCVS, and ! PSTKNID. Run Make. ! New files: ILB0902M, ILB0902R, ILB0902S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0902M. Run the ILF conversion using ILB0902R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #081007-04 #ADD 00026v0Y ? e^com^addl^data^tkn #ADD 00026v0m ! e^com^addl^data^tkn #ADD 00040v02 define concat( s ) = s for $len( s )#; #ADD 00166v02 define pos^pmnt^adj^d( x ) = ( ( x.tran.tran^cde = "22" ) and ( ( found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = pmnt^from^3rd^prty^d ) or ( x.retl^sic^cde = "6532" or x.retl^sic^cde = "6533" ) ) )#; #ADD 00166v09 define pos^preauth^match^d( x ) = ( ( x.retl^sic^cde = "5542" ) and ( util^debit^crd^typ( x.rte.srv ) ) )#; define sem^preauth^match^d( x ) = ( ( x.merch^typ = "5542" ) and ( x.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) )#; #ADD 00175x02 define mobile^phone^top^up^d = "4814"#; #ADD 00226i04 define rvsl^error^d = "06"#; #ADD 00233%01 ( x.merch^typ = "4814" and x.addl^data.info.tran^cat^cde = "Z" ) ) )#; #DELETE 00233%02 #ADD 00264k02 define pos^resp^apprv^no^bal^d = "001"#; define pos^resp^apprv^blind^d = "005"#; #ADD 00301I00 literal sub^ok^l = 0, #REPLACE 00301I01 sub^system^error^l = 1, #REPLACE 00454d01 string .on^behalf^apprv^rslt^cdes^g[ 0:20 ] := [ "V", 20 * [ " " ] ]; #REPLACE 01366%07 chip^read^paypass^mapped = "06"#, #ADD 01366b07 paypass^mapped^cntctlss^chip = "08"#, #ADD 01366O0S define pre^auth^tran^req^d = "06"#; #DELETE 01366O0T/01366O0V #ADD 01366N4X ? get^iso^dec^places, #ADD 01366N5H ! get^iso^dec^places, ! #ENDSCN = SW0D100 !#CMP2.28 02/18/09 BNETLIBS6147 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6147 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6147 * ******************************************************************************** #SCN = SW0D101 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6147 #NEWVERSION = 6148 #ADD 04419u0H ! 18FEB2009 bensone ! Symptom: Banknet Release 09.1 Mandates. ! Effective Date: 16 June 2009 ! Problem: None. ! Fix: Add new token e^com^addl^data^tkn^id^d = "F1" to carry ! additional e-commerce data. ! Ch3 CAT Authorized Level 1 PIN Edit ! Ch8 MC inControl Real Card Spend Control Services ! Ch10 New UCAF Collection Indicator ! Ch11 PayPass Mapping Service Enhancements ! Ch12 Electronic Commerce Infrastructure Flexibility ! Ch13 Mobile Phone Top-up ATM Transactions ! R29 Format & Send Acquirer Reversal Request on Timeout ! R30 Support MCC Values 4829 and 7995 in Payments ! R31 Support of Pre-Screen Card Verification Results ! R32 Process Internal POS Adjustment as ! External Acquirer Reversal Request ! R33 Revised Standards for Pre-authorization Solution ! for Maestro Petrol Transactions ! R34 Set DE 2 Correctly in Echo Test Messages ! Case #480070 ! Case #482554 ! Case #483455 ! Case #483632 ! Procs added: sem^frmt^xrqst^to^sem^xrvsl ! util^frmt^addl^data^to^sem^xresp ! util^ilf^get^pos^adj ! util^ilf^get^pos^preauth ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^b24^tkn^to^xresp^emv ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^emv^to^b24^stat^tkn ! sem^frmt^nmm^request ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! util^ilf^get ! util^sem^collapse ! util^sem^expand ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLPSTKN, PSTKNCVS, and ! PSTKNID. Run Make. ! New files: ILB0902M, ILB0902R, ILB0902S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0902M. Run the ILF conversion using ILB0902R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #081007-04 #ADD 05285 PSTM^FRMT^0200^TO^XRQST fixed tran^amt := 0f; #ADD 05319A03 PSTM^FRMT^0200^TO^XRQST int dec^places; #ADD 05708 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "3" and ( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = blanks for $len( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag ) or sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = zeroes for $len( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag ) ) then begin return resp^format^error^pos^l; end; #REPLACE 05708N2V/05708N2V OFFSET 0 PSTM^FRMT^0200^TO^XRQST end ! of if txn^spcf^data^tkn.dataset^id = "57" ! else if sem.merch^typ = "7995" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C04" ); end else if sem.merch^typ = "6532" or sem.merch^typ = "6533" or sem.merch^typ = "6534" or sem.merch^typ = "4829" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C01" ); end; #ADD 05964c12 PSTM^FRMT^0200^TO^XRQST dec^places := get^iso^dec^places( sem.tran^crncy^cde ); if dec^places = -1 then begin return resp^format^error^pos^l; end; case dec^places of begin !0! tran^amt := pstm.tran.amt^1; !1! tran^amt := pstm.tran.amt^1 / 10f; !2! tran^amt := pstm.tran.amt^1 / 100f; !3! tran^amt := pstm.tran.amt^1 / 1000f; !?! otherwise call programmatic^dump( 310 ); end; if tran^amt = 1f then #DELETE 05964c13 PSTM^FRMT^0200^TO^XRQST #ADD 05964N1E PSTM^FRMT^0200^TO^XRQST end else if sem.pos^entry^mde <> "81" then begin return resp^format^error^pos^l; end; end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "3" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "4" and sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "5" then begin return resp^format^error^pos^l; end else if sem.pos^entry^mde <> "81" then begin return resp^format^error^pos^l; #ADD 05964N1o PSTM^FRMT^0200^TO^XRQST ! ! This value may subsequently be "adjusted" in the EMV extension ! module to identify any contact EMV capabilities. ! if pstm.pt^srv^entry^mde <> pan^auto^cntctlss^mag^stripe and pstm.pt^srv^entry^mde <> pan^auto^cntctlss^m^chip and ( sem.ntl^pos^data.cond^cde.byte[10] = cntctlss^mag^stripe or sem.ntl^pos^data.cond^cde.byte[10] = cntctlss^m^chip ) then begin movd( sem.ntl^pos^data.cond^cde.byte[10], mag^stripe^or^key^entry ); end; #DELETE 05964N1p PSTM^FRMT^0200^TO^XRQST #ADD 06133N01 PSTM^FRMT^0200^TO^XRQST ( ( pstm.pin^tries <> "Z" and pstm.pin^tries <> "z" ) or not emv^data^bit^d ) then #DELETE 06133N02/06133N03 PSTM^FRMT^0200^TO^XRQST #DELETE 06421 /06483 PSTM^FRMT^0210^TO^XRESP #DELETE 06510 /06519 PSTM^FRMT^0210^TO^XRESP #DELETE 06608 /06614 PSTM^FRMT^0210^TO^XRESP #DELETE 07002 /07031 PSTM^FRMT^0210^TO^XRESP #ADD 07034 PSTM^FRMT^0210^TO^XRESP send^addl^data := true; #DELETE 07035 /07036 PSTM^FRMT^0210^TO^XRESP #DELETE 07039 /07064 PSTM^FRMT^0210^TO^XRESP #DELETE 07064A0L PSTM^FRMT^0210^TO^XRESP #DELETE 07075 /07096 PSTM^FRMT^0210^TO^XRESP #DELETE 07102 /07116 PSTM^FRMT^0210^TO^XRESP #REPLACE 07133 /07133 OFFSET 0 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.adnl^proc^info^sub^fld^74.tag = "74" then begin send^addl^data := true; end; call util^frmt^addl^data^to^xresp( sem, send^addl^data ); #ADD 07166 PSTM^FRMT^0220^TO^XADV struct .ilf( ilf^def ); struct .orig^prikey( prikey^def ); struct .orig^sem( sem^def ); #REPLACE 07169N02/07170 PSTM^FRMT^0220^TO^XADV int fnum := 0; int ilf^lgth := 0; #REPLACE 07175 /07175 OFFSET 0 PSTM^FRMT^0220^TO^XADV if pos^preauth^comp^d( pstm ) and pos^preauth^match^d( pstm ) then begin mov^( orig^prikey, prikey ); move( orig^prikey.seq^num, pstm.pre^auth^seq^num ); orig^prikey.tran^dat^tim ':=' concat( pstm.term^fiid ) & concat( pstm.retl^sic^cde ) & "11"; if response := util^ilf^get^pos^preauth( orig^prikey, $len( orig^prikey ), ilf, ilf^lgth, pstm, orig^sem ) then begin move ( orig^sem.tran^amt, sem.tran^amt ); move ( orig^sem.trace^num, sem.trace^num ); move ( orig^sem.track2, sem.track2 ); move ( orig^sem.track1, sem.track1 ); move ( sem, orig^sem ); end; end; if pos^preauth^comp^d( pstm ) and not response then begin return resp^no^error^pos^l; end; #REPLACE 07207N03/07207N03 OFFSET 0 PSTM^FRMT^0220^TO^XADV if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data = " " then begin movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "S" ); end; #ADD 07359 PSTM^FRMT^0420^TO^ACQ^XRVSL ! ! Set bits for fields that are required for the 0400 that may ! have been turned off in the SEM logged to the ILF. ! The bit maps in the 0110 are overwritten with the bit maps ! from the suspended 0100 before the record is logged ! to the ILF in procedure sem^frmt^xresp^to^pstm^0210. ! resp^cde^bit^d := 1; if sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * [ " " ] ] then begin ! ! if DE-38 was not spaces in the request, send it in the 0400 ! auth^id^resp^bit^d := 1; end; #DELETE 07360 /07373Y01 PSTM^FRMT^0420^TO^ACQ^XRVSL #REPLACE 07493c01 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = "32" then #DELETE 07594 /07598 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 07754c03 PSTM^FRMT^AMT^TO^SEM^AMT int found^txn^sub^tkn := false; int txn^subtyp^tkn^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); #DELETE 07790 /07792 SUB^CONVERT^AMT #REPLACE 07793 SUB^CONVERT^AMT pstm^amt := pstm.tran.amt^1; #ADD 07801 SUB^CONVERT^AMT tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) then begin mov^ ( sem.replace^amts, zeroes ); replace^amt^bit^d := 1; if pstm.tran.amt^2 > 0f then begin pstm^amt := pstm.tran.amt^2; if curr^conv^acq^g then begin if not sub^convert^amt( pstm^amt ) then begin return false; end; end; if not fixed^ascii^( sem.replace^amts.tran^amt, pstm^amt ) then begin return false; end; end; end; #ADD 08493c02 PSTM^FRMT^SEM^ADDL^DATA int .e^com^addl^data^tkn( e^com^addl^data^tkn^def ); int e^com^addl^data^tkn^lgth := 0; #DELETE 08493c08 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08687c0F/08687c0Q PSTM^FRMT^SEM^ADDL^DATA #ADD 08687c22 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' ps51^tkn^id^d; if hiswtkn^get^tkn ( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) then begin ps51^tkn^found := true; if ps51^get^tkn.authn^coll^ind = "3" then begin tkn^id ':=' e^com^addl^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @e^com^addl^data^tkn, e^com^addl^data^tkn^lgth ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, e^com^addl^data^tkn.scheme^merch^id ); end ! of e^com^addl^data^tkn found else begin call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if stf.swi^merch.id <> blanks for $len( stf.swi^merch.id ) and stf.swi^merch.id <> zeroes for $len( stf.swi^merch.id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, stf.swi^merch.id ); end; end; !of util^stf^get end ! of e^com^addl^data^tkn not found end; !of authn^coll^ind = "3" end; ! of ps51^tkn^found := true #DELETE 08687c23/08687c2b PSTM^FRMT^SEM^ADDL^DATA #ADD 08687A0S PSTM^FRMT^SEM^ADDL^DATA if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> blanks for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin movd( sem.addl^data.info.mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info.mc^asgn^id^sub^fld^32.lgth, "06" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^asgn^id^sub^fld^32 ); call integer^ascii^( sem.addl^data.lgth, lgth ); end; #ADD 08872 PSTM^FRMT^SEM^ADDL^DATA if ps51^tkn^found then begin #DELETE 08873 /08878 PSTM^FRMT^SEM^ADDL^DATA #ADD 09055 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "2" or ps51^get^tkn.authn^coll^ind = "3" then #DELETE 09056 PSTM^FRMT^SEM^ADDL^DATA #ADD 10070c03 SUB^CONVERT^AMT if sppt^multi^crncy^g then begin ! ! ! System supports Multi-Currency, so BASE24 can ! ! accept the cardholder billing amount. ! ! ! call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^1 ); end else #ADD 10070c0C SUB^CONVERT^AMT $len(pct.crncy.in^cde) then #DELETE 10070c0D/10070c0E SUB^CONVERT^AMT #ADD 11085 SEM^FRMT^DATA^TO^PSTM^TRACK2 ?section sem^frmt^nmm^request ?page "sem^frmt^nmm^request" !##################################################################### !# # !# sem^frmt^nmm^request # !# # !# This procedure formats a banknet network management # !# message based on parameters passed to this procedure. # !# # !# INPUT PARAMETERS: # !# nmm^info^cde - banknet network management id code # !# group - banknet mci id # !# prefix - prefix # !# service - service type associated with this message # !# traffic - traffic type associated with this message # !# # !# OUTPUT PARAMETERS: # !# sem - pointer to banknet external message # !# # !# RETURN: # !# TRUE - NMM request formatted # !# FALSE - NMM request NOT formatted # !# # !##################################################################### int proc sem^frmt^nmm^request( sem, nmm^info^cde, group, prefix, service, traffic, avs^typ, security ) variable; #DELETE 11086 /11111 SEM^FRMT^NMM^REQUEST #ADD 11119 SEM^FRMT^NMM^REQUEST string .security; #DELETE 11125N02 SEM^FRMT^NMM^REQUEST #DELETE 11126 SEM^FRMT^NMM^REQUEST #REPLACE 11140 /11140 OFFSET 0 SEM^FRMT^NMM^REQUEST not $param( avs^typ ) or not $param( security ) then #DELETE 11156 /11166 SEM^FRMT^NMM^REQUEST #ADD 11290 SEM^FRMT^NMM^REQUEST if $param( group ) and group <> blanks for max^group^lgth^g then begin if max^group^lgth^g = 5 then begin movl( sem.pan.num, group, max^group^lgth^g ); end else begin movl( sem.pan.num, group[ 1 ], 5 ); end; end else #DELETE 11290N00/11290N0D SEM^FRMT^NMM^REQUEST #ADD 11358 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = paypass^mapped^cntctlss^chip then begin movd( pstm.pt^srv^entry^mde, pan^auto^cntctlss^m^chip ); end else if sem.pos^entry^mde = chip^crd^unreliable^cvv or sem.pos^entry^mde = chip^read^paypass^mapped then #DELETE 11359N00/11359N02 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 11405 SEM^FRMT^PRIKEY ! ! hiswutil^justify^field can overlay the destination field by the ! length of the source field. When prikey was rearranged in R9.1 ! the first 3 bytes of seq^num was trashed so we moved the call to ! hiswutil^justify^field before we set prikey.seq^num. ! The code problem is in CONVERT^FIELD^JUSTIFICATION in UTILS. ! call hiswutil^justify^field( sem.acq^inst.cde, $len( sem.acq^inst.cde ), prikey.term^id, $len( prikey.term^id ), left^justify^l ); #DELETE 11436 /11440 SEM^FRMT^PRIKEY #ADD 13372 SEM^FRMT^XRESP^TO^PSTM^0210 move ( sem.emv^data, rqst.emv^data ); move ( sem.pbit^map, rqst.pbit^map ); move ( sem.sbit^map, rqst.sbit^map ); #ADD 13704 SEM^FRMT^XRQST^TO^PSTM^0200 struct .e^com^addl^data^tkn( e^com^addl^data^tkn^def ); #ADD 13711 SEM^FRMT^XRQST^TO^PSTM^0200 string card^vrfy^flg := " "; #ADD 13808 SEM^FRMT^XRQST^TO^PSTM^0200 if sppt^multi^crncy^g and sem.iss^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin ! ! ! System supports Multi-Currency, so BASE24 can ! ! accept the cardholder billing currency code. ! ! ! move ( pstm.orig^crncy^cde, sem.iss^crncy^cde ); end; #ADD 14690 SEM^FRMT^XRQST^TO^PSTM^0200 move( pos^data^tkn.term^input^cap^ind, sem.ntl^pos^data.cond^cde.byte[ 10 ] ); #DELETE 14691 /14711 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14771J03 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "213" ) and #DELETE 14771J04/14771J05 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14771J0K SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec.ucaf^ind <> "0" then #DELETE 14771J0L/14771J0N SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14794 SEM^FRMT^XRQST^TO^PSTM^0200 ucaf^ind = "2" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" then #DELETE 14795 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14800 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" and sem.addl^data.info.mc^asgn^id^sub^fld^32. tag = "32" then begin ! ! Add the F1 E-Commerce Additional Data Token ! The ps51^tkn^id^d in tkn^id gets overlayed so ! it is restored below. ! tkn^id ':=' e^com^addl^data^tkn^id^d; e^com^addl^data^tkn ':=' blanks for $len( e^com^addl^data^tkn ); call ascii^integer^( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, temp^lgth ); movl( e^com^addl^data^tkn.scheme^merch^id, sem.addl^data.info.mc^asgn^id^sub^fld^32. tag^data, temp^lgth ); tkn^add^lgth := $offset( e^com^addl^data^tkn. user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, e^com^addl^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3257, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3261, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result tkn^id ':=' ps51^tkn^id^d; end; ! of ucaf^ind = "3" and tag = "32" #REPLACE 14801 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if tag = "42" ! #REPLACE 14838 /14838 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 end else if sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data.svc = "02" or sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data.svc = "15" then begin case sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data.rslt^1 of begin "A", "E", "F", "G", "I", "N", "T" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "U" -> begin ! ! CVD not processed ! movd( card^vrfy^flg, "L" ); end; "V" -> begin ! ! CVD match ! movd( card^vrfy^flg, "Y" ); end; otherwise -> begin ! ! Do nothing ! end; end; ! of case sem.addl^data.info... call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, ofst, false, tkn^lgth, pstm.data^flag, ! err^flg !, ! rte^grp !, card^vrfy^flg ); end; ! of tag^data.rslt^1 = "02" or "15" #ADD 15011 SEM^FRMT^XRQST^TO^PSTM^0200 ( ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" ) and #DELETE 15012 /15013 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15036 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" ) and #DELETE 15037 /15038 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 15474Z01/15474Z0j SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 15485 SEM^FRMT^XRQST^TO^SEM^XRESP movd( resp.addl^data.info.avs^resp.tag, "83" ); movd( resp.addl^data.info.avs^resp.lgth, "01" ); movd( resp.addl^data.info.avs^resp.result, "R" ); #DELETE 15488 /15538 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 15550 SEM^FRMT^XRQST^TO^SEM^XRESP movd( resp.addl^data.info.cvc^sub^fld^87.tag, "87" ); movd( resp.addl^data.info.cvc^sub^fld^87.lgth, "01" ); movd( resp.addl^data.info.cvc^sub^fld^87.tag^data, "P" ); #DELETE 15553 /15563 SEM^FRMT^XRQST^TO^SEM^XRESP #REPLACE 15564 /15564 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRESP if sem.addl^data.info. ncff^rqst^resp^sub^fld^35.tag^data = "R" then begin send^addl^data := true; movd( resp.addl^data.info.ncff^rqst^resp^sub^fld^35. tag^data, "D" ); end; #DELETE 15580 /15583 SEM^FRMT^XRQST^TO^SEM^XRESP #REPLACE 15616 SEM^FRMT^XRQST^TO^SEM^XRESP call util^frmt^addl^data^to^xresp( resp, send^addl^data ); #ADD 15618 SEM^FRMT^XRQST^TO^SEM^XRESP ?section sem^frmt^xrqst^to^sem^xrvsl ?page "sem^frmt^xrqst^to^sem^xrvsl" !##################################################################### !# # !# SEM^FRMT^XRQST^TO^SEM^XRVSL # !# # !# This proc performs the formatting of a reversal messaga from # !# the original request message. # !# # !# INPUT PARAMETERS: # !# sem - pointer to the original request message # !# resp^cde - pointer to the response code # !# # !# OUTPUT PARAMETERS: # !# rvsl - pointer to the reversal message # !# # !# RETURN: # !# # !##################################################################### proc sem^frmt^xrqst^to^sem^xrvsl( sem, rvsl, resp^cde ); int .sem( sem^def ); int .rvsl( sem^def ); string resp^cde; begin int de48^lgth := 0; int .pbit^map := wordaddr( @rvsl.pbit^map ), .sbit^map := wordaddr( @rvsl.sbit^map ); movl( rvsl, sem, wlen( sem^def ) ); movd( rvsl.typ, sem^acq^rvsl^rqst^d ); if not sbit^map^bit^d then begin sbit^map^bit^d := 1; mov^ (rvsl.sbit^map, nulls); end; pin^cap^cde^bit^d := 0; !de 26! track2^bit^d := 0; !de 35! resp^cde^bit^d := 1; !de 39! track1^bit^d := 0; !de 45! addl^data^bit^d := 1; !de 48! sec^control^info^bit^d := 0; !de 53! emv^data^bit^d := 0; !de 55! orig^data^bit^d := 1; !de 90! file^rec^bit^d := 0; !de 120! new^pin^bit^d := 0; !de 125! ! ! Set new DE 7—Transmission Date and Time ! DE 11—Systems Trace Audit Number (STAN) ! call util^gmt^ascii( rvsl.tran^dat^tim); call util^increment^trace( rvsl.trace^num, $len( rvsl.trace^num ) ); ! ! Set DE 39—Response Code from input parameter ! mov^( rvsl.resp^cde, resp^cde ); ! ! Set DE 48—Additional Data—Private Use ! init( rvsl.addl^data, " ", $len( rvsl.addl^data ) ); ! ! Set Transaction Category Code (TCC) ! move( rvsl.addl^data.info.tran^cat^cde, sem.addl^data.info.tran^cat^cde ); de48^lgth := de48^lgth + 1; ! ! Set Subelement 20—Cardholder Verification Method ! movd( rvsl.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag, "20" ); movd( rvsl.addl^data.info.crd^vrfy^mthd^sub^fld^20.lgth, "01" ); if pin^bit^d then begin movd( rvsl.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "P" ); pin^bit^d := 0; end else begin movd( rvsl.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data, "S" ); end; de48^lgth := de48^lgth + $len( rvsl.addl^data.info.crd^vrfy^mthd^sub^fld^20 ); ! ! Subelement 32—MasterCard Assigned ID ! if sem.addl^data.info.mc^asgn^id^sub^fld^32 = "32" then begin move( rvsl.addl^data.info.mc^asgn^id^sub^fld^32, sem.addl^data.info.mc^asgn^id^sub^fld^32 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. mc^asgn^id^sub^fld^32 ); end; ! ! Set Subelement 63—Trace ID ! mov^( rvsl.addl^data.info.trc^id^sub^fld^63, zeroes ); movd( rvsl.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( rvsl.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info.trc^id^sub^fld^63 ); ! ! Subelement 77—Payment Transaction Type Indicator ! if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77 = "77" then begin move( rvsl.addl^data.info.pmnt^txn^typ^ind^sub^fld^77, sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); end; ! ! Subelement 95—MasterCard Promotion Code ! if sem.addl^data.info.mc^prmtn^cde^sub^fld^95 = "95" then begin move( rvsl.addl^data.info.mc^prmtn^cde^sub^fld^95, sem.addl^data.info.mc^prmtn^cde^sub^fld^95 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. mc^prmtn^cde^sub^fld^95 ); end; call integer^ascii^( rvsl.addl^data.lgth, de48^lgth ); ! ! Set DE 90—Original Data Elements ! mov^( rvsl.orig, zeroes ); move( rvsl.orig.msg^typ, sem.typ ); move( rvsl.orig.trace, sem.trace^num ); move( rvsl.orig.dat^tim, sem.tran^dat^tim ); call hiswutil^justify^field( rvsl.orig.acq^inst^id, $len( rvsl.orig.acq^inst^id ), sem.acq^inst.cde, $len( sem.acq^inst.cde ), right^justify^l ); call hiswutil^justify^field( rvsl.orig.fwd^inst^id, $len( rvsl.orig.acq^inst^id ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ADD 17023c0I UTIL^COLLAPSE^SEM if hdr.addl^data.info. mptu^rqst^sub^fld^13.tag = "13" then begin call ascii^integer( hdr.addl^data.info. mptu^rqst^sub^fld^13. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mptu^rqst^sub^fld^13.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #DELETE 17513 /17527 UTIL^COLLAPSE^SEM #ADD 18502c0A UTIL^EXPAND^SEM if ptr[ length ] = "13" then begin movl( sem^ptr.addl^data.info. mptu^rqst^sub^fld^13.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 19067Q00 UTIL^EXPAND^SETL ?section util^frmt^addl^data^to^xresp ?page "util^frmt^addl^data^to^xresp" !##################################################################### !# # !# util^frmt^addl^data^to^xresp # !# # !# This procedure formats a PSTM 0210 to an external response # !# message. # !# # !# INPUT PARAMETERS: # !# pstm - BASE24-pos message. # !# sem - External message. # !# susp - Suspense record. # !# # !# OUTPUT PARAMETERS: # !# sem - External message. # !# # !##################################################################### proc util^frmt^addl^data^to^xresp( sem, send^addl^data ); int .sem( sem^def ); int send^addl^data; begin int delta^lgth; int lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); ! ! If the send^addl^data flag is false or DE 48 not present then ! return ! if not ( send^addl^data and addl^data^bit^d ) then begin return; end; if sem.addl^data.lgth = " " then begin movd( sem.addl^data.lgth, "000" ); end; ! ! Calculate the length of subelements we need to return. ! The length of the tag-data is based on the value in the ! length field.The length of the tag and length fields are ! based on their definition in the structure. ! call ascii^integer^( sem.addl^data.lgth, lgth ); ! ! SE 35—PayPass Non-Card Form Factor ! if sem.addl^data.info.ncff^rqst^resp^sub^fld^35.tag = "35" then begin call ascii^integer^( sem.addl^data.info. ncff^rqst^resp^sub^fld^35.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. ncff^rqst^resp^sub^fld^35.tag ) + $len( sem.addl^data.info. ncff^rqst^resp^sub^fld^35.lgth ); lgth := lgth + delta^lgth; end; ! ! SE 74—Additional Processing Information ! if sem.addl^data.info.adnl^proc^info^sub^fld^74.tag = "74" then begin call ascii^integer^( sem.addl^data.info. adnl^proc^info^sub^fld^74.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. adnl^proc^info^sub^fld^74.tag ) + $len( sem.addl^data.info. adnl^proc^info^sub^fld^74.lgth ); lgth := lgth + delta^lgth; end; ! ! SE 83—Address Verification Service (AVS) Response ! if sem.addl^data.info.avs^resp.tag = "83" then begin call ascii^integer^( sem.addl^data.info. avs^resp.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info.avs^resp.tag ) + $len( sem.addl^data.info.avs^resp.lgth ); lgth := lgth + delta^lgth; end; ! ! SE 84—Merchant Advice Code ! if sem.addl^data.info.mrch^advc^cde^sub^fld^84.tag = "84" then begin call ascii^integer^( sem.addl^data.info. mrch^advc^cde^sub^fld^84.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. mrch^advc^cde^sub^fld^84.tag ) + $len( sem.addl^data.info. mrch^advc^cde^sub^fld^84.lgth ); lgth := lgth + delta^lgth; end; ! ! SE 87—Card Validation Code Result ! if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then begin call ascii^integer^( sem.addl^data.info. cvc^sub^fld^87.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. cvc^sub^fld^87.tag ) + $len( sem.addl^data.info. cvc^sub^fld^87.lgth ); lgth := lgth + delta^lgth; end; call integer^ascii^( sem.addl^data.lgth, lgth ); return; end; ! of proc util^frmt^addl^data^to^xresp #ADD 21149 UTIL^ILF^GET int proc util^ilf^get( key, key^lgth, ilf, ilf^lgth, base24^msg, sem, pstm) variable; #DELETE 21150 /21151 UTIL^ILF^GET #ADD 21157 UTIL^ILF^GET int .pstm( pstm^def ); #ADD 21164 SUB^ILF^GET ?page "subproc sub^ilf^get^reduced^prikey of util^ilf^get" !################################################################# !# # !# sub^ilf^get^reduced^prikey # !# # !# This subprocedure files an ilf record according to fields # !# term^id, retl^id, amt^1 and apprv^cde. # !# # !# INPUT PARAMETERS: # !# fnum - the file number of the ilf # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# TRUE - If match is found # !# FALSE - If match is not found # !# # !################################################################# int subproc sub^ilf^get^reduced^prikey( fnum ); int fnum; begin int err; err := false; if hiswfile^keyposition( fnum, key, "PR", key^lgth, 1, ! feeof !, ! allowable error !, pct.ilf[ indx ].fcb.file^frmt ) <> feok then begin return false; end; while not err and not found do begin if ( err := hiswfile^read( pct.ilf[ indx ].fcb.filenum, ilf, $len( ilf^def ), lgth, feeof ) ) then begin if err <> feeof then begin pct.ilf.ferror := err; end; return false; end; if ( ( pos^adjust^d( pstm ) and not ( pos^return^d( ilf.pos ) ) ) or ( pos^return^adjust^d( pstm ) and pos^return^d( ilf.pos ) ) ) and ( ilf.pos.retl^id = pstm.retl^id for $len( ilf.pos.retl^id ) ) and ( ilf.pos.tran.amt^1 = pstm.tran.amt^1 ) and ( pstm.tran.apprv^cde = blanks for $len( pstm^def.tran.apprv^cde ) or pstm.tran.apprv^cde = zeroes for $len( pstm^def.tran.apprv^cde ) or pstm.tran.apprv^cde = ilf.pos.tran.apprv^cde for $len( pstm^def.tran.apprv^cde ) ) then begin ilf^lgth := lgth; found := true; end; end; ! while return found; end; ! subproc sub^ilf^get^reduced^prikey ?page "subproc sub^ilf^get of util^ilf^get" !################################################################# !# # !# sub^ilf^get # !# # !# This subprocedure files an ilf record according to fields # !# term^id, retl^id, amt^1 and apprv^cde. # !# # !# INPUT PARAMETERS: # !# fnum - the file number of the ilf # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# TRUE - If match is found # !# FALSE - If match is not found # !# # !################################################################# int subproc sub^ilf^get( fnum ); int fnum; begin if hiswfile^keyposition( fnum, key, "PR", key^lgth, 1, feeof, ! allowable error !, pct.ilf[ indx ].fcb. file^frmt ) <> feok then return false; while hiswfile^read( fnum, ilf, $len(ilf^def), lgth, feeof ) = feok do begin ilf^lgth := lgth; found := true; end; return found; end; ! of subproc sub^ilf^get ?page "util^ilf^get" !################################################################# !# # !# This is the main body of PROC util^ilf^get # !# # !################################################################# #DELETE 21165 /21189 SUB^ILF^GET #ADD 21197 SUB^ILF^GET if $param( pstm ) then begin while not found and ( indx := indx - 1 ) >= 0 do begin if pct.ilf[ indx ].fcb.filenum > 0 then begin call sub^ilf^get^reduced^prikey( pct.ilf[ indx ].fcb.filenum ); end; end; end else #ADD 21208 SUB^ILF^GET if ilf.rec^typ = admin^l then begin call util^ilf^expand^admin( ilf, sem ); end else begin init( sem, " ", wlen( sem^def ) ); call ascii^integer^( ilf.extrn^msg^lgth, lgth ); movl( sem, ilf.extrn^msg.savearea, lgth ); end; #DELETE 21209 /21213 SUB^ILF^GET #ADD 21239 SUB^ILF^GET ?section util^ilf^get^pos^adj ?page "util^ilf^get^pos^adj" !##################################################################### !# # !# util^ilf^get^pos^adj # !# # !# This procedure performs the steps required to locate an ilf # !# record for an adjustment. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to the internal message # !# ilf - the buffer which will contain the ilf # !# passed in with the prikey set # !# # !# OUTPUT PARAMETERS: # !# ilf^lgth - the length of the ilf which was read # !# ilf^fnum - the file number of the ilf # !# sem - the external message from the ilf # !# # !# RETURN: # !# TRUE - If matching ilf found # !# FALSE - If matching ilf not found # !# # !##################################################################### int proc util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, ilf^fnum, sem ); int .pstm( pstm^def ); int .ilf( ilf^def ); int .ilf^lgth; int .ilf^fnum; int .sem; begin int .ilf^sem( sem^def ) := wordaddr( @ilf.extrn^msg.savearea ); int .prikey( prikey^def ) := wordaddr( @ilf.prikey ); struct .orig^prikey( prikey^def ); move( orig^prikey, prikey ); if not ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, ! base24^msg !, sem ) ) then begin ! ! Try with the full prikey to find the exact match using the ! original data elements (sequence number and transaction ! amount) ! pstm.orig^data.trn^dat prikey.seq^num ':=' pstm.orig^data.tran^seq^num for $len ( prikey.seq^num ) ; movl(prikey.tran^dat^tim.byte[0], pstm.orig^data.trn^dat, 4); movl(prikey.tran^dat^tim.byte[4], pstm.orig^data.trn^tim, 6); if not ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, ! base24^msg !, sem ) ) then begin move( prikey, orig^prikey ); ! ! Now try with a reduced prikey which does not include ! the transaction amount or the sequence number, but ! include extra information to find the right record. ! This is required because the original data elements ! have not been passed with the adjustment. ! if not ( ilf^fnum := util^ilf^get( ilf.prikey, $offset( prikey.seq^num ), ilf, ilf^lgth, ! base24^msg !, sem, pstm ) ) then begin return false; end; end; end; if ilf.extrn^msg^lgth = "0000" then begin end else if poss^dup^d( ilf^sem ) or ilf^sem.typ = " " then begin return false; end; return true; end; ! of proc util^ilf^get^pos^adj ?section util^ilf^get^pos^preauth ?page "util^ilf^get^pos^preauth" !##################################################################### !# # !# util^ilf^get^pos^preauth # !# # !# This procedure finds a preauth ilf record according to the # !# primary key. # !# # !# INPUT PARAMETERS: # !# key - ilf primary key # !# key^lgth - ilf primary key lgth # !# pstm - pos internal message # !# # !# OUTPUT PARAMETERS: # !# ilf - ilf record # !# ilf^lgth - ilf record length # !# sem - external message # !# # !# RETURN VALUES # !# false - if record not found # !# ilf filenumber - if record is found # !# # !##################################################################### int proc util^ilf^get^pos^preauth( key, key^lgth, ilf, ilf^lgth, pstm, sem) variable; string .key; int key^lgth; int .ilf( ilf^def ); int .ilf^lgth; int .pstm( pstm^def ); int .sem( sem^def ); begin wlform( trace1, "T - util^ilf^get^pos^preauth key:\?" ) int fnum := false, lgth, indx; if trace^g.io^d then begin call log^message^( 2245, , @trace1, net.myname, 0, @key, 50 ); end; if ( fnum := util^ilf^get( $optional ( $param ( key ), key ), $optional ( $param ( key^lgth ), key^lgth ), $optional ( $param ( ilf ), ilf ), $optional ( $param ( ilf^lgth ), ilf^lgth ), ! pstm !, $optional ( $param ( sem ), sem ) ) ) then begin ! ! ILF record found ! if ilf.extrn^msg^lgth <> "0000" and sem.typ = sem^auth^response^d and ilf.pos.typ = response^d and ilf.pos.tran.resp < "050" and ilf.pos.retl^id = pstm.retl^id for $len( ilf.pos.retl^id ) and ilf.pos.orig^crncy^cde = pstm.orig^crncy^cde for $len( pstm.orig^crncy^cde ) then begin return fnum; end; end; ! of ILF record found return false; end; ! util^ilf^get^pos^preauth ! #REPLACE 23959 UTIL^SET^GROUP^LOGON string .service^typ[ 0:12 ] := [ 13 * [0] ], #ENDSCN = SW0D101 !#CMP2.28 02/18/09 BNETS 60109FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60109 * ******************************************************************************** #SCN = SW0D103 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X000260H ! 18FEB2009 bensone ! Symptom: Banknet Release 09.1 Mandates. ! Effective Date: 16 June 2009 ! Problem: None. ! Fix: Add new token e^com^addl^data^tkn^id^d = "F1" to carry ! additional e-commerce data. ! Ch3 CAT Authorized Level 1 PIN Edit ! Ch8 MC inControl Real Card Spend Control Services ! Ch10 New UCAF Collection Indicator ! Ch11 PayPass Mapping Service Enhancements ! Ch12 Electronic Commerce Infrastructure Flexibility ! Ch13 Mobile Phone Top-up ATM Transactions ! R29 Format & Send Acquirer Reversal Request on Timeout ! R30 Support MCC Values 4829 and 7995 in Payments ! R31 Support of Pre-Screen Card Verification Results ! R32 Process Internal POS Adjustment as ! External Acquirer Reversal Request ! R33 Revised Standards for Pre-authorization Solution ! for Maestro Petrol Transactions ! R34 Set DE 2 Correctly in Echo Test Messages ! Case #480070 ! Case #482554 ! Case #483455 ! Case #483632 ! Procs modified: bnet^sem^xrvsl^failed ! cmd^actvt^sta ! cmd^deactvt^sta ! cmd^logoff^g ! cmd^logoff^g^gsi ! cmd^logoff^p ! cmd^logoff^p^gsi ! cmd^logon^g ! cmd^logon^g^gsi ! cmd^logon^p ! cmd^logon^p^gsi ! cmd^ntwrk^conn^stat ! cmd^warmboot ! init^^initialization ! init^actvt ! init^echotest ! init^logoff ! init^logon ! pstm^0200^request ! pstm^0200^route ! pstm^0220^force^post ! pstm^0420^reversal ! sem^actvt^response ! sem^request ! sem^response ! sem^response^pos ! tim^out^00^outbound ! tim^out^05^nmm ! tim^out^06^xnmm ! tim^out^16^actvt^intrvl ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLPSTKN, PSTKNCVS, and ! PSTKNID. Run Make. ! New files: ILB0902M, ILB0902R, ILB0902S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0902M. Run the ILF conversion using ILB0902R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #081007-04 #REPLACE 00266301 BNETS^60^109 PROC BNETS^60^107 MAIN; #DELETE 01000}00/01000}0X BNET^SEM^XRVSL^FAILED #REPLACE 01001 /01001 OFFSET 0 BNET^SEM^XRVSL^FAILED if sem.typ = sem^acq^rvsl^rqst^d or sem.typ = sem^rvsl^adv^d then #DELETE G011440i CMD^ACTVT^STA #ADD G011440n CMD^ACTVT^STA string .fiid[ 0:3 ] := [ 4 * [" "] ]; string .group[ 0:5 ] := [ 6 * [" "] ]; #ADD G011442R CMD^ACTVT^STA fiid ':=' pct.swi^id for sizeof( fiid ); call util^get^bniif( fiid^l, fiid, group, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, ! security! ); #DELETE G011442S CMD^ACTVT^STA #REPLACE T011440A CMD^ACTVT^STA call init^actvt( sta^idx, group ); #REPLACE G011442c CMD^ACTVT^STA return true; #ADD G012950R CMD^DEACTVT^STA wlform( timr^err, "FAILURE TO SEND ACTIVATE, TIMER TABLE ERROR " ) #ADD G012950c CMD^DEACTVT^STA struct .userbuf( timer^userbuf^def ); #ADD G012950m CMD^DEACTVT^STA int .timer( timer^def ); #ADD G012950n CMD^DEACTVT^STA string .fiid[ 0:3 ] := [ 4 * [" "] ]; string .group[ 0:5 ] := [ 6 * [" "] ]; #REPLACE G0129517 SUB^FRMT^SEND^DEACTVT int subproc sub^frmt^send^deactvt( sta^idx, group ); #ADD G0129517 SUB^FRMT^SEND^DEACTVT string .group; #REPLACE G012951E SUB^FRMT^SEND^DEACTVT group, #ADD G012951R SUB^FRMT^SEND^DEACTVT if find^specific^timer( tcb^g, type^nmm^l, nmm^info^cde, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin ! ! ! A session deactivation message is outstanding for this ! ! station, so return. ! ! ! return false; end; if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, nmm^info^cde ) ) then begin call log^message^( 2953, ! routing^code !, @timr^err, net.myname, evt^msg^severity^err^l ); return false; end; init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^idx ); movl( userbuf.nmm.mci^id, group, max^group^lgth^g ); timer.userbuf ':=' userbuf for wlen( userbuf ); #REPLACE G012952R/G012952R OFFSET 0 SUB^FRMT^SEND^DEACTVT fiid ':=' pct.swi^id for sizeof( fiid ); call util^get^bniif( fiid^l, fiid, group, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, ! security! ); #REPLACE G012952U SUB^FRMT^SEND^DEACTVT if not sub^frmt^send^deactvt( sta^idx, group ) then #ADD 01490 CMD^LOGOFF^G move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE 01491 /01492 CMD^LOGOFF^G #ADD 01507 CMD^LOGOFF^G call init^logoff( nmm^logoff^group^l, userbuf.nmm.mci^id, prefix, service, traffic, avs, userbuf.nmm.security ); #DELETE 01508 /01509R01 CMD^LOGOFF^G #ADD G015131P CMD^LOGOFF^G^GSI move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE G015131Q/G015131R CMD^LOGOFF^G^GSI #ADD G0151322 CMD^LOGOFF^G^GSI avs, userbuf.nmm.security ); #DELETE G0151323 CMD^LOGOFF^G^GSI #ADD 01578 CMD^LOGOFF^P move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.prefix, bniif^tbl.prefix[j].num ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE 01578R00/01578R06 CMD^LOGOFF^P #ADD 01601 CMD^LOGOFF^P call init^logoff( nmm^logoff^prefix^l, userbuf.nmm.mci^id, userbuf.nmm.prefix, service, traffic, avs, userbuf.nmm.security ); #DELETE 01602 /01604R01 CMD^LOGOFF^P #ADD O016091U CMD^LOGOFF^P^GSI init ( userbuf, " ", wlen( timer^userbuf^def ) ); move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.prefix, bniif^tbl.prefix[j].num ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE O016091V/O016091f CMD^LOGOFF^P^GSI #ADD O016092R CMD^LOGOFF^P^GSI avs, userbuf.nmm.security ); #DELETE O016092S CMD^LOGOFF^P^GSI #ADD 01714K04 CMD^LOGON^G move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE 01714K05/01714K0D CMD^LOGON^G #ADD 01714T02 CMD^LOGON^G call init^logon( nmm^info^cde, userbuf.nmm.mci^id, prefix, service, traffic, avs, userbuf.nmm.security ); #DELETE 01714T03/01714T04 CMD^LOGON^G #ADD 01720 CMD^LOGON^G move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE 01721 /01722 CMD^LOGON^G #REPLACE 01729 CMD^LOGON^G end; #DELETE 01730 /01737 CMD^LOGON^G #ADD 01748R09 CMD^LOGON^G call init^logon( nmm^info^cde, userbuf.nmm.mci^id, prefix, service, traffic, avs, userbuf.nmm.security ); #DELETE 01748N0I/01748N0K CMD^LOGON^G #ADD G017551s CMD^LOGON^G^GSI move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE G017551t/G017551v CMD^LOGON^G^GSI #REPLACE G0175521 CMD^LOGON^G^GSI end; #DELETE G0175522/G017552A CMD^LOGON^G^GSI #ADD G017552h CMD^LOGON^G^GSI avs, userbuf.nmm.security ); #DELETE G017552i CMD^LOGON^G^GSI #ADD 01822 CMD^LOGON^P move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.prefix, bniif^tbl.prefix[j].num ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE 01822R00/01834 CMD^LOGON^P #ADD 01844R0B CMD^LOGON^P service, traffic, avs, userbuf.nmm.security ); #DELETE 01844R0C/01847R00 CMD^LOGON^P #ADD O018521e CMD^LOGON^P^GSI move ( userbuf.nmm.mci^id, bniif^tbl.mci^id ); move ( userbuf.nmm.prefix, bniif^tbl.prefix[j].num ); move ( userbuf.nmm.security, bniif^tbl.security^cde ); #DELETE O018521f/O018521z CMD^LOGON^P^GSI #ADD O018522X CMD^LOGON^P^GSI avs, userbuf.nmm.security ); #DELETE O018522Y CMD^LOGON^P^GSI #DELETE 0185270P/0185270W CMD^NETWK^CONN^STAT #REPLACE 0185280N CMD^NETWK^CONN^STAT call init^echotest( j, pct.station[ j ].traffic ); #DELETE 0185280O/01852810 CMD^NETWK^CONN^STAT #DELETE T0251600/T025160F CMD^WARMBOOT #DELETE T0266600/T026660B INIT^^INITIALIZATION #REPLACE T026750I/T026750J INIT^ACTVT proc init^actvt( sta^idx, group ); int sta^idx; string .group; #ADD T026750Y INIT^ACTVT if find^specific^timer( tcb^g, typ^16^actvt^intrvl^l ) then begin call timer^delete( tcb^g, typ^16^actvt^intrvl^l ); end; #REPLACE T026750d INIT^ACTVT group, #ADD T026750t INIT^ACTVT movl( userbuf.nmm.mci^id, group, max^group^lgth^g ); #ADD T026751L INIT^ACTVT timer.userbuf ':=' userbuf for wlen( userbuf ); #ADD 03156 INIT^ECHOTEST wlform( frmt^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, FORMAT ERROR " ) wlform( collapse^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, MESSAGE COLLAPSE ERROR " ) wlform( timr^err, "FAILURE TO SEND NETWORK CONNECTION STATUS " ',' "REQUEST, TIMER TABLE ERROR" ) #ADD 03166*00 INIT^ECHOTEST string .fiid[ 0:3 ] := [ 4 * [" "] ]; #ADD 03179L0K SUB^INIT^ECHOTEST if not sem^frmt^nmm^request( sem, nmm^info^cde, group ) then begin call log^message^( 0585, ! routing^code !, @frmt^err, net.myname, evt^msg^severity^err^l ); return false; end; #DELETE O0317900/O031791y SUB^INIT^ECHOTEST #REPLACE 03184 /03184 OFFSET 0 SUB^INIT^ECHOTEST if not util^^collapse( sem, csem, extlgth ) then begin call log^message^( 0586, ! routing code !, @collapse^err, net.myname, evt^msg^severity^err^l ); #ADD 03185 SUB^INIT^ECHOTEST end; #ADD 03192 SUB^INIT^ECHOTEST if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, subtype^echotest^l ) ) then begin call log^message^( 0587, ! routing code !, @timr^err, net.myname, evt^msg^severity^err^l ); #DELETE 03193 /03194 SUB^INIT^ECHOTEST #ADD 03195 SUB^INIT^ECHOTEST end; #ADD 03198 SUB^INIT^ECHOTEST if not ( @timer := timer^insert( tcb^g, pct.timers.nmm, type^nmm^l, subtype^msg^failed^l ) ) then begin call log^message^( 0588, ! routing code !, @timr^err, net.myname, evt^msg^severity^err^l ); #DELETE 03199 /03200 SUB^INIT^ECHOTEST #ADD 03201 SUB^INIT^ECHOTEST end; #ADD 03224 SUB^INIT^ECHOTEST if gsi^used^g then begin fiid ':=' pct.swi^id for sizeof( fiid ); call util^get^bniif( fiid^l, fiid, group, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, ! security! ); call sub^init^echotest( nmm^echo^l, group ); call usesegment( seg^id ); return; end else #REPLACE 03628R02 INIT^LOGOFF avs^typ, security ); #ADD 03634R01 INIT^LOGOFF string .security; #ADD 03652R01 SUB^INIT^LOGOFF service, traffic, avs^typ, security ); #DELETE 03652R02 SUB^INIT^LOGOFF #ADD 03659R02 SUB^INIT^LOGOFF string .security; #ADD 03669R00 SUB^INIT^LOGOFF if not sem^frmt^nmm^request( sem, nmm^info^cde, group, prefix, service, traffic, avs^typ, security ) then #DELETE 03669R01/03669R02 SUB^INIT^LOGOFF #ADD O0367707 SUB^INIT^LOGOFF mov^ ( userbuf.nmm.security, security ); #ADD 03719T06 SUB^INIT^LOGOFF service, traffic, avs^typ, security ); #DELETE 03719T07 SUB^INIT^LOGOFF #ADD O0371902 SUB^INIT^LOGOFF credit^l, traffic, avs^typ, security ); #DELETE O0371903 SUB^INIT^LOGOFF #ADD O0371905 SUB^INIT^LOGOFF debit^l, traffic, avs^typ, security ); #DELETE O0371906 SUB^INIT^LOGOFF #ADD 03756 INIT^LOGON service, traffic, avs^typ, security ); #DELETE 03756N00/03756R01 INIT^LOGON #ADD 03762N02 INIT^LOGON string .security; #ADD 03777 SUB^INIT^LOGON service, traffic, avs^typ, security ); #DELETE 03777N00/03777N01 SUB^INIT^LOGON #ADD 03783N02 SUB^INIT^LOGON string .security; #ADD 03793 SUB^INIT^LOGON if not sem^frmt^nmm^request( sem, nmm^info^cde, group, prefix, service, traffic, avs^typ, security ) then #DELETE 03794 /03794N01 SUB^INIT^LOGON #ADD 03800T08 SUB^INIT^LOGON mov^ ( userbuf.nmm.security, security ); #ADD 03848T01 SUB^INIT^LOGON service, traffic, avs^typ, security ); #DELETE 03848T02 SUB^INIT^LOGON #ADD O0384803 SUB^INIT^LOGON credit^l, traffic, avs^typ, security ); #DELETE O0384804 SUB^INIT^LOGON #ADD O0384806 SUB^INIT^LOGON debit^l, traffic, avs^typ, security ); #DELETE O0384807 SUB^INIT^LOGON #ADD 04712 PSTM^0200^REQUEST struct .csem( sem^def ); struct .ilf( ilf^def ); struct .susp( susp^bnet^def ); #DELETE 04713 /04714 PSTM^0200^REQUEST #ADD 04721j01 PSTM^0200^REQUEST int ilf^lgth; int ilf^sem^lgth; #ADD E0472102 PSTM^0200^REQUEST ?page "subproc sub^apprv^blind of pstm^0200^request" !################################################################# !# # !# sub^apprv^blind # !# # !# This subprocedure approves the transaction blind. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to BASE24 internal POS message. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^apprv^blind( pstm ); int .pstm( pstm^def ); begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, pos^resp^apprv^no^bal^d ); call util^generate^approval^code( pstm ); call util^send^pstm( pstm, msg^sym^source ); end; ! subproc sub^apprv^blind of pstm^0200^request ?page "pstm^0200^request" !################################################################# !# # !# This is the main body of PROC pstm^0200^request # !# # !################################################################# #ADD 04788|0k PSTM^0200^REQUEST if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); end; #DELETE G0478800/G0478806 PSTM^0200^REQUEST #DELETE G0479903/G0479904 PSTM^0200^REQUEST #ADD 04799T03 PSTM^0200^REQUEST call sub^apprv^blind( pstm ); #DELETE 04799T04/04799T07 PSTM^0200^REQUEST #ADD 04808 PSTM^0200^REQUEST if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin if ilf.extrn^msg^lgth = "0000" or ilf.extrn^msg^lgth = " " then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); call sub^apprv^blind( pstm ); return; end; call ascii^integer^( ilf.extrn^msg^lgth, ilf^sem^lgth ); movl( sem, ilf.extrn^msg.savearea, ilf^sem^lgth ); ! convert the internal adjustment to an external reversal ! if not pstm^frmt^0420^to^xrvsl( pstm, sem ) then begin call pstm^0200^route( susp, resp^format^error^pos^l, sub^format^error^l ); return; end else begin if not util^^collapse( sem, csem, extlgth ) then begin call pstm^0200^route( susp, resp^format^error^pos^l, sub^format^error^l ); return; end; call util^saf^add( csem, extlgth, pos^l, service ); call util^ilf^updt( fnum, ilf, ilf^lgth,, pstm, sem ); call sub^apprv^blind( pstm ); return; end !of else end ! of if util^ilf^get^pos^adj else begin ! no ILF found call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end end ! of pos^adjust^d or pos^pmnt^adj^d else if pos^return^adjust^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); call sub^apprv^blind( pstm ); return; end !if util^ilf^get^pos^adj else begin call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end end ! of pos^return^adjust^d else #ADD 04882{0F PSTM^0200^ROUTE if substate = sub^timeout^l then begin ! ! Log SEM on timeout ! call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, susp.extrn^msg, susp.extrn^msg^lgth, substate ); end else begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem length !, substate ); end; #DELETE 04882{0G/04882{0L PSTM^0200^ROUTE #ADD T0498202 PSTM^0220^FORCE^POST struct .ilf( ilf^def ); #ADD 04986j01 PSTM^0220^FORCE^POST int fnum; int found^txn^sub^tkn := false; int ilf^lgth; int ilf^sem^lgth; #ADD T0498605 PSTM^0220^FORCE^POST int txn^subtyp^tkn^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); string tkn^id[ 0:1 ]; #ADD T0499308 PSTM^0220^FORCE^POST if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); end; #DELETE C0499300/C049930C PSTM^0220^FORCE^POST #ADD 05011j04 PSTM^0220^FORCE^POST if pos^return^d(pstm) then begin call util^ilf^add(pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, !sem!,!sem^lgth!, sub^ok^l); return; end else if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin if ilf.extrn^msg^lgth = "0000" or ilf.extrn^msg^lgth = " " then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); return; end; call ascii^integer^( ilf.extrn^msg^lgth, ilf^sem^lgth ); movl( sem, ilf.extrn^msg.savearea, ilf^sem^lgth ); ! convert the internal adjustment to an external reversal ! if not pstm^frmt^0420^to^xrvsl( pstm, sem ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); return; end else begin if not util^^collapse( sem, csem, extlgth ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm, sem ); return; end; call util^saf^add( csem, extlgth, pos^l, service^typ ); call util^ilf^updt( fnum, ilf, ilf^lgth,, pstm, sem ); return; end !of else end ! of if util^ilf^get^pos^adj else begin ! ! no ILF found ! call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end end ! of pos^adjust^d or pos^pmnt^adj^d else if pos^return^adjust^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); return; end !if util^ilf^get^pos^adj else begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end end; ! of pos^return^adjust^d #ADD X0501100 PSTM^0220^FORCE^POST avs^typ ) then #DELETE X0501101 PSTM^0220^FORCE^POST #ADD X0501102 PSTM^0220^FORCE^POST #DELETE T0501105 PSTM^0220^FORCE^POST #ADD T050110H PSTM^0220^FORCE^POST if not util^^collapse( sem, csem, extlgth ) then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^format^error^l ); end ! of if not util^^collapse( else #ADD 05201}02 PSTM^0420^REVERSAL int found^txn^sub^tkn := false; #ADD 05201}09 PSTM^0420^REVERSAL int txn^subtyp^tkn^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); string tkn^id[ 0:1 ]; #ADD J0521006 PSTM^0420^REVERSAL if pos^adjust^d( pstm ) or pos^return^adjust^d( pstm ) then begin ! ! Adjustment reversal, we'll just log to the ILF. ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^fail^pre^auth^l ); return; end; #REPLACE 05210}0E/05210}0E OFFSET 0 PSTM^0420^REVERSAL if pos^pre^auth^d( pstm ) and pos^preauth^match^d( pstm ) then begin init( prikey, " ", wlen( prikey^def ) ); move( prikey.seq^num, pstm.pre^auth^seq^num ); prikey.tran^dat^tim ':=' concat( pstm.term^fiid ) & concat( pstm.retl^sic^cde ) & concat( pstm.tran.tran^cde.tc ); end; #ADD G0522201 PSTM^0420^REVERSAL if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); end; #REPLACE G0522204 PSTM^0420^REVERSAL if ( pos^return^d( pstm ) and not pos^pmnt^d( pstm ) ) or #ADD 0522220F PSTM^0420^REVERSAL if sem.typ = "04" then begin ! ! Adjustment was previously converted to a reversal. ! We'll just log the reversal to the ILF. ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^fail^pre^auth^l ); return; end; #ADD G0537431 SEM^ACTVT^RESPONSE int .timer( timer^def ); struct .userbuf( timer^userbuf^def ); init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^x ); if max^group^lgth^g = 5 then begin movl( userbuf.nmm.mci^id, sem.pan.num, 5 ); end else begin movd( userbuf.nmm.mci^id.byte[0], "0" ); movl( userbuf.nmm.mci^id.byte[1], sem.pan.num, 5 ); end; if not ( @timer := find^specific^timer( tcb^g, typ^16^actvt^intrvl^l ) ) then begin if ( @timer := timer^insert( tcb^g, actvt^intrvl^timr^g, typ^16^actvt^intrvl^l ) ) then begin timer.userbuf ':=' userbuf for wlen( userbuf ); end; ! activate timer set ! end; ! activate timer not found ! if @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^actvt^l, userbuf, woffset( userbuf.nmm ) ) then begin call delete^this^timer( tcb^g, timer ); set( pct.station[ sta^x ].up, true ); end; #REPLACE O0661203 SEM^REQUEST tag^data[ 0 ].svc = "17" or #ADD O0661206 SEM^REQUEST sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 0 ].svc = "20" ) and #REPLACE O066120A SEM^REQUEST tag^data[ 1 ].svc = "17" or #ADD O066120D SEM^REQUEST sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ 1 ].svc = "20" ) and #DELETE 06842 /06861#01 SEM^RESPONSE #ADD 07179 SEM^RESPONSE^POS int .xrqst( sem^def ) := @susp.extrn^msg; #REPLACE 07191 /07191 OFFSET 0 SEM^RESPONSE^POS call sem^frmt^xrqst^to^sem^xrvsl( xrqst, rvsl, resp^frmt^err^sem^d ); #REPLACE 07193T00 SEM^RESPONSE^POS return; #ADD 07206 SEM^RESPONSE^POS if pos^pre^auth^d( pstm ) and sem^preauth^match^d( sem ) then begin if pstm.pre^auth^seq^num = "APPROVALCODE" then begin init ( pstm.pre^auth^seq^num, " ", $len( pstm.pre^auth^seq^num ) ); move( pstm.pre^auth^seq^num, pstm.tran.apprv^cde ); end else begin move( pstm.pre^auth^seq^num, pstm.seq^num ); end; move( susp.prikey.seq^num, pstm.pre^auth^seq^num ); susp.prikey.tran^dat^tim ':=' concat( pstm.term^fiid ) & concat( pstm.retl^sic^cde ) & concat( pstm.tran.tran^cde.tc ); end; #DELETE 07207 SEM^RESPONSE^POS #ADD 08008R00 TIM^OUT^00^OUTBOUND struct .csem( sem^def ); struct .susp( susp^bnet^def ); struct .xrvsl( sem^def ); #DELETE 08008R01 TIM^OUT^00^OUTBOUND #ADD 08013 TIM^OUT^00^OUTBOUND int extlgth := 0; #REPLACE 08023 /08023 OFFSET 0 TIM^OUT^00^OUTBOUND if sem.proc^cde <> sem^bal^inq^d then begin init( xrvsl, " ", wlen( sem^def ) ); call sem^frmt^xrqst^to^sem^xrvsl( sem, xrvsl, rvsl^error^d ); movl( susp.extrn^msg, xrvsl, wlen( sem^def ) ); if util^^collapse( xrvsl, csem, extlgth ) then begin call util^saf^add( csem, extlgth, susp.rec^typ, userbuf.nmm.service ); end; end; #DELETE 08023}01/08023}0L TIM^OUT^00^OUTBOUND #ADD G080230U TIM^OUT^00^OUTBOUND call stm^0200^route( susp, resp^sys^error^atm^l, sub^timeout^l ); #ADD G080230Y TIM^OUT^00^OUTBOUND call pstm^0200^route( susp, resp^unable^to^process^pos^l, sub^timeout^l ); #DELETE G080230Z/G080230a TIM^OUT^00^OUTBOUND #ADD 08160 TIM^OUT^05^NMM wlform( activate, "Station \S Activation timed out" ) wlform( deactivate, "Station \S Deactivation timed out" ) #ADD 08166d12 TIM^OUT^05^NMM if nmm^info^cde = nmm^actvt^l then begin call log^message^( 2890,, @activate, net.myname, evt^msg^severity^warn^l, @pct.station[local^userbuf.sta^x].nam ); end; if nmm^info^cde = nmm^deactvt^l then begin call log^message^( 2895,, @deactivate, net.myname, evt^msg^severity^warn^l, @pct.station[local^userbuf.sta^x].nam ); end; #ADD 08216 TIM^OUT^06^XNMM string .security[ 0:7 ] := [ 8 * [" "] ]; #ADD 08217R07 TIM^OUT^06^XNMM mov^ ( security, userbuf1.nmm.security ); #ADD 08227 TIM^OUT^06^XNMM call init^logon( timer.subtype, group, prefix, service, traffic, avs^typ, security ); #DELETE 08228 /08228O01 TIM^OUT^06^XNMM #ADD T0824302 TIM^OUT^06^XNMM call init^actvt( sta^x, group ); #DELETE T0824303/T082430B TIM^OUT^06^XNMM #ADD T084680N TIM^OUT^16^ACTVT^INTRVL ! ! Because timer userbuf is above the 32K boundary, it must ! be moved to local memory in order to access byte addressed ! fields within the timer userbuf -- ie group & prefix. ! struct .local^userbuf( timer^userbuf^def ); move( local^userbuf, userbuf ); call init^actvt( userbuf.sta^x, local^userbuf.nmm.mci^id ); return; #DELETE T084680O/T084680x TIM^OUT^16^ACTVT^INTRVL #ENDSCN = SW0D103 !#CMP2.28 02/26/09 BNETLIBS6148 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6148 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6148 * ******************************************************************************** #SCN = SW0D120 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6148 #NEWVERSION = 6149 #ADD 04419v0s ! 26FEB2009 frederr ! Symptom: Balance Inquiry response transactions contain the ! balance amount in an incorrect currency. ! Problem: The interface looks for a balance amount in the external ! response message in DE-54 (additional amounts). DE-54 ! may have the balance amount in different currencies. ! The interface simply uses the first balance amount it ! finds no matter what the currency of that amount is. ! Fix: Modified the interface to look for a DE-54 balance ! amount in the currency of the interface. If none is ! found, then use the first balance amount found. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #489846. #REPLACE 10547 /10547 OFFSET 0 SUB^CONVERT^AMT if sem.addl^amt.info[ i ].amt^typ = "02" and sem.addl^amt.info[ i ].crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then #DELETE 10555 /10561 SUB^CONVERT^AMT #REPLACE 10570 /10570 OFFSET 0 SUB^CONVERT^AMT if sem.addl^amt.info [ i ].amt^typ = "01" and sem.addl^amt.info[ i ].crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) and not avail^found then #DELETE 10578 /10580 SUB^CONVERT^AMT #DELETE 10582 /10584 SUB^CONVERT^AMT #ADD 10592 SUB^CONVERT^AMT if not avail^found and not ledg^found then begin i := 0; while not ( avail^found or ( i = cnt ) ) do begin if sem.addl^amt.info[ i ].amt^typ = "02" then ! ! ! Available balance maps to PSTM.TRAN.AMT^1 ! ! if present ! ! ! begin call ascii^fixed^( sem.addl^amt.info[i].amt, tran^amt ); if sem.addl^amt.info[ i ].crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; end; pstm.tran.amt^1 := tran^amt; if sem.addl^amt.info[ i ].typ^amt = "D" then begin pstm.tran.amt^1 := -1f * tran^amt; end; avail^found := true; end; if sem.addl^amt.info [ i ].amt^typ = "01" and not avail^found then ! ! ! Ledger balance maps to PSTM.TRAN.AMT^1 ! ! if no available balance present ! ! ! begin call ascii^fixed^( sem.addl^amt.info[i].amt, tran^amt ); if sem.addl^amt.info[ i ].crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if not sub^convert^amt( tran^amt ) then begin return false; end; end; pstm.tran.amt^1 := tran^amt; if sem.addl^amt.info[ i ].typ^amt = "D" then begin pstm.tran.amt^1 := -1f * tran^amt; end; ledg^found := true; end; i := i + 1; end; end; #ENDSCN = SW0D120 !#CMP2.28 03/02/09 BNETLIBS6149 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6149 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6149 * ******************************************************************************** #SCN = SW0D122 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6149 #NEWVERSION = 6150 #ADD 04419w0F ! 02MAR2008 bensone ! Symptom: SAF SEND uses the wrong TIMER if POS isn't configured. ! Problem: The POS SAF timeout value was always used. ! Fix: Check the saf.rec^typ to use the appropriate timer, ! either ATM, POS or a default of 30 seconds. ! Proc modified: util^saf^send ! Dependency: Apply fixes to BNETLIBS and run Make. ! Reference: Case #488790. ! 02MAR2008 bensone ! Symptom: DE 48 SE77 not being set properly based on MCC. ! Problem: The code to set DE 48 SE 77 was placed with the IF ! condition instead of the else condition. ! Fix: Set DE 48 SE 77 when the transaction specific data ! token is not found instead of when it is found. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS and run Make. ! Reference: Case #490827. #ADD 05708v0B PSTM^FRMT^0200^TO^XRQST end; ! of if txn^spcf^data^tkn.dataset^id = "57" #DELETE 05708v0C/05708v0U PSTM^FRMT^0200^TO^XRQST #ADD 05708N2X PSTM^FRMT^0200^TO^XRQST end ! of if fnd^txn^spcf^data^tkn found else begin if sem.merch^typ = "7995" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C04" ); end else if sem.merch^typ = "6532" or sem.merch^typ = "6533" or sem.merch^typ = "6534" or sem.merch^typ = "4829" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C01" ); end; end; ! of else fnd^txn^spcf^data^tkn not found #DELETE 05708N2Y PSTM^FRMT^0200^TO^XRQST #ADD 23138 UTIL^SAF^SEND if saf.rec^typ = pos^l and pct.pos.present = true then begin limit := pct.pos.timers.saf; end else if saf.rec^typ = atm^l and pct.atm.present = true then begin limit := pct.atm.timers.saf; end else if pct.pos.present = true then begin limit := pct.pos.timers.saf; end else if pct.atm.present = true then begin limit := pct.atm.timers.saf; end else begin limit := 3000d; end; #DELETE 23139 UTIL^SAF^SEND #ENDSCN = SW0D122 !#CMP2.28 03/04/09 BNETLIBS6150 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6150 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6150 * ******************************************************************************** #SCN = SW0D130 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6150 #NEWVERSION = 6151 #ADD 04419x0J ! 04MAR2009 engelk ! Symptom: The interface returns a SEM response code of "01", Refer ! to card issuer, when BASE24 times out on a POS ! transaction. ! Problem: MasterCard does not want to see a SEM response code of ! "01" for timeout situations. The interface correctly ! responds with a SEM response code of "91", Authorization ! System or issuer system inoperative, when the interface ! times out waiting for an issuer response. ! Fix: Modified the code to consistently return a response code ! of "91" for timeout situations. ! Procs modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #490911 #REPLACE 08183 PSTM^FRMT^RESP^CDE^TO^SEM "113",! Referral; Timeout ! "91",! A - 91, P - 91! #ENDSCN = SW0D130 !#CMP2.28 03/09/09 BNETS 60110FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60110 * ******************************************************************************** #SCN = SW0D134 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y0002611 ! 09MAR2009 frederr ! Symptom: The interface is abending when it encounters an ! empty ILF file during cutover or initialization. ! Problem: The interface abends when it attempts to find an ILF ! header record. The interface will add an ILF header ! record when it creates an ILF, but some customers create ! ILFs using a batch program. In this case the interface ! will abend. ! Fix: Modified the interface to create the ILF header record ! if it cannot find one during initialization or cutover. ! Proc Modified: init^ilf^review. ! Dependency: Apply fix to BNETS. Replace BNETLOGM. Run Make. ! Reference: Case #490694. #ADD 03501 INIT^ILF^REVIEW struct .prikey( prikey^def ); #DELETE 03502p00 INIT^ILF^REVIEW #ADD 03523 SUB^ALIGN^TRACE^NUM ! ! Read failed due to no header record. Add a header record ! then attempt the read again. ! init ( prikey, " ", wlen( prikey^def ) ); if not util^ilf^add( pct.ilf[ index ].dat, prikey, $len( prikey ), header^l ) then begin return false; end; if pct.ilf[ index ].fcb.file^frmt = 1 then begin ferror := hiswfile^position( fnum, 0d ) end; if pct.ilf[ index ].fcb.file^frmt = 2 then begin ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, 0f ); end; if ferror then begin call fileinfo( fnum, !error!, filename ); txt ':=' "POSITION"; call log^message^( 1145, !routing code!, @error1, net.myname, 1, @txt, @filename, ferror ); call hiswfile^close( fnum ); set ( fnum, -2 ); return false; end; if ferror := hiswfile^read( fnum, hdr, $len(ilf^def ),, feeof ) then begin call fileinfo( fnum, !error!, filename ); txt ':=' "READ"; call log^message^( 1150, !routing code!, @error1, net.myname, 1, @txt, @filename, ferror ); call hiswfile^close( fnum ); set ( fnum, -2 ); return false; end; #DELETE 03524 /03530 SUB^ALIGN^TRACE^NUM #ENDSCN = SW0D134 !#CMP2.28 03/10/09 BNETLIBS6151 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6151 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6151 * ******************************************************************************** #SCN = SW0D136 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6151 #NEWVERSION = 6152 #ADD 04419y0F ! 06MAR2009 engelk ! Symptom: DE-112 (Additional Data National Use) SE-1 (Reason ! on-line) does not contain the reason on-line code for UK ! Domestic Maestro transactions when provided by the ! terminal. ! Problem: DE-112 SE-1 is set by EMV specific code based upon the ! EMV Status (B4) token's reason online field. However, ! after that call, the interface attempts to format DE-112 ! SE-2 (Retailer Classification Code) based upon code in ! the POS Data 1 (CH) token's retailer class code field. ! Since the second subfield is to be set, the interface ! initializes the first subfield so the transaction can ! be correctly collapsed and expanded, wiping out the ! reason on-line information already formatted. ! Fix: Added code to only initialize DE-112 SE-1 when setting ! DE-112 SE-2 from the POS Data1 (CH) token if SE-1's tag ! has not already correctly been set to 001 when ! processing the EMV status (B4) token. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS and BNETEMVS. Run Make. ! Reference: Case #491316 #ADD 06331r0u PSTM^FRMT^0200^TO^XRQST if sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag <> "001" then begin ! ! Only if DE-112, subfield 1, reason online not ! already set based on the EMV Status (B4) token in ! EMV format proc called above ! movd( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag, "001" ); call integer^ascii^( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.lgth, $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1. tag^data ) ); init( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data, " ", $len( sem.adnl^data^natl.ukdm. rsn^onl^cde^sub^fld^1.tag^data ) ); end; ! set DE-112, SE-1 #DELETE 06331r0v/06331r1A PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0D136 !#CMP2.28 03/11/09 BNETG 6056 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6056 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6056 * ******************************************************************************** #SCN = SW0D142 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6056 #NEWVERSION = 6057 #ADD 00026&0I ! 11MAR2009 engelk ! Symptom: POS Balance (CB) token was not included in PSTM 0210 ! responses for PrePaid card transactions from MasterCard. ! Problem: When code was added to move balances from the CB token ! to the SEM for PrePaid cards (8.2 mandates), no code was ! added for support the other direction. ! Fix: Added a define (bnet^prepaid^d) to identify PrePaid card ! responses from MasterCard via a check on DE-63.1 ! Financial Network Code. ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. Replace ! BNETLOGM. ! Reference: Case #479612 #ADD 00233z0G ! where x = sem.banknet^data.ntwk^id^cde define bnet^prepaid^d( x ) = ( x = "MHA" or ! MC Healthcare Non-tax x = "MIA" or ! MC Unembossed Student Card x = "MIK" or ! MC Electronic Consumer Non US Student Card x = "MIL" or ! MC Unembossed Non U.S. Student Card x = "MIP" or ! MC Debit Student Card x = "MPA" or ! MC Payroll Card x = "MPF" or ! MC Gift Card x = "MPG" or ! MC Consumer Reloadable Card x = "MPK" or ! MC Government Commercial Card x = "MPM" or ! MC Consumer Promotion Card x = "MPN" or ! MC Insurance Card x = "MPO" or ! MC Other Card x = "MPR" or ! MC Travel Card x = "MPT" or ! MC Teen Card x = "MPV" or ! MC Government Benefit Card x = "MPW" or ! MC Corporate Card x = "MPX" or ! MC Flex Benefit Card x = "MPY" or ! MC Employee Incentive Card x = "MPZ" or ! MC Emergency Assistance Card x = "MRB" or ! MC Electronic BusinessCard x = "MRC" or ! MC Electronic Card x = "MRG" or ! MC Card Outside US x = "MRL" or ! MC Electronic Commercial x = "MRW" or ! MC BusinessCard Credit Outside US x = "MSA" or ! Maestro Payroll Card x = "MSF" or ! Maestro Gift Card x = "MSG" or ! Maestro Consumer Reloadable Card x = "MSM" or ! Maestro Consumer Promotion Card x = "MSN" or ! Maestro Insurance Card x = "MSO" or ! Maestro Other Card x = "MSQ" or ! Maestro Reserved for Future Use x = "MSR" or ! Maestro Travel Card x = "MST" or ! Maestro Teen Card x = "MSV" or ! Maestro Government Benefit Card x = "MSW" or ! Maestro Corporate Card x = "MSX" or ! Maestro Flex Benefit Card x = "MSY" or ! Maestro Employee Incentive Card x = "MSZ" or ! Maestro Emergency Assistance Card x = "MUS" or ! MC Unembossed US x = "SUR" )#; ! MC Unembossed Outside US #ENDSCN = SW0D142 !#CMP2.28 03/11/09 BNETLIBS6152 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6152 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6152 * ******************************************************************************** #SCN = SW0D143 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6152 #NEWVERSION = 6153 #ADD 04419z0M ! 11MAR2009 engelk ! Symptom: POS Balance (CB) token was not included in PSTM 0210 ! responses for PrePaid card transactions from MasterCard. ! Problem: When code was added to move balances from the CB token ! to the SEM for PrePaid cards (8.2 mandates), no code was ! added for support the other direction. ! Fix: Added a call to sem^frmt^amt^to^pstm^amt for Prepaid ! card transactions. Added code to that proc to format ! the POS Balance (CB) token with Prepaid balance ! information from DE-54. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! sem^frmt^amt^to^pstm^amt ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. Replace ! BNETLOGM. ! Reference: Case #479612 #REPLACE 10006 SEM^FRMT^AMT^TO^PSTM^AMT struct .pos^bal^tkn( pos^bal^tkn^def ); #ADD 10017 SEM^FRMT^AMT^TO^PSTM^AMT int pos^bal^tkn^lgth := 0; #ADD 10534 SUB^CONVERT^AMT if pos^approved^d( pstm ) and pos^inquiry^d( pstm ) and #REPLACE 10535 SUB^CONVERT^AMT addl^amt^bit^d then #ADD 10599 SUB^CONVERT^AMT if bnet^prepaid^d( sem.banknet^data.ntwk^id^cde ) and addl^amt^bit^d then begin ! ! Pull balances from DE-54 and place them in ! the POS Balances (CB) token ! avail^found := false; ledg^found := false; if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end else begin return true; end; movd( tkn^id, pos^bal^tkn^id^d ); call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^bal^tkn ); ! ! Loop through DE-54 amounts looking for available ! balance information to load into the POS Balances token ! i := 0; while i < cnt do begin if sem.addl^amt.info[ i ].amt^typ = "02" and sem.addl^amt.info[ i ].crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin ! ! Available balance currency code matches ! ICF currency code: ! Available balance maps to ACCT-AMT-1 ! Currency code maps to ACCT-CRNCY-CDE ! avail^found := true; call ascii^fixed^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.acct^amt^1 ); if sem.addl^amt.info[ i ].typ^amt = "D" then begin pos^bal^tkn.acct^amt^1 := -1f * pos^bal^tkn.acct^amt^1; end; move( pos^bal^tkn.acct^crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); end; ! available balance found in acct currency if sem.addl^amt.info[ i ].amt^typ = "02" and sem.addl^amt.info[ i ].crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin ! ! Available balance not found in acct ! currency; map available balance to TXN-AMT-1 ! Currency code maps to TXN-CRNCY-CDE ! if present ! avail^found := true; call ascii^fixed^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.txn^amt^1 ); if sem.addl^amt.info[ i ].typ^amt = "D" then begin pos^bal^tkn.txn^amt^1 := -1f * pos^bal^tkn.txn^amt^1; end; ! if negative balance move( pos^bal^tkn.txn^crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); end; ! available balance different currency i := i + 1; end; ! of while i < cnt ! ! If no available balance found; loop through DE-54 s ! amounts looking for ledger balance information to load ! into the POS Balances token ! i := 0; while not avail^found and i < cnt do begin if sem.addl^amt.info[ i ].amt^typ = "01" and sem.addl^amt.info[ i ].crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin ! ! Ledger balance maps to ACCT-AMT-1 ! Currency code maps to ACCT-CRNCY-CDE ! if no available balance present ! ledg^found := true; call ascii^fixed^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.acct^amt^1 ); if sem.addl^amt.info[ i ].typ^amt = "D" then begin pos^bal^tkn.acct^amt^1 := -1f * pos^bal^tkn.acct^amt^1; end; move( pos^bal^tkn.acct^crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); end; ! ledger balance found in acct currency if sem.addl^amt.info[ i ].amt^typ = "01" and sem.addl^amt.info[ i ].crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin ! ! Ledger balance not found in acct ! currency; map ledger balance to TXN-AMT-1 ! Currency code maps to TXN-CRNCY-CDE ! ledg^found := true; call ascii^fixed^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.txn^amt^1 ); if sem.addl^amt.info[ i ].typ^amt = "D" then begin pos^bal^tkn.txn^amt^1 := -1f * pos^bal^tkn.txn^amt^1; end; ! if negative balance move( pos^bal^tkn.txn^crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); end; ! ledger balance different currency i := i + 1; end; ! while loop thru DE-54 amts if avail^found or ledg^found then begin ! ! Add POS Balances token ! tkn^id ':=' pos^bal^tkn^id^d; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^bal^tkn, $len( pos^bal^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3280, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3282, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3282 ); end; ! error on tkn add other than no room end; ! of if tkn^result end; ! Prepaid balance found end; ! if bnet prepaid #REPLACE 10601 SUB^CONVERT^AMT end; ! sem.typ = "0210" or sem.typ = "0110" ! #ADD 12154 SEM^FRMT^XRESP^TO^PSTM^0210 if ( pos^approved^d( pstm ) and pos^inquiry^d( pstm ) ) or ( sem.typ = sem^auth^response^d and sem.resp^cde = "10" ) or bnet^prepaid^d( sem.banknet^data.ntwk^id^cde ) then ! ! Approved Balance Inquiry ! Partial Approval ! Approved or declined Prepaid transaction ! #DELETE 12155 /12159 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0D143 !#CMP2.28 03/17/09 BNETLIBS6153 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6153 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6153 * ******************************************************************************** #SCN = SW0D152 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6153 #NEWVERSION = 6154 #ADD 04419#0G ! 17MAR2009 frederr ! Symptom: The Acquiring Switch Token's (Token ID = B0) Entry ! Mode field contains blanks in PSTM 0210 messages. ! Problem: DE-22 (POS Entry Mode) should be used to populate the ! Switch Token's Entry Mode field. But DE-22 is not ! sent back in external response messages. It is in the ! external request message and that value should be used ! to format the B0 token. ! Fix: Modified the interface to always populate the Switch ! Token's Entry Mode field to the value in the request's ! DE-22 when processing an external response message from ! MasterCard. ! Procs modified: util^swi^tkn^init ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #488981. #REPLACE 25015 /25015 OFFSET 0 UTIL^SWI^TKN^INIT if pos^entry^mde^bit^d or sem.typ = sem^auth^response^d or sem.typ = sem^response^d then ! ! Set the token's POS entry mode if the bit is on or if this ! is a SEM response message. The entry mode is set on a SEM ! request, but not turned on in the response. But the ! request entry mode is moved to the response before this ! this proc is called. ! #ENDSCN = SW0D152 !#CMP2.28 03/17/09 BNETLIBS6154 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6154 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6154 * ******************************************************************************** #SCN = SW0D153 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6154 #NEWVERSION = 6155 #ADD 04419$0G ! 17MAR2009 engelk ! Symptom: MasterCard is sending 0190 negative acknowledgements in ! response to approved POS response messages from BASE24 ! which contain balance information. This results in the ! interface reversing the approved response to BASE24. ! Problem: Additional amounts (P-54) in SEM response messages ! contained account types that did not match the account ! type in the processing code (P-3). This occurs when ! the original SEM request does not specify an account ! type. The PSTM request formatted from that SEM also ! contains no specific account type. In this case, RTAU ! will fill the PSTM tran code with the actual account ! type used in processing. This was the account type ! used to format the account type in P-54. However, ! MasterCard does not want to see the account type change ! in the lifetime of the transaction. ! Fix: Modified the code to use the account type from P-3 to ! fill in the account type in P-54 when moving balances ! from the POS Balances (CB) token into additional ! amounts, rather than mapping the account type in the ! PSTM tran code to the appropriate SEM account type in ! P-54. ! Procs modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #490915 #REPLACE 07962c0O/07962c0Q SUB^CONVERT^AMT movl( sem.addl^amt.info[ i ].acct^typ, sem.proc^cde.byte[ 2 ], $len( sem.addl^amt.info[ i ].acct^typ ) ); #DELETE 07962c0R/07962c0f SUB^CONVERT^AMT #ENDSCN = SW0D153 !#CMP2.28 03/18/09 BNETDDLS6032 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6032 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6032 * ******************************************************************************** #SCN = SW0D154 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6032 #NEWVERSION = 6033 #ADD 00262f0G * 17MAR2009 engelk * Symptom: Not all region/purge date information entered in the * BNRLF MCC104 ACCOUNTS MANAGEMENT FILE (AMS REGION, * COUNTRY AND SUBCOUNTRY) screen was sent in the SEM * 0302 file update request to MasterCard. * Problem: Existing code assumed that purge date information for a * given region would only be sent if the purge date * information for the previous region was sent. Although * purge date information is required to be sent in a * specific region order, if available, no blank purge date * information should be sent to MasterCard. * Fix: Created an array redefine for the region/purge date * information so that the interface could loop through * this data placing it in the correct order in the SEM * 0302 file update message to MasterCard without sending * blank region purge date information. * Added redefines to the FRQST (file request) S-120 * (Record Data) file-rec MCC104 defintion and to the * PATH^RQST (pathway request) file-rec MCC104 area for * region/purge date information. * Dependency: Apply fixes to BNETDDLS, BNETLIBS, SCRNBRLF, and * RQBNRLFS. Run Make. * Reference: Case #491171 #ADD 00680Y0c FRQST 04 mcc104a redefines txt. 06 card-num-104 pic x(19). 06 cust-id pic x(6). 06 crd-pgm pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 filler2 pic x(25). 06 reg-ind-purg-dat occurs 6 times. 08 reg-ind pic x. 08 cntry pic x(3). 08 subcntry pic x(2). 08 purg-dat pic x(6). 06 filler4 pic x(871). #ADD 02476Y0c ICF-BNET 04 mcc104a redefines file-rec. 06 card-num-104 pic x(19). 06 cust-id pic x(6). 06 crd-pgm pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 reg-ind-purg-dat occurs 6 times. 08 reg-ind pic x. 08 cntry pic x(3). 08 subcntry pic x(2). 08 purg-dat pic x(6). 06 filler4 pic x. #ENDSCN = SW0D154 !#CMP2.28 03/18/09 BNETLIBS6155 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6155 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6155 * ******************************************************************************** #SCN = SW0D155 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6155 #NEWVERSION = 6156 #ADD 04419%0Q ! 17MAR2009 engelk ! Symptom: Not all region/purge date information entered in the ! BNRLF MCC104 ACCOUNTS MANAGEMENT FILE (AMS REGION, ! COUNTRY AND SUBCOUNTRY) screen was sent in the 0302 ! file update request to MasterCard. ! Problem: Existing code assumed that purge date information for a ! given region would only be sent if the purge date ! information for the previous region was sent. Although ! purge date information is required to be sent in a ! specific region order if available, no blank purge date ! information should be sent to MasterCard. ! Fix: Created an array redefine for the region/purge date ! information so that the interface could loop through ! this data placing it in the correct order in the SEM ! 0302 file update message to MasterCard without sending ! blank region/purge date information. ! Procs modified: path^frmt^file^rqst ! Dependency: Apply fixes to BNETDDLS, BNETLIBS, SCRNBRLF, and ! RQBNRLFS. Run Make. ! Reference: Case #491171 #ADD 04540 PATH^FRMT^FILE^RQST i, #REPLACE 04542 PATH^FRMT^FILE^RQST int regn := 0; #ADD 04656 PATH^FRMT^FILE^RQST lgth := $offset( sem.file^rec.mcc104.reg^ind^purg^dat1 ) - $offset( sem.file^rec.mcc104 ); regn := 0; for i := 0 to $occurs( sem.file^rec.mcc104a.reg^ind^purg^dat ) - 1 do begin if path.frqst.mcc104a.reg^ind^purg^dat[ i ] <> [ $len( path.frqst.mcc104a.reg^ind^purg^dat[ i ] ) * [ " " ] ] then begin move( sem.file^rec.mcc104a. reg^ind^purg^dat[ regn ], path.frqst.mcc104a.reg^ind^purg^dat[ i ] ); lgth := lgth + $len( sem.file^rec.mcc104a. reg^ind^purg^dat[ i ] ); regn := regn + 1; end; ! region data present end; ! for loop #DELETE 04657 /04717 PATH^FRMT^FILE^RQST #ENDSCN = SW0D155 !#CMP2.28 03/18/09 RQBNRLFS6023 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6023 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6023 * ******************************************************************************** #SCN = SW0D156 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6023 #NEWVERSION = 6024 #ADD 00018W0N * 17MAR2009 engelk * Symptom: Data from previous activity persists when using * the BNRLF MCC104 ACCOUNTS MANAGEMENT FILE (AMS * REGION, COUNTRY AND SUBCOUNTRY) screen, so data * sent to MasterCard does not necessarily reflect * the operator-input data from the BNRLF. * Problem: When a BNRLF MCC104 record was added, the region * indicator was not reset. Therefore, its values * were retained in the next record add. * Fix: Added code to reset the region indicator after a * record add. * Modified: 575-SAVE-RECORD * Dependency: Apply fixes to BNETDDLS, BNETLIBS, SCRNBRLF, and * RQBNRLFS. Run Make. * Reference: Case #491171. #ADD 01200S21 575-SAVE-RECORD MOVE "1" TO REG-IND1 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND1 OF MCC104 OF PATH-RQST. IF WS-REG-IND2 = "Y" MOVE "A" TO REG-IND2 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND2 OF MCC104 OF PATH-RQST. IF WS-REG-IND3 = "Y" MOVE "B" TO REG-IND3 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND3 OF MCC104 OF PATH-RQST. IF WS-REG-IND4 = "Y" MOVE "C" TO REG-IND4 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND4 OF MCC104 OF PATH-RQST. IF WS-REG-IND5 = "Y" MOVE "D" TO REG-IND5 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND5 OF MCC104 OF PATH-RQST. IF WS-REG-IND6 = "Y" MOVE "E" TO REG-IND6 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND6 OF MCC104 OF PATH-RQST. #DELETE 01200S22/01200S2I 575-SEND-RLF-MSG #ENDSCN = SW0D156 !#CMP2.28 03/18/09 BNETLIBS6156 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6156 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6156 * ******************************************************************************** #SCN = SW0D159 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6156 #NEWVERSION = 6157 #ADD 04419&0L ! 18MAR2009 engelk ! Symptom: Interface was sending account types of checking, ! savings, or credit in P-3 (processing code), subfield 2 ! (Cardholder "From Account" Type Code) in UK Domestic ! Maestro transactions. ! Problem: According to the Global Authorisation Migration Guide ! (May 2008), under Data Element Valid Value Differences ! for P-3 subfield 2, the values 10 (Savings), 20 ! (Checking) and 30 (Credit) are not applicable to UK ! Domestic Maestro cards. ! Fix: Added an additional check when setting P-3 subfield 2 ! to ensure that no account type 10, 20, or 30 is assigned ! for UK Domestic Maestro transactions. ! Procs modified: pstm^frmt^tran^to^sem^proc^cde ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #491293 #REPLACE 09588 /09590 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^credit^card^d and not uk^domestic^maestro^d then begin movd ( sem.proc^cde.byte[ 2 ], "30" ); end #REPLACE 09592 /09592 OFFSET 0 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^checking^d and not uk^domestic^maestro^d then #REPLACE 09597 /09597 OFFSET 0 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^savings^d and not uk^domestic^maestro^d then #ENDSCN = SW0D159 !#CMP2.28 03/20/09 BNETLIBS6157 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6157 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6157 * ******************************************************************************** #SCN = SW0D163 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6157 #NEWVERSION = 6158 #ADD 04419*0H ! 18MAR2009 engelk ! Symptom: Fields P-35 (track2), P-52 (PIN), and P-53 (security ! related control information) were being sent in SEM 0400 ! reversal requests to MasterCard with a zero length. ! Problem: Reversals are formatted from an ILF record containing ! a SEM response. This SEM response includes pertinent ! fields from the original SEM request which are moved ! into the SEM response from the original SEM request ! when the add is done. This is done to preserve fields ! from the original request not present in the SEM ! response, but required in a SEM reversal. More ! importantly, the bitmaps from the original request are ! moved over the top of the response bitmaps. This ! has the side effect of turning on additional bits for ! which data was not explicitly moved from the request ! to the response. Not enough code was added to turn off ! all the bits from the SEM request message that should ! not be sent in the SEM reversal request. ! Fix: Added code to turn off the following bits in SEM ! reversal requests formatted from PSTM 0420 reversals: ! P-26 -> Point-of-Service (POS) Personal ID Number (PIN) ! Capture Code ! P-35 -> Track 2 Data ! P-45 -> Track 1 Data ! P-52 -> Personal ID Number (PIN) Data ! P-53 -> Security-Related Control Information ! S-125 -> New PIN Data ! ! Note: code was already present to turn off: ! P-55 -> EMV data ! S-120 -> record data ! ! Labelled other bits for which code was already present ! turn them off. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #492005, #492409, #492657, and #492725. #REPLACE 07344 /07354 PSTM^FRMT^0420^TO^ACQ^XRVSL setl^amt^bit^d := 0; ! P-5 ! crd^iss^amt^bit^d := 0; ! P-6 ! conv^rate^setl^bit^d := 0; ! P-9 ! conv^rate^crd^iss^bit^d := 0; ! P-10 ! setl^dat^bit^d := 0; ! P-15 ! conv^dat^bit^d := 0; ! P-16 ! pin^cap^cde^bit^d := 0; ! P-26 ! track2^bit^d := 0; ! P-35 ! addl^resp^bit^d := 0; ! P-44 ! track1^bit^d := 0; ! P-45 ! setl^crncy^cde^bit^d := 0; ! P-50 ! iss^crncy^cde^bit^d := 0; ! P-51 ! pin^bit^d := 0; ! P-52 ! sec^control^info^bit^d := 0; ! P-53 ! emv^data^bit^d := 0; ! P-55 ! inf^data^bit^d := 0; ! P-62 ! #REPLACE 07355 /07358 PSTM^FRMT^0420^TO^ACQ^XRVSL acct^id1^bit^d := 0; ! S-102 ! acct^id2^bit^d := 0; ! S-103 ! file^rec^bit^d := 0; ! S-120 ! auth^inst^bit^d := 0; ! S-121 ! mbr^def^bit^d := 0; ! S-124 ! new^pin^bit^d := 0; ! S-125 ! #ENDSCN = SW0D163 !#CMP2.28 03/20/09 BNETS 60111FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60111 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60111 * ******************************************************************************** #SCN = SW0D164 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z000260E ! 20MAR2009 bensone ! Symptom: The on^behalf^apprv^rslt^cdes^g table gets erased ! during a warmboot. ! Problem: The interface is overwritting data during warmboot. ! The define store^array^d was designed for word arrays ! but is only used with string arrays resulting in an ! initialization value one byte too long. When ! on^behalf^apprv^rslt^cdes^g was changed to an indirect ! array its pointer was stepped on when storing ! ncd^dflt^hopr^content^g. ! Fix: Modified the define store^array^d for string arrays. ! Proc Modified: cmd^warmboot^store^globals. ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #493053. #ADD 02599]03 CMD^WARMBOOT^STORE^GLOBALS init( x, " ", $occurs( x ) ); #DELETE 02599]04 CMD^WARMBOOT^STORE^GLOBALS #ENDSCN = SW0D164 !#CMP2.28 03/24/09 BNETLIBS6158 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6158 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6158 * ******************************************************************************** #SCN = SW0D171 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6158 #NEWVERSION = 6159 #ADD 04419+0c ! 24MAR2009 wielerk ! Symptom: Outbound reversals for late approved responses are not ! formatted correctly. ! Problem: In Sept 2008, Mastercard indicated that DE-11 ( trace ! number ) was to remain the same for the transaction ! lifecycle. Now, in 2009 Mastercard has decided that ! acquirer generated reversals should send a unique ! value in de-11. ! Fix: Re-added code that increments de-11 when formatting an ! outbound reversal. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fix to BNETLIBS and SW60ABNT.BNETATMS. ! Run Make. ! Reference: Case #491680. #REPLACE 07419e01 PSTM^FRMT^0420^TO^ACQ^XRVSL call util^increment^trace( sem.trace^num, $len(sem.trace^num) ); #REPLACE 07690e01 PSTM^FRMT^0420^TO^XRVSL call util^increment^trace( sem.trace^num, $len(sem.trace^num) ); #REPLACE 13554h01 SEM^FRMT^XRESP^TO^SEM^XRVSL call util^increment^trace( rvsl.trace^num, $len(rvsl.trace^num) ); #ENDSCN = SW0D171 !#CMP2.28 03/26/09 BNETS 60112FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60112 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60112 * ******************************************************************************** #SCN = SW0D177 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a000260F ! 26MAR2009 wielerk ! Symptom: The interface is not marking stations up correctly ! when using Enhanced Session Management. ! Problem: The Interface is not processing Activate response ! messages correctly in regard to the connectivity ! now required by Mastercard. The logic was also not ! using the Activate Session message to re-start a ! station that was marked down logically. ! Fix: Modified the interface to use the enhanced session ! management flag to determine when to mark stations ! up. Modified the interface to send activate messages ! instead of echo-tests when using Enhanced Session ! Management. ! Modified proc: init^echotest ! sem^^input^from^station ! sem^actvt^response ! Dependency: Apply fix to BNETS. Run Make. Replace BNETLOGM. ! Reference: Case #488008. #ADD Y0322408 SUB^INIT^ECHOTEST if enhnc^session^mgmt^g and not pct.station[ sta^x ].up then begin call init^actvt( sta^x, group ); end else begin call sub^init^echotest( nmm^echo^l, group ); end; #DELETE Y0322409 SUB^INIT^ECHOTEST #ADD 05325 SEM^^INPUT^FROM^STATION if not enhnc^session^mgmt^g then begin pct.station[ sta^x ].up := true; call log^message^( 1390, ! routing^code !, @up, net.myname, evt^msg^severity^info^l, @pct.station[ sta^x ].nam ); end; ! of enhanced session mgmt off #DELETE 05326 /05328 SEM^^INPUT^FROM^STATION #REPLACE Y0537400 SEM^ACTVT^RESPONSE wlform( up, "Banknet Station \s Link Marked UP" ) #DELETE Y053740Z SEM^ACTVT^RESPONSE #ADD G0537436 SEM^ACTVT^RESPONSE if not pct.station[ sta^x ].up then begin pct.station[ sta^x ].up := true; call log^message^( 1603, ! routing^code !, @up, net.myname, evt^msg^severity^info^l, @pct.station[ sta^x ].nam ); end; ! of station down, mark up #ENDSCN = SW0D177 !#CMP2.28 03/30/09 BNETLIBS6159 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6159 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6159 * ******************************************************************************** #SCN = SW0D180 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6159 #NEWVERSION = 6160 #ADD 04419-0H ! 30MAR2009 bensone ! Symptom: Contents of DE 61 won't necessarily match the contents ! of the Point of Service Data Token. ! Problem: After moving the contents of the C4 token to DE 61, the ! Banknet Interface can modify the condition codes in ! DE 61. ! Fix: The contents of the condition codes in DE 61 will be ! included in the generic switch token. ! Procs modified: util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to BNETDDLS and BNETLIBS. Run Make. ! Replace BNETMNWD. ! Reference: Case #489863 #REPLACE 24997c01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "11"; #ADD 25140A06 UTIL^SWI^TKN^INIT ! ! DE 61—Point-of-Service (POS) Data ! if ntl^pos^data^bit^d then begin move( bnet^tkn^buf.ntl^pos^data.cond^cde, sem.ntl^pos^data.cond^cde ); end; #ADD 25404c0X UTIL^SWI^TKN^UPDT ! ! DE 61—Point-of-Service (POS) Data ! if bnet^tkn^buf.ntl^pos^data <> blanks for $len( bnet^tkn^buf.ntl^pos^data ) then begin movl( bnet^tkn.ntl^pos^data, bnet^tkn^buf.ntl^pos^data, $len( bnet^tkn.ntl^pos^data ) ); end; ! of if bnet^tkn^buf.ntl^pos^data #ENDSCN = SW0D180 !#CMP2.28 03/30/09 BNETDDLS6033 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6033 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6033 * ******************************************************************************** #SCN = SW0D181 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6033 #NEWVERSION = 6034 #ADD 00262g0O * 30MAR2009 bensone * Symptom: Contents of DE 61 won't necessarily match the contents * of the Point of Service Data Token. * Problem: After moving the contents of the C4 token to DE 61, the * Banknet Interface can modify the condition codes in * DE 61. * Fix: The contents of the condition codes in DE 61 will be * included in the generic switch token. * Modified section: bnet-swi-tkn-data * Dependency: Apply fixes to BNETDDLS and BNETLIBS. Run Make. * Replace BNETMNWD. * Reference: Case #489863 #REPLACE 02760e01 SAF-BNET * Switch token version (ver-id) will be "11". #ADD 02760e0A SAF-BNET 02 ntl-pos-data. 04 cond-cde pic 9(11). #ENDSCN = SW0D181 !#CMP2.28 03/31/09 BNETLIBS6160 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6160 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6160 * ******************************************************************************** #SCN = SW0D182 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6160 #NEWVERSION = 6161 #ADD 04419:0E ! 31MAR2009 bensone ! Symptom: File Request Messages could set DE 33 using GSI instead ! of institution id. ! Problem: It is possible for a lookup by prefix to match on a ! GSI record. ! Fix: Modified the code to skip any GSI record when searching ! the BNIIF table by prefix. ! Proc modified: util^get^bniif ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #491333 #ADD 20010 SUB^GROUP^GET bniif^tbl.prefix[ j ].lgth > 0 and bniif^tbl.fiid <> pct.swi^id for $len( bniif^tbl.fiid ) then #DELETE 20011 SUB^GROUP^GET #ENDSCN = SW0D182 !#CMP2.28 04/01/09 BNETS 60113FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60113 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60113 * ******************************************************************************** #SCN = SW0D186 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b000260J ! 01APR2009 bensone ! Symptom: Adjustment transactions added in 9.1 were not being ! handled correctly. ! Problem: Procedure pstm^frmt^0420^to^xrvsl was being called ! instead of pstm^frmt^0420^to^acq^xrvsl. The code did ! not take into account that the adjusted amount can be ! greater than the original amount. The define ! pos^return^adjust^d was used instead of pos^pmnt^adj^d. ! Procedure util^ilf^updt was being called instead of ! util^ilf^add when the original request was sent online ! for authorization, but the subsequent adjustment/ ! reversal is not sent online. ! Fix: Modified the interface to call ! pstm^frmt^0420^to^acq^xrvsl. When the adjusted amount ! is greater than the original amount, requests are ! approved "blind" and logged but not sent online; an ! advice is logged and then dropped. The define ! pos^pmnt^adj^d was added were appropriate. When the ! original request is sent online but the adjustment/ ! reversal is not sent online a new ILF record will be ! added. ! Modified procs: pstm^0200^request ! pstm^0220^force^post ! pstm^0420^reversal ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #493293. #ADD Y048080R SUB^APPRV^BLIND if pstm.tran.amt^2 > pstm.tran.amt^1 then begin call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, sem, ilf^sem^lgth, sub^format^error^l ); return; end; #DELETE Y048080S SUB^APPRV^BLIND #REPLACE Y048080U SUB^APPRV^BLIND if not pstm^frmt^0420^to^acq^xrvsl( pstm, sem ) then #ADD Y050110Y PSTM^0220^FORCE^POST if pstm.tran.amt^2 > pstm.tran.amt^1 then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, sem, ilf^sem^lgth, sub^format^error^l ); return; end; ! convert the internal adjustment to an external reversal if not pstm^frmt^0420^to^acq^xrvsl( pstm, sem ) then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, !sem!, !sem^lgth!, sub^format^error^l ); #DELETE Y050110Z/Y050110h PSTM^0220^FORCE^POST #ADD Y050110n PSTM^0220^FORCE^POST call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, sem, ilf^sem^lgth, sub^format^error^l ); #DELETE Y050110o/Y050110t PSTM^0220^FORCE^POST #ADD J0521006 PSTM^0420^REVERSAL if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); end; #DELETE Y0521000 PSTM^0420^REVERSAL #REPLACE Y0521001 PSTM^0420^REVERSAL if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) then #DELETE Y0522200/Y0522209 PSTM^0420^REVERSAL #ENDSCN = SW0D186 !#CMP2.28 04/02/09 RQBNRLFS6024 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6024 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6024 * ******************************************************************************** #SCN = SW0D190 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6024 #NEWVERSION = 6025 #ADD 00018X0G * 01APR2009 engelk * Symptom: MCC102 last activity date contained a blank in * the 3rd position in S-120 (record data) in 0302 * messages to MasterCard. MCC105 acquirer id and * transaction amounts contained imbedded blanks in * S-120 in 0302 messages to MasterCard. MCC103 * Regional Indicator/Purge Date information in S-120 * contained imbedded blanks in 0302 messages to * MasterCard. * Problem: Code added as part of the above fix to blank out * region codes was performed on screen data other * than just the MCC104 screen. Since all of the * BNRLF transaction types use redefines of the same * data area, this wiped out single bytes of data * spread througout the different message types. * Fix: Added an overlay check to ensure that MCC104 * region information was blanked out only when * MCC104 data was to be sent to MasterCard. * Modified: 575-SAVE-RECORD * Dependency: Apply fix to RQBNRLFS and run Make. * Reference: Case #494176, #494177, #494178 * 01APR2009 engelk * Symptom: MCC103 Regional Indicator/Purge Date was * incorrectly populated for ADDs and UPDATEs. * Problem: User was required to know region codes and enter * them in the right order with no intervening * spaces. * Fix: Modified the MCC103 screen to more closely match * the MCC104 screen with its regions labelled next * to Y/N indicators. * Modified: 400-MOVE-RECORD * 480-DATA-CHECK * 575-SAVE-RECORD * Dependency: Apply fixes to BNETDDLS, BNETLIBS, SCRNBRLF, and * RQBNRLFS. Run Make. Replace BNETMNWD. * Reference: Case #494177 #ADD 00689 480-DATA-CHECK IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION1-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-NOT-GOOD AND PURG-DAT1 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION1-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND PURG-DAT1 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND ( (PURG-DAT1 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT1 OF MCC103 OF PATH-RQST NOT = SPACES) ) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND1 = WC-GOOD AND PURG-DAT1 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT1 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT1-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT1-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION2-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-NOT-GOOD AND PURG-DAT2 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION2-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND PURG-DAT2 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND ((PURG-DAT2 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT2 OF MCC103 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND2 = WC-GOOD AND PURG-DAT2 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT2 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT2-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT2-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION3-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-NOT-GOOD AND PURG-DAT3 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION3-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND PURG-DAT3 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND ((PURG-DAT3 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT3 OF MCC103 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND3 = WC-GOOD AND PURG-DAT3 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT3 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT3-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT3-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION4-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-NOT-GOOD AND PURG-DAT4 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION4-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND PURG-DAT4 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND ((PURG-DAT4 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT4 OF MCC103 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND4 = WC-GOOD AND PURG-DAT4 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT4 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT4-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT4-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION5-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-NOT-GOOD AND PURG-DAT5 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION5-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND PURG-DAT5 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND ((PURG-DAT5 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT5 OF MCC103 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND5 = WC-GOOD AND PURG-DAT5 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT5 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT5-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT5-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 NOT = WC-GOOD AND WC-NOT-GOOD MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION6-4 IF MOVE-MESSAGE MOVE "MUST BE 'Y' OR 'N' " TO ERR-TXT SET NEW-CURSOR AT B-REGION6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-NOT-GOOD AND PURG-DAT6 OF MCC103 OF PATH-RQST NOT = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-REGION6-4 IF MOVE-MESSAGE MOVE "FIRST SET REGION TO 'Y' " TO ERR-TXT SET NEW-CURSOR AT B-REGION6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND PURG-DAT6 OF MCC103 OF PATH-RQST = SPACES MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-4 IF MOVE-MESSAGE MOVE "DATE IS REQUIRED " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND ((PURG-DAT6 OF MCC103 OF PATH-RQST NOT NUMERIC) AND (PURG-DAT6 OF MCC103 OF PATH-RQST NOT = SPACES)) MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-4 IF MOVE-MESSAGE MOVE "DATE MUST BE NUMERIC " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. IF WS-OVERLAY = 4 AND FILE-UPDT-CDE OF FRQST = "1" IF WS-REG-IND6 = WC-GOOD AND PURG-DAT6 OF MCC103 OF PATH-RQST NUMERIC MOVE PURG-DAT6 OF MCC103 OF PATH-RQST TO WS-DATE-CHECK IF NOT VALID-YEAR MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-4 IF MOVE-MESSAGE MOVE "INVALID YEAR " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-MONTH MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-4 IF MOVE-MESSAGE MOVE "INVALID MONTH " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF NOT VALID-DAY MOVE WC-NOT-FOUND TO ERR-CDE MOVE WC-BAD-DATA TO VALID-DATA TURN TEMP SERROR IN B-PURGE-DAT6-4 IF MOVE-MESSAGE MOVE "INVALID DAY " TO ERR-TXT SET NEW-CURSOR AT B-PURGE-DAT6-4 MOVE WC-NOT-GOOD TO FLAG-MOVE. #DELETE 00690C00/00715HFF 480-DATA-CHECK #ADD 01036S01 400-SELECT-FUNCTION IF WS-OVERLAY = 4 IF REG-IND1 OF MCC103 OF PATH-RQST = "1" MOVE "Y" TO WS-REG-IND1 ELSE MOVE "N" TO WS-REG-IND1. IF WS-OVERLAY = 4 IF REG-IND2 OF MCC103 OF PATH-RQST = "A" MOVE "Y" TO WS-REG-IND2 ELSE MOVE "N" TO WS-REG-IND2. IF WS-OVERLAY = 4 IF REG-IND3 OF MCC103 OF PATH-RQST = "B" MOVE "Y" TO WS-REG-IND3 ELSE MOVE "N" TO WS-REG-IND3. IF WS-OVERLAY = 4 IF REG-IND4 OF MCC103 OF PATH-RQST = "C" MOVE "Y" TO WS-REG-IND4 ELSE MOVE "N" TO WS-REG-IND4. IF WS-OVERLAY = 4 IF REG-IND5 OF MCC103 OF PATH-RQST = "D" MOVE "Y" TO WS-REG-IND5 ELSE MOVE "N" TO WS-REG-IND5. IF WS-OVERLAY = 4 IF REG-IND6 OF MCC103 OF PATH-RQST = "E" MOVE "Y" TO WS-REG-IND6 ELSE MOVE "N" TO WS-REG-IND6. IF WS-OVERLAY = 8 IF REG-IND1 OF MCC104 OF PATH-RQST = "1" MOVE "Y" TO WS-REG-IND1 ELSE MOVE "N" TO WS-REG-IND1. IF WS-OVERLAY = 8 IF REG-IND2 OF MCC104 OF PATH-RQST = "A" MOVE "Y" TO WS-REG-IND2 ELSE MOVE "N" TO WS-REG-IND2. IF WS-OVERLAY = 8 IF REG-IND3 OF MCC104 OF PATH-RQST = "B" MOVE "Y" TO WS-REG-IND3 ELSE MOVE "N" TO WS-REG-IND3. IF WS-OVERLAY = 8 IF REG-IND4 OF MCC104 OF PATH-RQST = "C" MOVE "Y" TO WS-REG-IND4 ELSE MOVE "N" TO WS-REG-IND4. IF WS-OVERLAY = 8 IF REG-IND5 OF MCC104 OF PATH-RQST = "D" MOVE "Y" TO WS-REG-IND5 ELSE MOVE "N" TO WS-REG-IND5. IF WS-OVERLAY = 8 IF REG-IND6 OF MCC104 OF PATH-RQST = "E" MOVE "Y" TO WS-REG-IND6 ELSE MOVE "N" TO WS-REG-IND6. #DELETE 01036S02/01036S0V 400-SELECT-FUNCTION #ADD 01200S20 575-SAVE-RECORD IF WS-OVERLAY = 8 IF WS-REG-IND1 = "Y" MOVE "1" TO REG-IND1 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND1 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 8 IF WS-REG-IND2 = "Y" MOVE "A" TO REG-IND2 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND2 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 8 IF WS-REG-IND3 = "Y" MOVE "B" TO REG-IND3 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND3 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 8 IF WS-REG-IND4 = "Y" MOVE "C" TO REG-IND4 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND4 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 8 IF WS-REG-IND5 = "Y" MOVE "D" TO REG-IND5 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND5 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 8 IF WS-REG-IND6 = "Y" MOVE "E" TO REG-IND6 OF MCC104 OF PATH-RQST ELSE MOVE SPACES TO REG-IND6 OF MCC104 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND1 = "Y" MOVE "1" TO REG-IND1 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND1 OF MCC103 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND2 = "Y" MOVE "A" TO REG-IND2 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND2 OF MCC103 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND3 = "Y" MOVE "B" TO REG-IND3 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND3 OF MCC103 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND4 = "Y" MOVE "C" TO REG-IND4 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND4 OF MCC103 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND5 = "Y" MOVE "D" TO REG-IND5 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND5 OF MCC103 OF PATH-RQST. IF WS-OVERLAY = 4 IF WS-REG-IND6 = "Y" MOVE "E" TO REG-IND6 OF MCC103 OF PATH-RQST ELSE MOVE SPACES TO REG-IND6 OF MCC103 OF PATH-RQST. #DELETE 01200S21/01200X0S 575-SAVE-RECORD #ENDSCN = SW0D190 !#CMP2.28 04/02/09 BNETDDLS6034 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6034 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6034 * ******************************************************************************** #SCN = SW0D191 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6034 #NEWVERSION = 6035 #ADD 00262h0D * 01APR2009 engelk * Symptom: Not all region purge date information entered in the * BNRLF MCC103 ACCOUNTS MANAGEMENT FILE screen was sent in * the SEM 0302 file update request to MasterCard. * Problem: Existing code assumed that region purge date information * would only be sent if purge date information for the * previous region was sent. Although purge date * information is required to be sent in a specific region * order, if available, no blank region/purge date * information should be sent to MasterCard. * Fix: Created an array redefine for the region purge date * information so that the interface could loop through * this data placing it in the correct order in the SEM * 0302 file update message to MasterCard without sending * blank region purge date information. * Added redefines to the FRQST (file request) S-120 * (Record Data) file-rec MCC103 defintion and to the * PATH^RQST (pathway request) file-rec MCC103 area for * region purge date information. * Dependency: Apply fixes to BNETDDLS, BNETLIBS, SCRNBRLF, and * RQBNRLFS. Run Make. Replace BNETMNWD. * Reference: Case #494177 #ADD 00680P01 FRQST 04 mcc103a redefines txt. 06 card-num pic x(19). 06 cust-id pic x(6). 06 prod-typ pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 filler2 pic x(25). 06 reg-ind-purg-dat occurs 6 times. 08 reg-ind pic x. 08 purg-dat pic x(6). 06 filler3 pic x(901). #ADD 02476Y01 ICF-BNET 04 mcc103a redefines file-rec. 06 card-num pic x(19). 06 cust-id pic x(6). 06 prod-typ pic x(3). 06 resp-cde pic x(2). 06 entry-rsn pic x(1). 06 reg-ind-purg-dat occurs 6 times. 08 reg-ind pic x. 08 purg-dat pic x(6). 06 sv-suffix-103 pic x. 06 fill3 pic x(30). #ENDSCN = SW0D191 !#CMP2.28 04/02/09 BNETLIBS6161 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6161 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6161 * ******************************************************************************** #SCN = SW0D192 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6161 #NEWVERSION = 6162 #ADD 04419;0B ! 01APR2009 engelk ! Symptom: Not all region/purge date information entered in the ! BNRLF MCC103 ACCOUNTS MANAGEMENT FILE screen was sent ! in the 0302 file update request to MasterCard. ! Problem: Existing code assumed that purge date information for a ! given region would only be sent if the purge date ! information for the previous region was sent. Although ! purge date information is required to be sent in a ! specific region order if available, no blank purge date ! information should be sent to MasterCard. ! Fix: Created an array redefine for the region/purge date ! information so that the interface could loop through ! this data placing it in the correct order in the SEM ! 0302 file update message to MasterCard without sending ! blank region/purge date information. ! Procs modified: path^frmt^file^rqst ! Dependency: Apply fixes to SCRNBRLF, BNETDDLS, BNETLIBS, and ! RQBNRLFS. Run Make. Replace BNETMNWD. ! Reference: Case #494177 #ADD 04778 PATH^FRMT^FILE^RQST lgth := $offset( sem.file^rec.mcc103.reg^ind^purg^dat1 ) - $offset( sem.file^rec.mcc103 ); regn := 0; for i := 0 to $occurs( sem.file^rec.mcc103a.reg^ind^purg^dat ) - 1 do begin if path.frqst.mcc103a.reg^ind^purg^dat[ i ] <> [ $len( path.frqst.mcc103a.reg^ind^purg^dat[ i ] ) * [ " " ] ] then begin move( sem.file^rec.mcc103a. reg^ind^purg^dat[ regn ], path.frqst.mcc103a.reg^ind^purg^dat[ i ] ); lgth := lgth + $len( sem.file^rec.mcc103a. reg^ind^purg^dat[ i ] ); regn := regn + 1; end; ! region data present end; ! for loop #DELETE 04779 /04834 PATH^FRMT^FILE^RQST #ENDSCN = SW0D192 !#CMP2.28 04/06/09 BNETS 60114FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60114 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60114 * ******************************************************************************** #SCN = SW0D200 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c000260R ! 06APR2009 frederr ! Symptom: Some reversals are not being sent from the SAF. ! Problem: The SAF rec-sys is being set with an uninitialized field ! on reversals added to the SAF when an outbound request ! message times out. This can cause issues when the ! interface attempts to send the reversal. ! Fix: Modified the interface to set the SAF rec-sys field to ! credit on all ATM reversals and POS reversals that fit ! credit criteria when an outbound request times out. The ! SAF rec-sys field will be set to debit for all other ! reversals formatted when an outbound request times out. ! Modified proc: tim^out^00^outbound. ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #492612. #REPLACE 08008}00 TIM^OUT^00^OUTBOUND int .pstm( pstm^def ) := @susp.intrn^msg; #ADD Y0802309 TIM^OUT^00^OUTBOUND if pstm.prod^id = "01" or ( pstm.prod^id = "02" and ( pct.options.auth^only or pstm.tran.tran^cde = "11" or ( pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) ) ) then begin ! ! All ATM transacions set the service type to '0' ! (credit^l). POS transactions can set the service ! type to '0' or '1' (debit^l). ! call util^saf^add( csem, extlgth, susp.rec^typ, credit^l ); end else begin call util^saf^add( csem, extlgth, susp.rec^typ, debit^l ); end; #DELETE Y080230A/Y080230D TIM^OUT^00^OUTBOUND #ENDSCN = SW0D200 !#CMP2.28 04/08/09 BNETLIBS6162 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6162 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6162 * ******************************************************************************** #SCN = SW0D211 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6162 #NEWVERSION = 6163 #ADD 04419<0K ! 06APR2009 engelk ! Symptom: The final two characters of DE-38 (auth id response) are ! overwritten with ASCII zeroes for UK Domestic Maestro ! transactions. MasterCard requests 6 digit approval ! codes. ! Problem: MasterCard has historically limited UK Domestic Maestro ! to a 4-digit approval code. However, issuers must be ! prepared to send and acquirers receive the full ! six-character Authorization ID Response value in DE-38 ! of Authorization Request Response messages. ! Fix: Modified the code to use the approval code length ! specified on the ICF(E) to determine the length of the ! approval code to move from the PSTM into DE-38. This ! is the length sent to RTAU for it to use when setting ! the approval code. ! Procs modified: pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! Note: UKDM issuers who want a 4-digit approval code ! must set their ICF(E) approval code length to 4. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #493558 #ADD 06578 PSTM^FRMT^0210^TO^XRESP init( sem.auth^id^resp, "0", $len( sem.auth^id^resp ) ); if not ascii^integer^( pstm.tran.apprv^cde^lgth, lgth ) then begin if pct.pos.appr^cde^lgth > 0 then begin lgth := pct.pos.appr^cde^lgth; end else begin lgth := $min( $len( pstm.tran.apprv^cde ), $len( sem.auth^id^resp ) ); end; end; ! get approval code length movl( sem.auth^id^resp, pstm.tran.apprv^cde, lgth ); #DELETE 06579 /06581 PSTM^FRMT^0210^TO^XRESP #ADD 06601r02 PSTM^FRMT^0210^TO^XRESP ! ! DE-38 always sent for UKDM, even if it is sent as zeroes ! auth^id^resp^bit^d := 1; init( sem.auth^id^resp, "0", $len( sem.auth^id^resp ) ); if pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] then begin if not ascii^integer^( pstm.tran.apprv^cde^lgth, lgth ) then begin if pct.pos.appr^cde^lgth > 0 then begin lgth := pct.pos.appr^cde^lgth; end else begin lgth := $min( $len( pstm.tran.apprv^cde ), $len( sem.auth^id^resp ) ); end; end; ! get approval code length movl( sem.auth^id^resp, pstm.tran.apprv^cde, lgth ); end; ! PSTM contains valid approval code #DELETE 06601r03/06601r0H PSTM^FRMT^0210^TO^XRESP #REPLACE 07169v04 PSTM^FRMT^0220^TO^XADV int lgth := 0; #DELETE 07197 PSTM^FRMT^0220^TO^XADV #ADD 07200 PSTM^FRMT^0220^TO^XADV if uk^domestic^maestro^d then begin ! ! DE-38 always sent for UKDM, even if it is sent as zeroes ! auth^id^resp^bit^d := 1; init( sem.auth^id^resp, "0", $len( sem.auth^id^resp ) ); if pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] then begin if not ascii^integer^( pstm.tran.apprv^cde^lgth, lgth ) then begin if pct.pos.appr^cde^lgth > 0 then begin lgth := pct.pos.appr^cde^lgth; end else begin lgth := $min( $len( pstm.tran.apprv^cde ), $len( sem.auth^id^resp ) ); end; end; ! get approval code length movl( sem.auth^id^resp, pstm.tran.apprv^cde, lgth ); end; ! PSTM contains valid approval code end ! of uk^domestic^maestro^d else begin ! ! not UKDM ! if pos^approved^d( pstm ) and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] then begin init( sem.auth^id^resp, "0", $len( sem.auth^id^resp ) ); if not ascii^integer^( pstm.tran.apprv^cde^lgth, lgth ) then begin if pct.pos.appr^cde^lgth > 0 then begin lgth := pct.pos.appr^cde^lgth; end else begin lgth := $min( $len( pstm.tran.apprv^cde ), $len( sem.auth^id^resp ) ); end; end; ! get approval code length movl( sem.auth^id^resp, pstm.tran.apprv^cde, lgth ); auth^id^resp^bit^d := 1; end; ! formatting DE-38 end; ! UKDM else #DELETE 07201 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0D211 !#CMP2.28 04/09/09 BNETLIBS6163 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6163 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6163 * ******************************************************************************** #SCN = SW0D214 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6163 #NEWVERSION = 6164 #ADD 04419=0M ! 09APR2009 bensone ! Symptom: When the LOGON TYPE on ICFE Screen12 is “G”, but the ! customer performs a manual "LOGONP" DE 70 can be set ! incorrectly. DE 2 formatted incorrectly for prefixes. ! Problem: The code assumed prefixes were not allowed when LOGON ! TYPE was "G". Release 9.1 removed code to calculate ! prefix length. ! Fix: Modified the code allow prefix logons when LOGON TYPE ! set to "G". Added code to calculate the length of the ! prefix. ! Proc modified: sem^frmt^nmm^request ! Dependency: Apply fix to BNETLIBS and run Make. Replace BNETMNWD. ! Reference: Case #493997 #ADD 11219n0l SEM^FRMT^NMM^REQUEST end; while ( prefix^lgth < max^prefix^lgth^l ) and ( $numeric( prefix[ prefix^lgth ] ) ) do begin increment^d( prefix^lgth ); end; #DELETE 11219n0m/11219n0q SEM^FRMT^NMM^REQUEST #DELETE 11219n1g SEM^FRMT^NMM^REQUEST #ENDSCN = SW0D214 !#CMP2.28 04/14/09 BNETLIBS6164 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6164 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6164 * ******************************************************************************** #SCN = SW0D224 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6164 #NEWVERSION = 6165 #ADD 04419>0E ! 13APR2009 engelk ! Symptom: Acquired UK Domestic Maestro manually entered purchase ! with cash back transactions are declined by the ! interface. ! Problem: The MasterCard spec indicates that manually entered ! purchase with cash back transactions are not allowed. ! However, this is something which must be allowed for UK ! Domestic Maestro transactions. ! Fix: Added code to exclude UK Domestic Maestro transactions ! from the manually entered check. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #494835 #REPLACE 05705N00/05705N01 PSTM^FRMT^0200^TO^XRQST if not ( uk^domestic^maestro^d ) and sem.proc^cde = sem^purch^cb^d then #ENDSCN = SW0D224 !#CMP2.28 04/15/09 BNETLIBS6165 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6165 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6165 * ******************************************************************************** #SCN = SW0D225 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6165 #NEWVERSION = 6166 #ADD 04419|0E ! 15APR2009 wielerk ! Symptom: Interface abends with a Trap #2030 when attempting to ! send 0620 Admin Advice from BADMN screen. ! Problem: The interface abends when attempting to update the ILF ! as a local variable is not initialized for admin ! messages. ! Fix: Added code to initialize sem^lgth when updating an ! admin ILF record. ! Procs modified: util^ilf^updt ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #488836. #ADD 21842 UTIL^ILF^UPDT call ascii^integer^( ilf.extrn^msg^lgth, sem^lgth ); #ENDSCN = SW0D225 !#CMP2.28 04/16/09 BNETLIBS6166 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6166 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6166 * ******************************************************************************** #SCN = SW0D226 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6166 #NEWVERSION = 6167 #ADD 04419@0C ! 16APR2009 bensone ! Symptom: DE 112 (Additional Data—National Use) is being sent in ! the wrong UKDM messages. ! Problem: Customer Interface Specification called for de 112 in ! UKDM 0100 and 0400 messages. It was specified as ! conditional in 0110 and 0410. Confirmation from ! MasterCard that de 112 is mandatory in UKDM 0100 message ! but should not be included in UKDM 0110, 0120, 0400 and ! 0410 messages. ! Fix: Modified the code to not send de 112 in 0110, 0120, 0400 ! and 0410 messages by setting the bit define to zero. ! Procs modified: pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #493988 #ADD 06507 PSTM^FRMT^0210^TO^XRESP adnl^data^ntl^bit^d := 0; ! S-112 ! #DELETE 06508 PSTM^FRMT^0210^TO^XRESP #ADD 07197=01 PSTM^FRMT^0220^TO^XADV adnl^data^ntl^bit^d := 0; ! S-112 ! #DELETE 07198 PSTM^FRMT^0220^TO^XADV #ADD 07355+03 PSTM^FRMT^0420^TO^ACQ^XRVSL adnl^data^ntl^bit^d := 0; ! S-112 ! #ADD 15578 SEM^FRMT^XRQST^TO^SEM^XRESP adnl^data^ntl^bit^d := 0; ! S-112 ! #DELETE 15578N00 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 15618v0k SEM^FRMT^XRQST^TO^SEM^XRVSL adnl^data^ntl^bit^d := 0; !de 112! #ENDSCN = SW0D226 !#CMP2.28 04/21/09 BNETLIBS6167 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6167 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6167 * ******************************************************************************** #SCN = SW0D232 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6167 #NEWVERSION = 6168 #ADD 04419\0J ! 16APR2009 engelk ! Symptom: Card sequence number (DE-23) was not included for UK ! Domestic Maestro manually entered transactions. ! Problem: When UKDM processing was added, code was added to ! include pstm.tran.mbr^num in DE-23 for acquirer ! transactions. However similar code as not added for ! issuer transactions. ! Fix: Modified code to include DE-23 in pstm.tran.mbr^num if ! bit 23 is turned on in the external issuer request. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #495232 #ADD 13846 SEM^FRMT^XRQST^TO^PSTM^0200 if crd^seq^num^bit^d then begin move( pstm.tran.mbr^num, sem.crd^seq^num ); end; ! bit 23 present #DELETE 13847 /13856 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0D232 !#CMP2.28 04/22/09 BNETLIBS6168 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6168 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6168 * ******************************************************************************** #SCN = SW0D233 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6168 #NEWVERSION = 6169 #ADD 04419]0D ! 21APR2009 engelk ! Symptom: The interface sent reversal responses to the interchange ! with a response code (DE-39) of "30" (format error). ! Problem: If the interface was configured to forward unmatched ! reversals and an ILF record was not found for a SEM ! reversal received from the interchange, the interface ! called the PSTM request format proc passing the SEM ! reversal in place of the SEM request. However, the SEM ! reversal does not contain track data as expected in the ! request. Therefore, the interface flagged the message ! as missing track data, responding to the reversal ! request with a reversal response indicating that a ! format error occurred. ! Fix: Modified the track formatting routine so that it will ! not flag reversal transactions for the lack of track ! data. ! Procs modified: sem^frmt^data^to^pstm^track2 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #493883 #REPLACE 10929 /10930 SEM^FRMT^DATA^TO^PSTM^TRACK2 if sem.typ <> "04" and ( sem.pos^entry^mde = full^mag^stripe or #ENDSCN = SW0D233 !#CMP2.28 04/27/09 BNETLIBS6169 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6169 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6169 * ******************************************************************************** #SCN = SW0D236 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6169 #NEWVERSION = 6170 #ADD 04419^0K ! 24APR2009 bensone ! Symptom: Internal BASE24-pos response codes "063", "064", "067", ! "207", "208" and "209" map to external Banknet response ! code "30" (format error). ! Problem: Format error is deemed as not appropriate for these ! conditions. ! Fix: Map internal "064" to external "12" (invalid trans). ! Map internal "063", "067", "207", "208" and "209" to ! external "05" (do not honor). ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #489799 #ADD 08119 PSTM^FRMT^RESP^CDE^TO^SEM "063",! Invalid Auth Type ! "05",! Do not Honor "064",! Bad Track2 ! "12",! Invalid tran #DELETE 08120 /08121 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08125 PSTM^FRMT^RESP^CDE^TO^SEM "067",! Invalid Tran Date ! "05",! Do not Honor #DELETE 08126 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08206 PSTM^FRMT^RESP^CDE^TO^SEM "207",! Error; invalid tran date! "05",! Do not Honor "208",! Error; invalid exp date ! "05",! Do not Honor "209",! Error; invalid trancode ! "05",! Do not Honor #DELETE 08207 /08209 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0D236 !#CMP2.28 04/29/09 BNETS 60115FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60115 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60115 * ******************************************************************************** #SCN = SW0D240 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d000260F ! 29APR2009 SaderC ! Symptom: NMM commands are being declined. ! Problem: The interface does not log an EMS warning message when ! certain NMM request messages are declined. ! Fix: Modified the interface to log an EMS warning message in ! event Banknet declines a ACTVT STA, DEACTVT STA, ! LOGOFFG, LOGOFFP, LOGONG and LOGOFFP message. Also, ! added a new EMS message to inform the user that all of ! the stations are marked down when processing a ! NETWK CONN STAT command. ! Modified procs: cmd^netwk^conn^stat ! sem^actvt^response ! sem^logoff^response^group ! sem^logoff^response^prefix ! sem^logon^response^group ! sem^logon^response^prefix ! sem^logon^response^saf ! Dependency: Apply fix to BNETS. Run Make. Replace BNETLOGM. ! Reference: Case #491555 ! ! 29APR2009 SaderC ! Symptom: The interface is not marking stations up correctly ! when using Enhanced Session Management. ! Problem: The Interface is not processing session activation ! response messages correctly. The interface does not ! logon the interface for acquirer traffic when it ! receives an approved response. ! Fix: Modified the interface to logon the interface for ! acquirer traffic when an ACTVT STA command is issued. ! Also, added logic to only logoff the interface for ! acquirer traffic if all of the stations are marked down ! when a DEACTVT STA command is issued. ! Modified procs: init^logoff ! init^logon ! sem^actvt^response ! Dependency: Apply fix to BNETS. Run Make. Replace BNETLOGM. ! Reference: Case #494965 ! ! 29APR2009 SaderC ! Symptom: 1. When the station is started, the interface ! automatically generates session activation message ! since AUTO SIGNON START field is set to "Y" on the ! ICFE screen 3. The first session activation message ! sent fails. A subsequent activation message is ! successful, so the station is marked up. A short time ! later the interface generates an additional session ! activation after the XNMM timer expires. ! 2. A time-out message is logged to EMS after a ! successful session deactivation is performed. ! Problem: 1. The interface does not process failed NMMs, so the ! timer on the activation message is not deleted. ! 2. The interface doesn't delete the timer for a ! DEACTVT STA command. ! Fix: 1. Modified the interface to delete any old timers that ! have not expired when a DEACTVT STA command is ! processed. ! 2. Added a new procedure to delete the timer for a ! DEACTVT STA command after a response is received ! from Banknet. Also, modified the interface to delete ! any outstanding timer when a session deactivation ! request message is processed. ! Added proc: sem^deactvt^response ! Modified proc: cmd^deactvt^sta ! sem^nmm^response ! Dependency: Apply fix to BNETS. Run Make. Replace BNETLOGM. ! Reference: Case #495287 #ADD G012951f SUB^FRMT^SEND^DEACTVT ! ! Delete any timers that have not expired. The search will ! include NMM, XNMM, WFT and session activation timers. ! ! Delete the NMM activate timer for the station, if found. ! if @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^actvt^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the NMM message failed timer for the station, ! if found. ! if @timer := find^specific^timer( tcb^g, type^nmm^l, subtype^msg^failed^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the NMM echotest timer for the station, if found. ! if @timer := find^specific^timer( tcb^g, type^nmm^l, subtype^echotest^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the XNMM activate timer for the station, if found. ! if @timer := find^specific^timer( tcb^g, type^xnmm^l, nmm^actvt^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the XNMM message failed timer for the station, ! if found. ! if @timer := find^specific^timer( tcb^g, type^xnmm^l, subtype^msg^failed^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the XNMM echotest timer for the station, if found. ! if @timer := find^specific^timer( tcb^g, type^xnmm^l, subtype^echotest^l, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the WFT timer for the station, if found. ! if @timer := find^specific^timer( tcb^g, type^wft^l, ! subtype !, userbuf, woffset( userbuf.nmm.mci^id ) ) then begin call delete^this^timer( tcb^g, timer ); end; ! ! Delete the activate echotest timer, if found. ! if find^specific^timer( tcb^g, typ^16^actvt^intrvl^l ) then begin call timer^delete( tcb^g, typ^16^actvt^intrvl^l ); end; #ADD Y018520H CMD^NETWK^CONN^STAT wlform( sta^down, "Network Connection Status NOT Intact - all stations " ',' "marked down" ) #ADD 01852801 CMD^NETWK^CONN^STAT int sta^up := false; #ADD Y018520L CMD^NETWK^CONN^STAT sta^up := true; #DELETE Y018520M CMD^NETWK^CONN^STAT #ADD 01852814 CMD^NETWK^CONN^STAT if not sta^up then begin call log^message^( 1549, ! routing code !, @sta^down, net.myname, evt^msg^severity^info^l ); end; #ADD O0370600 SUB^INIT^LOGOFF if enhnc^session^mgmt^g and nmm^info^cde = nmm^logoff^group^l then begin if traffic <> acq^l then begin call util^set^group^logon( nmm^info^cde, service, iss^l ); end; #DELETE O0370601/O0370604 SUB^INIT^LOGOFF #ADD 03764i03 INIT^LOGON wlform( warning1, "LOGON FAILED, PROCESS NOT CONFIGURED FOR \\\\\\\\\" ) #ADD 03786 SUB^INIT^LOGON if enhnc^session^mgmt^g then begin ! ! Omit the "logon" parameter. This means that that a station ! will have to be found that is UP, rather than one that is ! in any state. This prevents a logon from being sent until ! a station has been activated. ! if not util^station^avail( sta^x, service ) then begin txt ':=' "NO STATIONS ACTIVATED"; call log^message^( 1218, ! routing code !, @error1, net.myname, evt^msg^severity^err^l, @txt ); return false; end; end else #ADD 03793 SUB^INIT^LOGON if enhnc^session^mgmt^g then begin ! ! Need to check that the traffic (ACQ/ISS/BOTH) type that has ! been requested is appropriate for this process. Downgrade ! the request from BOTH to ACQ or ISS if neccessary. Drop an ! ISS or ACQ request if it is inappropriate. ! if ( traffic = both^l and not pct.options.iss ) then begin traffic := acq^l; end; if ( traffic = both^l and not pct.options.acq ) then begin traffic := iss^l; end; if ( traffic = iss^l and not pct.options.iss ) or ( traffic = acq^l and not pct.options.acq ) then begin if ( traffic = iss^l ) then begin txt ':=' "ISSUER"; end else begin txt ':=' "ACQUIRER"; end; call log^message^( 1219, ! routing code !, @warning1, net.myname, evt^msg^severity^warn^l, @txt ); return false; end; end; #ADD b0537400 SEM^ACTVT^RESPONSE wlform( actvt^fail, "Activation Failed. Station \s Still Deactivated " ) #ADD Y053740F SEM^ACTVT^RESPONSE ! ! To avoid adding a new session activation timer, check for an ! existing timer. If found, delete it. ! if @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^actvt^l, userbuf, woffset( userbuf.nmm ) ) then begin call delete^this^timer( tcb^g, timer ); end else begin return; end; #DELETE Y053740S/Y053740a SEM^ACTVT^RESPONSE #ADD G0537433 SEM^ACTVT^RESPONSE call log^message^( 1541, ! routing code !, @actvt^fail, net.myname, evt^msg^severity^warn^l, @pct.station[ sta^x ].nam ); #ADD b053740E SEM^ACTVT^RESPONSE if pct.options.acq then begin call util^set^group^logon( nmm^logon^group^l, both^l, acq^l ); set( pct.station[ sta^x ].t^o^ctr, 0 ); end; #DELETE W0537404/W053740B SEM^ACTVT^RESPONSE #ADD 05959 SEM^CHARGEBACK^RESPONSE ?section sem^deactvt^response ?page "sem^deactvt^response" !##################################################################### !# # !# sem^deactvt^response # !# # !# This procedure processes a Deactivate station response message # !# from Banknet. # !# # !# INPUT PARAMETERS: # !# sem - pointer to the external request message # !# msg - message word pointer # !# sta^x - station index request was received on # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc sem^deactvt^response( sem, msg, sta^x ); int .sem( nmm^def ); int .msg; int sta^x; begin wlform( deactvt^fail, "Deactivation Failed. Station \s Still Activated " ) wlform( logoff^acq, "All Stations Marked Down - Acquirer Traffic Logged Off" ) wlform( sta^down, "Banknet Station \s Link Marked DOWN " ) struct .userbuf( timer^userbuf^def ); int found := false; int i := 0; int .timer( timer^def ); init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^x ); if max^group^lgth^g = 5 then begin movl( userbuf.nmm.mci^id, sem.pan.num, 5 ); end else begin movd( userbuf.nmm.mci^id.byte[0], "0" ); movl( userbuf.nmm.mci^id.byte[1], sem.pan.num, 5 ); end; if @timer := find^specific^timer( tcb^g, type^nmm^l, nmm^deactvt^l, userbuf, woffset( userbuf.nmm ) ) then begin call delete^this^timer( tcb^g, timer ); end; if not sem^approved^d( sem ) then begin call log^message^( 1542, ! routing code !, @deactvt^fail, net.myname, evt^msg^severity^warn^l, @pct.station[ sta^x ].nam ); return; end; set( pct.station[ sta^x ].up, false ); call log^message^( 1543, ! routing code !, @sta^down, net.myname, evt^msg^severity^info^l, @pct.station[ sta^x ].nam ); if pct.options.acq then begin ! ! Look for a station that is UP. If so, set flag found to ! true. ! i := 0; found := false; while ( ( not found ) and ( i < pct.status.num^of^sta ) ) do begin if ( pct.station[ i ].up ) then ! ! Station is UP. ! begin set( found, true ); end else begin i := i + 1 end; end; ! ! There are no stations UP, so logoff acquirer traffic. ! if not found then begin call util^set^group^logon( nmm^logoff^group^l, both^l, acq^l ); set( pct.station[ sta^x ].t^o^ctr, 0 ); call log^message^( 1550, ! routing code !, @logoff^acq, net.myname, evt^msg^severity^info^l ); end; ! No stations are up. end; ! of if pct.options.acq then end; ! of sem^deactvt^response #ADD 06125 SEM^LOGOFF^RESPONSE^GROUP wlform( logoffg^fail, "GROUP \\\\\\ Logoff has Failed " ) #DELETE G0612902/G0612905 SEM^LOGOFF^RESPONSE^GROUP #ADD 06130+05 SEM^LOGOFF^RESPONSE^GROUP if sem^approved^d( sem ) then begin pct.status.logon := false; end else begin call log^message^( 1544, ! routing code !, @logoffg^fail, net.myname, evt^msg^severity^warn^l, @userbuf.nmm.mci^id ); end; #ADD 06166 SEM^LOGOFF^RESPONSE^PREFIX wlform( logoffp^fail, "PREFIX \\\\\\\\\\\ Logoff has Failed " ) #ADD 06171+05 SEM^LOGOFF^RESPONSE^PREFIX if not sem^approved^d( sem ) then begin call log^message^( 1545, ! routing code !, @logoffp^fail, net.myname, evt^msg^severity^warn^l, @userbuf.nmm.prefix ); end; #ADD 06207*00 SEM^LOGON^RESPONSE^GROUP wlform( logong^fail, "GROUP \\\\\\ Logon has Failed " ) #DELETE G0621801/G0621804 SEM^LOGON^RESPONSE^GROUP #ADD 06219+05 SEM^LOGON^RESPONSE^GROUP if sem^approved^d( sem ) then begin pct.status.logon := true; end else begin call log^message^( 1546, ! routing code !, @logong^fail, net.myname, evt^msg^severity^warn^l, @userbuf.nmm.mci^id ); end; #ADD 06302R00 SEM^LOGON^RESPONSE^PREFIX wlform( logonp^fail, "PREFIX \\\\\\\\\\\ Logon has Failed " ) #ADD 06345 SEM^LOGON^RESPONSE^PREFIX begin call util^set^logon^status( nmm^logon^prefix^l, group, prefix, service, traffic ); end else begin call log^message^( 1547, ! routing code !, @logonp^fail, net.myname, evt^msg^severity^warn^l, @userbuf.nmm.prefix ); end; #DELETE 06346 /06347 SEM^LOGON^RESPONSE^PREFIX #ADD 06397 SEM^LOGON^RESPONSE^SAF wlform( logons^fail, "SAF \\\\\\ Logon has Failed " ) #ADD 06402+03 SEM^LOGON^RESPONSE^SAF if not sem^approved^d( sem ) then begin call log^message^( 1548, ! routing code !, @logons^fail, net.myname, evt^msg^severity^warn^l, @userbuf.nmm.mci^id ); end; #DELETE D0650401/D0650402 SEM^NMM^RESPONSE #ADD G0655702 SEM^NMM^RESPONSE !082! call sem^deactvt^response ( sem, msg, sta^x ); #DELETE D0655702/D065570A SEM^NMM^RESPONSE #ENDSCN = SW0D240 !#CMP2.28 05/04/09 BNETS 60116FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60116 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60116 * ******************************************************************************** #SCN = SW0D247 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e0002615 ! 04MAY2009 wielerk ! Symptom: The interface is marking stations down after a single ! outbound timeout regardless the ICF configuration. ! Problem: A recent change meant to initialize the maximum timeout ! per station, only worked when the ICFE was used to ! initialize the process. ! Fix: Modified the interface to use the recently added global ! variable when the ICF is used to initialize the process. ! Modified proc: init^pct ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #494439. #ADD 04134 INIT^PCT set( icfe^max^temp^timeout^g, icf.base.processing^options.max^timeouts ); #ENDSCN = SW0D247 !#CMP2.28 05/05/09 BNETS 60117FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60117 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60117 * ******************************************************************************** #SCN = SW0D249 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f000260C ! 05MAY2009 bensone ! Symptom: Some terminals are approving transactions that the ! interface denied when the link to MasterCard is logged ! off. ! Problem: The interface is setting the interchange response value ! in the PSTM with the response code right justified. ! The response code should be left justified. ! Fix: Modified the interface to left justify the response ! code when formatting the interchange response value ! and the link is logged off. ! Modified proc: pstm^0200^route ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #496847. #ADD 04864\00 PSTM^0200^ROUTE call integer^ascii( pstm.tran.ichg^resp, 2, resp^system^unavail^sem^l ); #DELETE 04864\01/04864\02 PSTM^0200^ROUTE #ENDSCN = SW0D249 !#CMP2.28 05/06/09 BNETG 6057 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6057 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6057 * ******************************************************************************** #SCN = SW0D256 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6057 #NEWVERSION = 6058 #ADD 00026*0D ! 06MAY2009 engelk ! Symptom: Non-Maestro fuel transactions were converted to preauth ! requests. ! Problem: MasterCard only allows preauth/preauth completion ! message sets for Maestro fuel transactions. However, ! MasterCard does not edit transactions to ensure that ! only Maestro fuel transactions have DE-61, subfield 7, ! POS Transaction Status, set to "4" (preauthorized ! request). ! Fix: Added new LCONF PARAMs, MAESTRO-NETWORK-IDxx (where ! xx are numbers), to allow issuers to define up to 50 ! Mastercard assigned Maestro network ids. Added code ! to read and sort the ids in those LCONF PARAMs, as well ! as, code to search those ids for the network id in the ! external message to determine if the transaction is for ! Maestro. ! Altered a previous fix designed to identify prepaid ! transactions to use the same approach for MasterCard ! prepaid network ids. Added new LCONF PARAMS, ! PREPAID-NETWORK-IDxx (where xx are numbers), to allow ! customers to identify up to 50 MasterCard assigned ! Prepaid network ids. Added code to read and sort the ! ids in those LCONF PARAMs, as well as, code to search ! those ids for the network id in the external message to ! determine whether the transaction was for a prepaid ! card. ! IMPORTANT NOTE: Unless the Maestro and Prepaid LCONF ! PARAMs are added, the interface will ! NOT correctly identify these ! transactions. ! Dependency: Apply fixes to BNETG, BNETS, and BNETLIBS. Run Make. ! Replace BNETMNWD and BNETLOGM. ! Reference: Case #495806 #DELETE 00233*00/00233*0h #ADD 00448v0E int num^maestro^tbl^g := 0; int num^prepaid^tbl^g := 0; #ADD 00454v01 struct .maestro^tbl^g; begin struct ntwk^id[ 0:49 ]; begin struct cde; begin string byte [0:2]; end; end; end; struct .prepaid^tbl^g; begin struct ntwk^id[ 0:49 ]; begin struct cde; begin string byte [0:2]; end; end; end; #ADD 01366v0L int num^maestro^tbl^g; int num^prepaid^tbl^g; #ADD 01366d06 struct maestro^tbl^g; begin struct ntwk^id[ 0:49 ]; begin struct cde; begin string byte [0:2]; end; end; end; struct prepaid^tbl^g; begin struct ntwk^id[ 0:49 ]; begin struct cde; begin string byte [0:2]; end; end; end; #DELETE 01366d07/01366E1P #ENDSCN = SW0D256 !#CMP2.28 05/06/09 BNETS 60118FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60118 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60118 * ******************************************************************************** #SCN = SW0D257 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g000260E ! 06MAY2009 engelk ! Symptom: Non-Maestro fuel transactions were converted to preauth ! requests. ! Problem: MasterCard only allows preauth/preauth completion ! message sets for Maestro fuel transactions. However, ! MasterCard does not edit transactions to ensure that ! only Maestro fuel transactions have DE-61, subfield 7, ! POS Transaction Status, set to "4" (preauthorized ! request). ! Fix: Added new LCONF PARAMs, MAESTRO-NETWORK-IDxx (where ! xx are numbers), to allow issuers to define up to 50 ! Mastercard assigned Maestro network ids. Added code ! to read and sort the ids in those LCONF PARAMs, as well ! as, code to search those ids for the network id in the ! external message to determine if the transaction is for ! Maestro. ! Altered a previous fix designed to identify prepaid ! transactions to use the same approach for MasterCard ! prepaid network ids. Added new LCONF PARAMS, ! PREPAID-NETWORK-IDxx (where xx are numbers), to allow ! customers to identify up to 50 MasterCard assigned ! Prepaid network ids. Added code to read and sort the ! ids in those LCONF PARAMs, as well as, code to search ! those ids for the network id in the external message to ! determine whether the transaction was for a prepaid ! card. ! Procs modified: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! IMPORTANT NOTE: Unless the Maestro and Prepaid LCONF ! PARAMs are added, the interface will ! NOT correctly identify these ! transactions. ! Dependency: Apply fixes to BNETG, BNETS, and BNETLIBS. Run Make. ! Replace BNETMNWD and BNETLOGM. ! Reference: Case #495806 #ADD G025990M CMD^WARMBOOT^STORE^GLOBALS store^d( num^maestro^tbl^g ); #REPLACE 02599&02/02599%04 CMD^WARMBOOT^STORE^GLOBALS for i := 0 to $occurs( temp.maestro^tbl^g.ntwk^id ) do begin move( temp.maestro^tbl^g.ntwk^id[ i ].cde, maestro^tbl^g.ntwk^id[ i ].cde ); maestro^tbl^g.ntwk^id[ i ].cde ':=' [ $len( maestro^tbl^g.ntwk^id[ i ].cde ) * [ " " ] ]; end; store^d( num^prepaid^tbl^g ); for i := 0 to $occurs( temp.prepaid^tbl^g.ntwk^id ) do begin move( temp.prepaid^tbl^g.ntwk^id[ i ].cde, prepaid^tbl^g.ntwk^id[ i ].cde ); prepaid^tbl^g.ntwk^id[ i ].cde ':=' [ $len( prepaid^tbl^g.ntwk^id[ i ].cde ) * [ " " ] ]; end; #ADD G0259912 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( num^maestro^tbl^g ); for i := 0 to $occurs( maestro^tbl^g.ntwk^id ) do begin move( maestro^tbl^g.ntwk^id[i].cde, temp.maestro^tbl^g.ntwk^id[i].cde ); temp.maestro^tbl^g.ntwk^id[i].cde ':=' [ $len( temp.maestro^tbl^g.ntwk^id[i].cde ) * [ " " ] ]; end; retrieve^d( num^prepaid^tbl^g ); for i := 0 to $occurs( prepaid^tbl^g.ntwk^id ) do begin move( prepaid^tbl^g.ntwk^id[i].cde, temp.prepaid^tbl^g.ntwk^id[i].cde ); temp.prepaid^tbl^g.ntwk^id[i].cde ':=' [ $len( temp.prepaid^tbl^g.ntwk^id[i].cde ) * [ " " ] ]; end; #ADD 03941]04 INIT^PARAMPROC wlform( no^ids, "No MAESTRO-NETWORK-ID LCONF params found" ) wlform( too^mny, "Too many MAESTRO-NETWORK-ID LCONF params found" ) wlform( no^pids, "No PREPAID-NETWORK-ID LCONF params found" ) wlform( too^mnyp, "Too many PREPAID-NETWORK-ID LCONF params found" ) #REPLACE 03973]00 INIT^PARAMPROC int j; #REPLACE 03974 INIT^PARAMPROC string id^swap^area[0:2]; #ADD 04068 INIT^PARAMPROC ! MAESTRO-NETWORK-IDs num^maestro^tbl^g := 0; for j := 0 to ( $occurs( maestro^tbl^g.ntwk^id ) - 1 ) do begin maestro^tbl^g.ntwk^id[ j ].cde ':=' [ $len( maestro^tbl^g.ntwk^id[ j ].cde ) * [ " " ] ]; end; movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); movd( lconf^key.item^typ, "P" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "MAESTRO-NETWORK-ID" ); ! ! generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then return false; end; j := -1; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin j := j + 1; if j < $occurs( maestro^tbl^g.ntwk^id ) then begin movl( maestro^tbl^g.ntwk^id[ j ].cde, lconf.param^msg.ptxt, $min( lconf.param^msg.plgth, $len( maestro^tbl^g.ntwk^id[ j ].cde ) ) ); end; ! if j < $occurs( maestro^tbl^g.ntwk^id ) end; if j >= $occurs( maestro^tbl^g.ntwk^id ) then begin call log^message^( 4040, !routing code!, @too^mny, net.myname, evt^msg^severity^err^l ); num^maestro^tbl^g := $occurs( maestro^tbl^g.ntwk^id ); end else begin num^maestro^tbl^g := j + 1; end; if num^maestro^tbl^g = 0 then begin call log^message^( 4045, !routing code!, @no^ids, net.myname, evt^msg^severity^err^l ); end else begin sort^compare^lgth^g := $len( maestro^tbl^g.ntwk^id[0].cde ); call quicksort( maestro^tbl^g, num^maestro^tbl^g, sort^compare^lgth^g, id^swap^area, util^compare^var ); end; ! PREPAID-NETWORK-IDs num^prepaid^tbl^g := 0; for j := 0 to ( $occurs( prepaid^tbl^g.ntwk^id ) - 1 ) do begin prepaid^tbl^g.ntwk^id[ j ].cde ':=' [ $len( prepaid^tbl^g.ntwk^id[ j ].cde ) * [ " " ] ]; end; movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); movd( lconf^key.item^typ, "P" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "PREPAID-NETWORK-ID" ); ! ! generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then return false; end; j := -1; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin j := j + 1; if j < $occurs( prepaid^tbl^g.ntwk^id ) then begin movl( prepaid^tbl^g.ntwk^id[ j ].cde, lconf.param^msg.ptxt, $min( lconf.param^msg.plgth, $len( prepaid^tbl^g.ntwk^id[ j ].cde ) ) ); end; ! if j < $occurs( prepaid^tbl^g.ntwk^id ) end; if j >= $occurs( prepaid^tbl^g.ntwk^id ) then begin call log^message^( 4050, !routing code!, @too^mnyp, net.myname, evt^msg^severity^err^l ); num^prepaid^tbl^g := $occurs( maestro^tbl^g.ntwk^id ); end else begin num^prepaid^tbl^g := j + 1; end; if num^prepaid^tbl^g = 0 then begin call log^message^( 4055, !routing code!, @no^pids, net.myname, evt^msg^severity^err^l ); end else begin sort^compare^lgth^g := $len( prepaid^tbl^g.ntwk^id[0].cde ); call quicksort( prepaid^tbl^g, num^prepaid^tbl^g, sort^compare^lgth^g, id^swap^area, util^compare^var ); end; #DELETE 04069 INIT^PARAMPROC #ENDSCN = SW0D257 !#CMP2.28 05/07/09 BNETLIBS6170 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6170 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6170 * ******************************************************************************** #SCN = SW0D258 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6170 #NEWVERSION = 6171 #ADD 04419`0D ! 06MAY2009 engelk ! Symptom: Non-Maestro fuel transactions were converted to preauth ! requests. ! Problem: MasterCard only allows preauth/preauth completion ! message sets for Maestro fuel transactions. However, ! MasterCard does not edit transactions to ensure that ! only Maestro fuel transactions have DE-61, subfield 7, ! POS Transaction Status, set to "4" (preauthorized ! request). ! Fix: Added new LCONF PARAMs, MAESTRO-NETWORK-IDxx (where ! xx are numbers), to allow issuers to define up to 50 ! Mastercard assigned Maestro network ids. Added code ! to read and sort the ids in those LCONF PARAMs, as well ! as, code to search those ids for the network id in the ! external message to determine if the transaction is for ! Maestro. ! Altered a previous fix designed to identify prepaid ! transactions to use the same approach for MasterCard ! prepaid network ids. Added new LCONF PARAMS, ! PREPAID-NETWORK-IDxx (where xx are numbers), to allow ! customers to identify up to 50 MasterCard assigned ! Prepaid network ids. Added code to read and sort the ! ids in those LCONF PARAMs, as well as, code to search ! those ids for the network id in the external message to ! determine whether the transaction was for a prepaid ! card. ! Procs added: util^maestro ! util^prepaid ! Procs modified: sem^frmt^amt^to^pstm^amt ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrvsl^to^pstm^0420 ! IMPORTANT NOTE: Unless the Maestro and Prepaid LCONF ! PARAMs are added, the interface will ! NOT correctly identify these ! transactions. ! Dependency: Apply fixes to BNETG, BNETS, and BNETLIBS. Run Make. ! Replace BNETMNWD and BNETLOGM. ! Reference: Case #495806 #REPLACE 10599#01 SUB^CONVERT^AMT if util^prepaid( sem.banknet^data.ntwk^id^cde ) and #ADD 11594r02 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN util^maestro( sem.banknet^data.ntwk^id^cde ) and #ADD 12154#00 SEM^FRMT^XRESP^TO^PSTM^0210 if ( pos^approved^d( pstm ) and pos^inquiry^d( pstm ) ) or ( sem.typ = sem^auth^response^d and sem.resp^cde = "10" ) or util^prepaid( sem.banknet^data.ntwk^id^cde ) then #DELETE 12154#01/12154#03 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 15732r02 SEM^FRMT^XRVSL^TO^PSTM^0420 util^maestro( sem.banknet^data.ntwk^id^cde ) and #ADD 22666 UTIL^KEYF^UPDT ?section util^maestro ?page "util^maestro" !##################################################################### !# # !# util^maestro # !# # !# This procedure searchs the global table maestro^tbl^g for a # !# matching debit network id. The table is built from entries # !# in the LCONF parameter MAESTRO-NETWORK-IDS. # !# # !# INPUT PARAMETERS: # !# ntwk^id - pointer to the network id to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# TRUE - if the network id is found in the table # !# # !##################################################################### int proc util^maestro( ntwk^id ); string .ntwk^id; begin int index; if ntwk^id = [ $len( maestro^tbl^g.ntwk^id[0].cde ) * [ " " ] ] or num^maestro^tbl^g <= 0 then begin return false; end; index := ut^binary^search( maestro^tbl^g, $len( maestro^tbl^g.ntwk^id[0].cde ), num^maestro^tbl^g, 0, $len( maestro^tbl^g.ntwk^id[0].cde ), ntwk^id ); ! ! ut^binary^search returns -1 for not found which is ! incremented by 1 in order to return false. ! return increment^d( index ); end; ! of util^maestro ?section util^prepaid ?page "util^prepaid" !##################################################################### !# # !# util^prepaid # !# # !# This procedure searchs the global table prepaid^tbl^g for a # !# matching debit network id. The table is built from entries # !# in the LCONF parameter PREPAID-NETWORK-IDS. # !# # !# INPUT PARAMETERS: # !# ntwk^id - pointer to the network id to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# TRUE - if the network id is found in the table # !# # !##################################################################### int proc util^prepaid( ntwk^id ); string .ntwk^id; begin int index; if ntwk^id = [ $len( prepaid^tbl^g.ntwk^id[0].cde ) * [ " " ] ] or num^prepaid^tbl^g <= 0 then begin return false; end; index := ut^binary^search( prepaid^tbl^g, $len( prepaid^tbl^g.ntwk^id[0].cde ), num^prepaid^tbl^g, 0, $len( prepaid^tbl^g.ntwk^id[0].cde ), ntwk^id ); ! ! ut^binary^search returns -1 for not found which is ! incremented by 1 in order to return false. ! return increment^d( index ); end; ! of util^prepaid #ENDSCN = SW0D258 !#CMP2.28 05/07/09 BNETLIBS6171 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6171 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6171 * ******************************************************************************** #SCN = SW0D271 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6171 #NEWVERSION = 6172 #ADD 04419~0e ! 08MAY2009 saderc ! Symptom: Base24 is denying 0220 Advice messages. ! Problem: Interface does not map DE 54 to the internal PSTM ! message when processing 0120 Advice messages. As a ! result, for cash back transactions, amt^2 of the PSTM is ! passed as zeroes to Base24. Base24 is denying these ! messages because of an invalid amount. ! Fix: Modified the interface to format the internal PSTM ! message using DE 54, if present, when processing a ! 0120 Advice message. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #497190 #ADD 10147 SUB^CONVERT^AMT if ( sem.typ = sem^auth^request^d or sem.typ = sem^auth^advice^d ) and #DELETE 10148 SUB^CONVERT^AMT #ENDSCN = SW0D271 !#CMP2.28 05/12/09 BNETLIBS6172 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6172 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6172 * ******************************************************************************** #SCN = SW0D276 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6172 #NEWVERSION = 6173 #ADD 04419(0E ! 12MAY2009 wielerk ! Symptom: Base24 is not setting de-39 ( resp code ) in 0400 ! messages for certain reversal reason codes. ! Problem: Interface does not map reason codes that reflect ! hardware or cryptographic errors. ! Fix: Modified the interface to format de-39 for PSTM ! reversal reason codes that were excluded. ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #497092. #REPLACE 07447 /07447 OFFSET 0 PSTM^FRMT^0420^TO^ACQ^XRVSL end else if pstm.rvsl^cde <> [ $len( pstm.rvsl^cde ) * [ " " ] ] and pstm.rvsl^cde <> [ $len( pstm.rvsl^cde ) * [ "0" ] ] then begin ! ! Error ! movd( sem.resp^cde, "06" ); end; #ENDSCN = SW0D276 !#CMP2.28 05/14/09 BNETLIBS6173 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6173 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6173 * ******************************************************************************** #SCN = SW0D278 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6173 #NEWVERSION = 6174 #ADD 04419)0B ! 14MAY2009 saderc ! Symptom: The interface is always returning a value in CVC ! subfield 87 (CVC Result Code) of DE 48 (Additional Data, ! Private) in a 0110 response. ! Problem: The interface maps a CVC Result Code in the response ! message without first checking whether CVC2 was included ! in the original request. ! Fix: Modified the interface to determine if CVC2 was included ! in the original request message before formatting CVC ! subfield 87 (CVC Result Code) of DE 48 (Additional Data, ! Private) in the response. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #497906 #ADD 06698 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.cvc2^sub^fld^92 <> " " then #ADD 06814 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.cvc2^sub^fld^92 <> " " and sem.addl^data.info.cvc^sub^fld^87.tag^data <> "Y" then #DELETE 06815 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0D278 !#CMP2.28 05/20/09 BNETLIBS6174 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6174 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6174 * ******************************************************************************** #SCN = SW0D284 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6174 #NEWVERSION = 6175 #ADD 04419{0F ! 15MAY2009 engelk ! Symptom: The interface is dumping with a trap #3282 for prepaid ! transactions. ! Problem: The interface did not check whether the POS Balances ! (CB) token was present before attempting to add it to ! the PSTM. ! Fix: Modified the code to add the CB token only if it was not ! already present and update it if it is present. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS and run Make. Replace BNETLOGM. ! Reference: Case #496295 #REPLACE 10017#00 SEM^FRMT^AMT^TO^PSTM^AMT int .pos^bal^get^tkn( pos^bal^tkn^def ); #ADD 10599#2U SUB^CONVERT^AMT tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @pos^bal^get^tkn, tkn^lgth, ! ASCII format flag!, pos^userdata ); if tkn^result = tkn^does^not^exist^l then begin #REPLACE 10599#2V/10599#35 SUB^CONVERT^AMT tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^bal^tkn, $len( pos^bal^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3280, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l ! else begin call log^message^( 3282, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); #REPLACE 10599#37/10599#38 SUB^CONVERT^AMT call abend^( 3282 ); end; ! error on tkn add other than no room! #REPLACE 10599#3A/10599#3A OFFSET 0 SUB^CONVERT^AMT end;! of if tkn^result on token add ! end ! CB token not present else begin ! ! CB token already present or error ! ! if tkn^result = over^max^limit^l then begin call log^message^( 3285, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end; if tkn^result <> over^max^limit^l and tkn^result <> compl^no^err^l then begin call log^message^( 3290, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3290 ); end; if tkn^result = compl^no^err^l then begin ! ! Update POS Balances Token ! pos^bal^get^tkn.acct^amt^1 := pos^bal^tkn.acct^amt^1; move( pos^bal^get^tkn.acct^crncy^cde, pos^bal^tkn.acct^crncy^cde ); pos^bal^get^tkn.txn^amt^1 := pos^bal^tkn.txn^amt^1; move( pos^bal^get^tkn.txn^crncy^cde, pos^bal^tkn.txn^crncy^cde ); end; ! CB token get successful ! end; ! CB token present or error on get ! #ENDSCN = SW0D284 !#CMP2.28 05/21/09 BNETLIBS6175 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6175 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6175 * ******************************************************************************** #SCN = SW0D288 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6175 #NEWVERSION = 6176 #ADD 04419}0C ! 21MAY2009 bensone ! Symptom: The interface is allowing one more outbound transaction ! than the configured maximum in ICF/E MAXIMUM ! OUTSTANDING TRANSACTIONS - OUTBOUND. ! Problem: The interface is checking whether the outbound counter ! is greater than the maximum before suspending the ! current outbound transaction and incrementing the ! counter. ! Fix: Modified the code to check whether the outbound counter ! is greater than or equal to the maximum. ! Proc modified: util^suspend^and^send^sem ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #495900 #REPLACE 24804 UTIL^SUSPEND^AND^SEND^SEM if pct.rqst.out^ctr >= pct.rqst.out^max then #ENDSCN = SW0D288 !#CMP2.28 06/01/09 BNETG 6058 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6058 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6058 * ******************************************************************************** #SCN = SW0D290 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6058 #NEWVERSION = 6059 #ADD 00026+0Y ! 27MAY2009 ArumugP ! Symptom: Banknet Release 09.1 Partial Approval Edit Changes ! Problem: None. ! Fix: Added new global variable auth^greater^amt^alwd^g ! in the section bnet^globals and globals^def. ! Dependency: Apply fixes to BNETS, BNETLIBS and BNETG. Run Make. ! Replace BNETMNWD and BNETUPDT. ! Reference: WO #090409-02 #ADD 00448v0G int auth^greater^amt^alwd^g := false; #ADD 01366v0P int auth^greater^amt^alwd^g; #ENDSCN = SW0D290 !#CMP2.28 06/01/09 BNETLIBS6176 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6176 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6176 * ******************************************************************************** #SCN = SW0D291 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6176 #NEWVERSION = 6177 #ADD 0441900E ! 27MAY2009 ArumugP ! Symptom: Banknet Release 09.1 Partial Approval Edit Changes ! Problem: None. ! Fix: Modified the interface to support partial authorization ! for greater amount. ! Procs modified: pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^xrqst^to^pstm^0200 ! Proc added: util^auth^greater^amt ! Dependency: Apply fixes to BNETS, BNETLIBS and BNETG. Run Make. ! Replace BNETMNWD and BNETUPDT. ! Reference: WO #090409-02 #ADD 07883 SUB^CONVERT^AMT pstm.tran.amt^1 <> pstm^.tran.amt^1 and ( pstm.pre^auth^opt = "P" or pstm.pre^auth^opt = "G" ) then #DELETE 07884 /07885 SUB^CONVERT^AMT #ADD 08687A04 PSTM^FRMT^SEM^ADDL^DATA not util^auth^greater^amt( pstm.retl^sic^cde, pstm.orig^crncy^cde, pstm.tran.amt^1 ) and #ADD 08687N02 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pstm.pre^auth^opt = "G" and util^auth^greater^amt( pstm.retl^sic^cde, pstm.orig^crncy^cde, pstm.tran.amt^1 ) then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. partial^apprv^ind, "1" ); end; #ADD 10605 SUB^CONVERT^AMT if pstm.pre^auth^opt <> "P" and pstm.pre^auth^opt <> "G" then begin ! ! Partial auth not allowed – process as full approval ! return false; end else #ADD 13757 SEM^FRMT^XRQST^TO^PSTM^0200 fixed temp^amt := 0f; #ADD 13862 SEM^FRMT^XRQST^TO^PSTM^0200 call ascii^fixed^( sem.tran^amt, temp^amt ); if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. partial^apprv^ind = "1" and auth^greater^amt^alwd^g and util^auth^greater^amt( sem.merch^typ, sem.tran^crncy^cde, temp^amt ) then begin movd( pstm.pre^auth^opt, "G" ); end; ! of if tag = "61 and partial^apprv^ind = "1" #ADD 16482 UTIL^ADD^SWI^CMN^DATA^TKN ?section util^auth^greater^amt ?page " - util^auth^greater^amt " !##################################################################### !# # !# UTIL^AUTH^GREATER^AMT # !# # !# NARRATIVE: THIS PROCEDURE WILL DETERMINE WHETHER PARTIAL # !# AUTHORIZATION FOR A GREATER AMOUNT IS VALID FOR THE # !# TRANSACTION. # !# # !# INPUT PARAMETERS - # !# MCC : MERCHANT TYPE # !# CRNCY^CDE : CURRENCY CODE # !# AMT : TRANSACTION AMOUNT # !# # !# # !# OUTPUT PARAMETERS - # !# RETURNS TRUE OR FALSE # !# # !##################################################################### int proc util^auth^greater^amt( mcc, crncy^cde,amt ); string .mcc; string .crncy^cde; fixed amt; begin int dec^places; if mcc <> "5542" then begin return false; end; dec^places := get^iso^dec^places( crncy^cde ); if dec^places = -1 then begin return false; end; case dec^places of begin !0! amt := amt; !1! amt := amt / 10f; !2! amt := amt / 100f; !3! amt := amt / 1000f; !?! otherwise call programmatic^dump( 310 ); end; if amt <> 1f then begin return false; end; return true; end; ! of util^auth^greater^amt #ENDSCN = SW0D291 !#CMP2.28 06/01/09 BNETS 60119FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60119 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60119 * ******************************************************************************** #SCN = SW0D293 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h000260b ! 27MAY2009 ArumugP ! Symptom: Banknet Release 09.1 Partial Approval Edit Changes ! Problem: None. ! Fix: Modified the interface to support the new LCONF ! parameters GREATER-AMT-APPROVAL-ALWD. ! Procs modified: cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^paramproc ! Dependency: Apply fixes to BNETS, BNETLIBS and BNETG. Run Make. ! Replace BNETMNWD and BNETUPDT. ! Reference: WO #090409-02 #ADD G025990E CMD^WARMBOOT^STORE^GLOBALS store^d( auth^greater^amt^alwd^g ); #ADD G025990Z CMD^WARMBOOT^STORE^GLOBALS auth^greater^amt^alwd^g := false; #ADD G025990u CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( auth^greater^amt^alwd^g ); #ADD T0394502 INIT^PARAMPROC "P", "GREATER-AMT-APPROVAL-ALWD ", #ADD T039960Z INIT^PARAMPROC ! ! GREATER-AMT-APPROVAL-ALWD ! if not ferror then begin auth^greater^amt^alwd^g := false; if lconf.param^msg.ptxt = "Y" then begin auth^greater^amt^alwd^g := true; end; end; #ENDSCN = SW0D293 !#CMP2.28 06/02/09 BNETS 60120FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60120 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60120 * ******************************************************************************** #SCN = SW0D300 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i000260C ! 02JUN2009 wielerk ! Symptom: The interface only deactivates the first station when ! directed by command. ! Problem: The interface attempts to determine if a deactivate ! timer is already set for a given station. Because the ! search is made without the station index, it appears a ! timer is already set and additional stations cannot be ! deactivated. ! Fix: Modified logic to set the station index in the userbuf ! to the current station processing the deactivate. ! Procs modified: cmd^deactvt^sta ! Dependency: Apply fixes to BNETS. Run Make. ! Reference: Case #499178. #REPLACE G012951R/Y012950M SUB^FRMT^SEND^DEACTVT init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^idx ); #ENDSCN = SW0D300 !#CMP2.28 06/02/09 BNETLIBS6177 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6177 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6177 * ******************************************************************************** #SCN = SW0D301 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6177 #NEWVERSION = 6178 #ADD 0441910E ! 02JUN2009 wielerk ! Symptom: The interface is passing PSTM.ORIG.SEQ^NUM incorrectly ! when formatting an internal reversal. ! Problem: The interface is passing a 6 byte trace number from ! the SEM in a 12 byte PSTM field. The PSTM is initialized ! to ASCII zeroes so the 6 byte field is passed too long. ! Fix: Modified the code to initialize the PSTM.ORIG.SEQ^NUM ! to spaces before moving the external trace number. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #498869. #REPLACE 15700u02 SEM^FRMT^XRVSL^TO^PSTM^0420 mov^( pstm.orig^data.tran^seq^num, blanks ); #ENDSCN = SW0D301 !#CMP2.28 06/12/09 BNETG 6059 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6059 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6059 * ******************************************************************************** #SCN = SW0D308 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6059 #NEWVERSION = 6060 #ADD 00026-09 ! 11JUN2009 saderc ! Symptom: The logon flags are being reset to a status of "N" ! after a WARMBOOT. ! Problem: The interface resets all of the logon flags in the ! BNIIF table to false after refreshing the table in ! extended memory during a WARMBOOT. ! Fix: Created a new global structure called bnet^glbl^def to ! hold global variables. Added new global variables ! bniif^sav^ctr^g, bniif^sav^seg^id^g, bniif^sav^tbl^g ! and bniif^ext^mem^bytes^g to bnet^glbl^def. Also, ! added indirect structure bnet^g to reference ! bnet^glbl^def. ! Dependency: Apply fixes to BNETG and BNETS. Run Make. Replace ! BNETLOGM. ! Reference: Case #491593 ! ! 11JUN2009 saderc ! Symptom: Unable to add globals to the primary global space. ! Problem: Only 256 bytes of primary global space are allowed. ! With all bindable modules present, the primary global ! space is maxed out. ! Fix: Removed obsolete global variables bnrlf^ok^g and ! bin^loop. ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #500468 #DELETE 00385E01 #ADD 00435 ! !##################################################################### !# ALL NEW GLOBALS MUST BE ADDED TO THE FOLLOWING STRUCTURE # !##################################################################### ! ! Note: The init^bnet^g proc in BNETS will also need to be ! updated with any new global added to BNET^GLBL^DEF ! to initialize it to the default value. ! struct bnet^glbl^def( * ); begin int bniif^sav^ctr^g; int bniif^sav^seg^id^g; int(32) bniif^sav^tbl^g; fixed bniif^ext^mem^bytes^g; end; #ADD 00471N01 struct .bnet^g( bnet^glbl^def ); #DELETE 01366E16 #DELETE 01366O0B #ENDSCN = SW0D308 !#CMP2.28 06/12/09 BNETS 60121FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60121 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60121 * ******************************************************************************** #SCN = SW0D309 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j000260E ! 12JUN2009 saderc ! Symptom: The logon flags are being reset to a status of "N" ! after a WARMBOOT. ! Problem: The interface resets all of the logon flags in the ! BNIIF table to false after refreshing the table in ! extended memory during a WARMBOOT. ! Fix: Modified the interface to store the original BNIIF ! records in extended memory during a WARMBOOT. Also, ! modified the interface to compare the original BNIIF ! records against the refreshed BNIIF records and restore ! the logon flags accordingly. ! Added procs: cmd^warmboot^compare^bniif ! cmd^warmboot^retrieve^bniif ! cmd^warmboot^store^bniif ! init^bnet^g ! Modified procs: cmd^warmboot ! cmd^warmboot^retrieve^globals ! init^bniif ! Dependency: Apply fixes to BNETG and BNETS. Run Make. Replace ! BNETLOGM. ! Reference: Case #491593 ! ! 12JUN2009 saderc ! Symptom: Unable to add globals to the primary global space. ! Problem: Only 256 bytes of primary global space are allowed. ! With all bindable modules present, the primary global ! space is maxed out. ! Fix: Removed obsolete global variable bnrlf^ok^g. ! Modified procs: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^bnrlf ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #500468 #ADD 00318 BNETS^60^121 call init^bnet^g; #ADD G0251605 CMD^WARMBOOT if pct.bniif^tbl.ctr > 0d then begin call cmd^warmboot^store^bniif; end; #ADD 02516j22 CMD^WARMBOOT ! ! Retrieve the old BNIIF table using the temp structure. ! If no records exists, drop the segment. ! if bnet^g.bniif^sav^ctr^g > 0 then begin call cmd^warmboot^retrieve^bniif; end else begin call hiswmem^deallocatesegment( bniif^seg^id, 1 ); end; #ADD 02516j5C CMD^WARMBOOT if bnet^g.bniif^sav^ctr^g > 0 then begin call cmd^warmboot^compare^bniif; call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); end; #ADD 02599 CMD^WARMBOOT ?section cmd^warmboot^compare^bniif ?page "cmd^warmboot^compare^bniif" !##################################################################### !# # !# cmd^warmboot^compare^bniif # !# # !# This procedure compares the refreshed BNIIF records against # !# the saved image to determine whether the logon flags need # !# to be restored to the value prior to the WARMBOOT. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc cmd^warmboot^compare^bniif; begin int .ext bniif^sav^tbl( fiid^mci^def ); int .ext bniif^tbl( fiid^mci^def ); struct .sav^rec( fiid^mci^def ); int found := false; int found^prfx := false; int i := 0; int j := 0; int k := 0; int l := 0; int seg^id; seg^id := usesegment( bnet^g.bniif^sav^seg^id^g ); @bniif^sav^tbl := bnet^g.bniif^sav^tbl^g; found := false; for i := 0 to $max( 0, $int( bnet^g.bniif^sav^ctr^g ) - 1 ) do begin move( sav^rec.fiid, bniif^sav^tbl.fiid ); move( sav^rec.int^fiid, bniif^sav^tbl.int^fiid ); move( sav^rec.mci^id, bniif^sav^tbl.mci^id ); set( sav^rec.logon^acq, bniif^sav^tbl.logon^acq ); set( sav^rec.logon^iss, bniif^sav^tbl.logon^iss ); set( sav^rec.logon^cr, bniif^sav^tbl.logon^cr ); set( sav^rec.logon^db, bniif^sav^tbl.logon^db ); for j := 0 to ( $occurs( bniif^sav^tbl.prefix ) - 1 ) do begin move( sav^rec.prefix[ j ].num, bniif^sav^tbl.prefix[ j ].num ); set( sav^rec.prefix[ j ].lgth, bniif^sav^tbl.prefix[ j ].lgth ); set( sav^rec.prefix[ j ].logon^acq, bniif^sav^tbl.prefix[ j ].logon^acq ); set( sav^rec.prefix[ j ].logon^iss, bniif^sav^tbl.prefix[ j ].logon^iss ); set( sav^rec.prefix[ j ].logon^cr, bniif^sav^tbl.prefix[ j ].logon^cr ); set( sav^rec.prefix[ j ].logon^db, bniif^sav^tbl.prefix[ j ].logon^db ); end; ! end of for j := 0 seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr; l := 0; found := false; while ( l < $int( pct.bniif^tbl.ctr ) ) and not found do begin if ( bniif^tbl.int^fiid = sav^rec.int^fiid for $len( sav^rec.int^fiid ) ) and ( bniif^tbl.mci^id = sav^rec.mci^id for $len( sav^rec.mci^id ) ) then begin if ( bniif^tbl.traffic = acq^l or bniif^tbl.traffic = both^l ) and sav^rec.logon^acq then begin bniif^tbl.logon^acq := true; end; if ( bniif^tbl.traffic = iss^l or bniif^tbl.traffic = both^l ) and sav^rec.logon^iss then begin bniif^tbl.logon^iss := true; end; if ( bniif^tbl.service = credit^l or bniif^tbl.service = both^l ) and sav^rec.logon^cr then begin bniif^tbl.logon^cr := true; end; if ( bniif^tbl.service = debit^l or bniif^tbl.service = both^l ) and sav^rec.logon^db then begin bniif^tbl.logon^db := true; end; for j := 0 to ( $occurs( bniif^tbl.prefix ) - 1 ) do begin if ( bniif^tbl.prefix[ j ].num <> [ $len( bniif^tbl.prefix[ j ]. num ) * [" "] ] ) and ( bniif^tbl.prefix[ j ].num <> [ $len( bniif^tbl.prefix[ j ]. num ) * [0] ] ) then begin k := 0; found^prfx := false; while ( k < ( $occurs( bniif^tbl. prefix ) ) ) and not found^prfx do begin if ( bniif^tbl.prefix[ j ].num = sav^rec.prefix[ k ].num for $len( sav^rec.prefix[ k ]. num ) ) then begin if ( bniif^tbl.traffic = acq^l or bniif^tbl.traffic = both^l ) and sav^rec.prefix[ k ].logon^acq then begin set( bniif^tbl.prefix[ j ]. logon^acq, true ); end; if ( bniif^tbl.traffic = iss^l or bniif^tbl.traffic = both^l ) and sav^rec.prefix[ k ].logon^iss then begin set( bniif^tbl.prefix[ j ]. logon^iss, true ); end; if ( bniif^tbl.service = credit^l or bniif^tbl.service = both^l ) and sav^rec.prefix[ k ].logon^cr then begin set( bniif^tbl.prefix[ j ]. logon^cr, true ); end; if ( bniif^tbl.service = debit^l or bniif^tbl.service = both^l ) and sav^rec.prefix[ k ].logon^db then begin set( bniif^tbl.prefix[ j ]. logon^db, true ); end; found^prfx := true; end; ! prefix matches saved prefix increment^d( k ); end; ! of saved prefix while loop end; ! of if prefix not blanks or zeroes end; ! of new prefix for loop found := true; end; ! of if ( bniif^tbl.int^fiid = increment^d( l ); @bniif^tbl := @bniif^tbl + $udbl( wlen ( fiid^mci^def ) * 2 ); end; ! of while ( l < $int( pct.bniif^tbl.ctr ) ) and seg^id := usesegment( bnet^g.bniif^sav^seg^id^g ); @bniif^sav^tbl := @bniif^sav^tbl + $udbl( wlen ( fiid^mci^def ) * 2 ); end; ! of saved BNIIF record loop call usesegment( seg^id ); ! return to previous segment end; ! of cmd^warmboot^compare^bniif ?section cmd^warmboot^retrieve^bniif ?page "cmd^warmboot^retrieve^bniif" !##################################################################### !# # !# cmd^warmboot^retrieve^bniif # !# # !# This procedure restores the BNIIF using the image stored in the # !# temp structure. It also drops the segment used for the temp # !# BNIIF structure. # !# # !# INPUT PARAMETERS : # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc cmd^warmboot^retrieve^bniif; begin wlform( mem, "Extended memory allocation error #, BNIIF " ',' "records will not be restored" ) literal extensible^segment^l = %044000; int .ext bniif^sav^tbl( fiid^mci^def ); int .ext bniif^tbl( fiid^mci^def ); struct .sav^rec( fiid^mci^def ); int error := 0; int i := 0; int j := 0; int seg^id; seg^id := usesegment; ! save old segment if pct.bniif^tbl.ctr > 0d then begin call hiswmem^deallocatesegment( bniif^seg^id, 1 ); end; if ( error := hiswmem^allocatesegment( bniif^seg^id, ( $int( bnet^g.bniif^ext^mem^bytes^g / 2048f ) + 1 ), ! filename !, extensible^segment^l ) ) then begin call log^message^( 1033, !routing code!, @mem, net.myname, evt^msg^severity^warn^l, error ); call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); call usesegment( seg^id ); ! return to old segment return; end; pct.bniif^tbl.addr := %2000000d; pct.bniif^tbl.ctr := 0d; seg^id := usesegment( bnet^g.bniif^sav^seg^id^g ); @bniif^sav^tbl := bnet^g.bniif^sav^tbl^g; for i := 0 to $max( 0, $int( bnet^g.bniif^sav^ctr^g ) - 1 ) do begin move( sav^rec.fiid, bniif^sav^tbl.fiid ); move( sav^rec.int^fiid, bniif^sav^tbl.int^fiid ); move( sav^rec.mci^id, bniif^sav^tbl.mci^id ); move( sav^rec.security^cde, bniif^sav^tbl.security^cde ); set( sav^rec.logon^acq, bniif^sav^tbl.logon^acq ); set( sav^rec.logon^iss, bniif^sav^tbl.logon^iss ); set( sav^rec.logon^cr, bniif^sav^tbl.logon^cr ); set( sav^rec.logon^db, bniif^sav^tbl.logon^db ); set( sav^rec.service, bniif^sav^tbl.service ); set( sav^rec.traffic, bniif^sav^tbl.traffic ); for j := 0 to ( $occurs( bniif^sav^tbl.prefix ) - 1 ) do begin move( sav^rec.prefix[ j ].num, bniif^sav^tbl.prefix[ j ].num ); set( sav^rec.prefix[ j ].lgth, bniif^sav^tbl.prefix[ j ].lgth ); set( sav^rec.prefix[ j ].logon^acq, bniif^sav^tbl.prefix[ j ].logon^acq ); set( sav^rec.prefix[ j ].logon^iss, bniif^sav^tbl.prefix[ j ].logon^iss ); set( sav^rec.prefix[ j ].logon^cr, bniif^sav^tbl.prefix[ j ].logon^cr ); set( sav^rec.prefix[ j ].logon^db, bniif^sav^tbl.prefix[ j ].logon^db ); end; set( sav^rec.prefix^ctr, bniif^sav^tbl.prefix^ctr ); move( sav^rec.cust^id^ind, bniif^sav^tbl.cust^id^ind ); for j := 0 to ( $occurs( bniif^sav^tbl.mc^cust^id ) - 1 ) do begin move( sav^rec.mc^cust^id[ j ].num, bniif^sav^tbl.mc^cust^id[ j ].num ); move( sav^rec.mc^cust^id[ j ].crncy^cde, bniif^sav^tbl.mc^cust^id[ j ].crncy^cde ); end; ! of for j := 0 set( sav^rec.mc^cust^id^ctr, bniif^sav^tbl.mc^cust^id^ctr ); set( sav^rec.avs^typ, bniif^sav^tbl.avs^typ ); seg^id := usesegment( bniif^seg^id ); @bniif^tbl := pct.bniif^tbl.addr + pct.bniif^tbl.ctr * $dbl( $len(fiid^mci^def) ); move( bniif^tbl.fiid, sav^rec.fiid ); move( bniif^tbl.int^fiid, sav^rec.int^fiid ); move( bniif^tbl.mci^id, sav^rec.mci^id ); move( bniif^tbl.security^cde, sav^rec.security^cde ); set( bniif^tbl.logon^acq, sav^rec.logon^acq ); set( bniif^tbl.logon^iss, sav^rec.logon^iss ); set( bniif^tbl.logon^cr, sav^rec.logon^cr ); set( bniif^tbl.logon^db, sav^rec.logon^db ); set( bniif^tbl.service, sav^rec.service ); set( bniif^tbl.traffic, sav^rec.traffic ); for j := 0 to ( $occurs( bniif^tbl.prefix ) - 1 ) do begin move( bniif^tbl.prefix[ j ].num, sav^rec.prefix[ j ].num ); set( bniif^tbl.prefix[ j ].lgth, sav^rec.prefix[ j ].lgth ); set( bniif^tbl.prefix[ j ].logon^acq, sav^rec.prefix[ j ].logon^acq ); set( bniif^tbl.prefix[ j ].logon^iss, sav^rec.prefix[ j ].logon^iss ); set( bniif^tbl.prefix[ j ].logon^cr, sav^rec.prefix[ j ].logon^cr ); set( bniif^tbl.prefix[ j ].logon^db, sav^rec.prefix[ j ].logon^db ); end; ! of for j := 0 set( bniif^tbl.prefix^ctr, sav^rec.prefix^ctr ); move( bniif^tbl.cust^id^ind, sav^rec.cust^id^ind ); for j := 0 to ( $occurs( bniif^tbl.mc^cust^id ) - 1 ) do begin move( bniif^tbl.mc^cust^id[ j ].num, sav^rec.mc^cust^id[ j ].num ); move( bniif^tbl.mc^cust^id[ j ].crncy^cde, sav^rec.mc^cust^id[ j ].crncy^cde ); end; ! of for j := 0 set( bniif^tbl.mc^cust^id^ctr, sav^rec.mc^cust^id^ctr ); set( bniif^tbl.avs^typ, sav^rec.avs^typ ); pct.bniif^tbl.ctr := pct.bniif^tbl.ctr + 1d; seg^id := usesegment( bnet^g.bniif^sav^seg^id^g ); @bniif^sav^tbl := @bniif^sav^tbl + $udbl( wlen ( fiid^mci^def ) * 2 ); end; ! of saved BNIIF record loop call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); call usesegment( seg^id ); ! return to previous segment end; ! of cmd^warmboot^retrieve^bniif ?section cmd^warmboot^store^bniif ?page "cmd^warmboot^store^bniif" !##################################################################### !# # !# cmd^warmboot^store^bniif # !# # !# This procedure moves the BNIIF records in extended memory into # !# a save location in extended memory. # !# # !# INPUT PARAMETERS : # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc cmd^warmboot^store^bniif; begin wlform( mem, "Extended memory allocation error #, BNIIF " ',' "records will not be saved" ) literal extensible^segment^l = %044000; int .ext bniif^sav^tbl( fiid^mci^def ); int .ext bniif^tbl( fiid^mci^def ); struct .sav^rec( fiid^mci^def ); int error := 0; int i := 0; int j := 0; int seg^id; seg^id := usesegment; ! save old segment bnet^g.bniif^sav^ctr^g := 0; bnet^g.bniif^sav^seg^id^g := -1; bnet^g.bniif^sav^tbl^g := -1d; if ( error := hiswmem^allocatesegment( bnet^g.bniif^sav^seg^id^g, ( $int( bnet^g.bniif^ext^mem^bytes^g / 2048f ) + 1 ), ! filename !, extensible^segment^l ) ) then begin call log^message^( 1034, !routing code!, @mem, net.myname, evt^msg^severity^warn^l, error ); call usesegment( seg^id ); ! return to old segment return; end; bnet^g.bniif^sav^tbl^g := %2000000d; seg^id := usesegment( bniif^seg^id ); bnet^g.bniif^sav^ctr^g := 0; @bniif^tbl := pct.bniif^tbl.addr; for i := 0 to $max( 0, $int( pct.bniif^tbl.ctr ) - 1 ) do begin move( sav^rec.fiid, bniif^tbl.fiid ); move( sav^rec.int^fiid, bniif^tbl.int^fiid ); move( sav^rec.mci^id, bniif^tbl.mci^id ); move( sav^rec.security^cde, bniif^tbl.security^cde ); set( sav^rec.logon^acq, bniif^tbl.logon^acq ); set( sav^rec.logon^iss, bniif^tbl.logon^iss ); set( sav^rec.logon^cr, bniif^tbl.logon^cr ); set( sav^rec.logon^db, bniif^tbl.logon^db ); set( sav^rec.service, bniif^tbl.service ); set( sav^rec.traffic, bniif^tbl.traffic ); for j := 0 to ( $occurs( bniif^tbl.prefix ) - 1 ) do begin move( sav^rec.prefix[ j ].num, bniif^tbl.prefix[ j ].num ); set( sav^rec.prefix[ j ].lgth, bniif^tbl.prefix[ j ].lgth ); set( sav^rec.prefix[ j ].logon^acq, bniif^tbl.prefix[ j ].logon^acq ); set( sav^rec.prefix[ j ].logon^iss, bniif^tbl.prefix[ j ].logon^iss ); set( sav^rec.prefix[ j ].logon^cr, bniif^tbl.prefix[ j ].logon^cr ); set( sav^rec.prefix[ j ].logon^db, bniif^tbl.prefix[ j ].logon^db ); end; ! of for j := 0 to ( $occurs( bniif^tbl.prefix )... set( sav^rec.prefix^ctr, bniif^tbl.prefix^ctr ); move( sav^rec.cust^id^ind, bniif^tbl.cust^id^ind ); for j := 0 to ( $occurs( bniif^tbl.mc^cust^id ) - 1 ) do begin move( sav^rec.mc^cust^id[ j ].num, bniif^tbl.mc^cust^id[ j ].num ); move( sav^rec.mc^cust^id[ j ].crncy^cde, bniif^tbl.mc^cust^id[ j ].crncy^cde ); end; ! of for j := 0 to ( $occurs( bniif.mc^.... set( sav^rec.mc^cust^id^ctr, bniif^tbl.mc^cust^id^ctr ); set( sav^rec.avs^typ, bniif^tbl.avs^typ ); seg^id := usesegment( bnet^g.bniif^sav^seg^id^g ); @bniif^sav^tbl := bnet^g.bniif^sav^tbl^g + $dbl( bnet^g.bniif^sav^ctr^g ) * $dbl( $len( fiid^mci^def ) ); move( bniif^sav^tbl.fiid, sav^rec.fiid ); move( bniif^sav^tbl.int^fiid, sav^rec.int^fiid ); move( bniif^sav^tbl.mci^id, sav^rec.mci^id ); move( bniif^sav^tbl.security^cde, sav^rec.security^cde ); set( bniif^sav^tbl.logon^acq, sav^rec.logon^acq ); set( bniif^sav^tbl.logon^iss, sav^rec.logon^iss ); set( bniif^sav^tbl.logon^cr, sav^rec.logon^cr ); set( bniif^sav^tbl.logon^db, sav^rec.logon^db ); set( bniif^sav^tbl.service, sav^rec.service ); set( bniif^sav^tbl.traffic, sav^rec.traffic ); for j := 0 to ( $occurs( bniif^sav^tbl.prefix ) - 1 ) do begin move( bniif^sav^tbl.prefix[ j ].num, sav^rec.prefix[ j ].num ); set( bniif^sav^tbl.prefix[ j ].lgth, sav^rec.prefix[ j ].lgth ); set( bniif^sav^tbl.prefix[ j ].logon^acq, sav^rec.prefix[ j ].logon^acq ); set( bniif^sav^tbl.prefix[ j ].logon^iss, sav^rec.prefix[ j ].logon^iss ); set( bniif^sav^tbl.prefix[ j ].logon^cr, sav^rec.prefix[ j ].logon^cr ); set( bniif^sav^tbl.prefix[ j ].logon^db, sav^rec.prefix[ j ].logon^db ); end; ! of for j := 0 set( bniif^sav^tbl.prefix^ctr, sav^rec.prefix^ctr ); move( bniif^sav^tbl.cust^id^ind, sav^rec.cust^id^ind ); for j := 0 to ( $occurs( bniif^sav^tbl.mc^cust^id ) - 1 ) do begin move( bniif^sav^tbl.mc^cust^id[ j ].num, sav^rec.mc^cust^id[ j ].num ); move( bniif^sav^tbl.mc^cust^id[ j ].crncy^cde, sav^rec.mc^cust^id[ j ].crncy^cde ); end; ! of for j := 0 set( bniif^sav^tbl.mc^cust^id^ctr, sav^rec.mc^cust^id^ctr ); set( bniif^sav^tbl.avs^typ, sav^rec.avs^typ ); bnet^g.bniif^sav^ctr^g := bnet^g.bniif^sav^ctr^g + 1; seg^id := usesegment( bniif^seg^id ); @bniif^tbl := @bniif^tbl + $udbl( wlen ( fiid^mci^def ) * 2 ); end; ! of BNIIF record loop call usesegment( seg^id ); ! return to previous segment end; ! of cmd^warmboot^store^bniif #DELETE 02599R2C CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599T0X CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599T45 CMD^WARMBOOT^RETRIEVE^GLOBALS #DELETE 02599T5E CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD 02831 INIT^ASSIGNPROC ?section init^bnet^g ?page " - init^bnet^g" !##################################################################### !# # !# init^bnet^g # !# # !# This procedure sets the global variables defined in the # !# BNET^GLBL^DEF to their default values at initialization. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc init^bnet^g; begin bnet^g.bniif^sav^ctr^g := 0; bnet^g.bniif^sav^seg^id^g := -1; bnet^g.bniif^sav^tbl^g := -1d; bnet^g.bniif^ext^mem^bytes^g := 0f; end; ! of init^bnet^g ! #ADD G0286500 INIT^BNIIF bnet^g.bniif^ext^mem^bytes^g := 0f; #ADD 02879R0A INIT^BNIIF bnet^g.bniif^ext^mem^bytes^g := ext^mem^bytes; #ADD 02879R0N INIT^BNIIF if bnet^g.bniif^sav^ctr^g > 0 then begin call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); end; #ADD 02987R07 INIT^BNIIF if bnet^g.bniif^sav^ctr^g > 0 then begin call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); end; #ADD 02991R0A INIT^BNIIF if bnet^g.bniif^sav^ctr^g > 0 then begin call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); end; #ADD 02998N01 INIT^BNIIF if bnet^g.bniif^sav^ctr^g > 0 then begin call hiswmem^deallocatesegment( bnet^g.bniif^sav^seg^id^g, 1 ); end; #DELETE 03036R01 INIT^BNRLF #DELETE 03048R01 INIT^BNRLF #DELETE 03056R01 INIT^BNRLF #DELETE 03064R01 INIT^BNRLF #DELETE 03071R01 INIT^BNRLF #ENDSCN = SW0D309 !#CMP2.28 06/16/09 BNETLIBS6178 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6178 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6178 * ******************************************************************************** #SCN = SW0D318 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6178 #NEWVERSION = 6179 #ADD 0441920C ! 16JUN2009 saderc ! Symptom: The interface is not formatting crdhldr^id^method in ! the C4 (point of service data) token to a value of "2" ! (PIN) for a PIN based transaction. ! Problem: The interface does not format crdhldr^id^method with ! a value of "2" (PIN) in the C4 token when DE 52 (PIN) ! is present in the external request message. ! Fix: Modified the interface to format the crdhldr^id^method ! with a value of "2", if DE 52 is present in the external ! request message. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #499207 #ADD 14690v03 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! If DE 52 is present, then set crdhldr^id^method to a ! value of "2" (PIN). ! if pin^bit^d then begin movd( pos^data^tkn.crdhldr^id^method, "2" ); end; #ENDSCN = SW0D318 !#CMP2.28 06/23/09 BNETLIBS6179 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6179 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6179 * ******************************************************************************** #SCN = SW0D336 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6179 #NEWVERSION = 6180 #ADD 0441930E ! 22JUN2009 engelk ! Symptom: EMS message #56 displayed by RTAU indicating that a ! transaction with a bad date received and listing the ! bad date as the previous day. ! Problem: RTAU did not like receiving reversals containing ! the previous day's posting date. ! Fix: Added code to the routine which formats SEM reversals ! to internal reversals to set the posting date to the ! current date. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #501313 #REPLACE 15732 SEM^FRMT^XRVSL^TO^PSTM^0420 move( pstm.post^dat, pct.setl.b24^pos^dat ); #ENDSCN = SW0D336 !#CMP2.28 06/26/09 BNETS 60122FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60122 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60122 * ******************************************************************************** #SCN = SW0D347 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k000260Y ! 25JUN2009 engelk ! Symptom: Interface will not read LCONF params ! MAESTRO-NETWORK-IDxx or PREPAID-NETWORK-IDxx unless ! they are defined for a specific BNET process. ! Problem: No attempt is made to read the LCONF for generic ! LCONF assigns (those where the process name is all ! asterisks). ! Fix: Added code to look for generic (those not process ! specific) LCONF params if no process specific LCONF ! params are present of the types: ! MAESTRO-NETWORK-IDxx ! PREPAID-NETWORK-IDxx ! Procs modified: init^paramproc ! Dependency: Apply fix to BNETS and run Make. ! Reference: Case #501709 #ADD h040680g INIT^PARAMPROC if j <= 0 then begin ! ! No LCONF params found when process name is specified ! Look for generic LCONF params ! movd( lconf^key.user^fld1, " " ); init( lconf^key.pro^name, "*", $len( lconf^key.pro^name ) ); movd( lconf^key.item^typ, "P" ); init( lconf^key.item^name, " ", $len( lconf^key.item^name ) ); movd( lconf^key.item^name, "MAESTRO-NETWORK-ID" ); if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; ! keyposition error j := -1; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin j := j + 1; if j < $occurs( maestro^tbl^g.ntwk^id ) then begin movl( maestro^tbl^g.ntwk^id[ j ].cde, lconf.param^msg.ptxt, $min( lconf.param^msg.plgth, $len( maestro^tbl^g.ntwk^id[ j ].cde ) ) ); end; ! if j < $occurs( maestro^tbl^g.ntwk^id ) end; ! while end; ! no process specific LCONF params located #ADD h040681o INIT^PARAMPROC if j <= 0 then begin ! ! No LCONF params found when process name is specified ! Look for generic LCONF params ! movd( lconf^key.user^fld1, " " ); init( lconf^key.pro^name, "*", $len( lconf^key.pro^name ) ); movd( lconf^key.item^typ, "P" ); init( lconf^key.item^name, " ", $len( lconf^key.item^name ) ); movd( lconf^key.item^name, "PREPAID-NETWORK-ID" ); if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; ! keyposition error j := -1; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin j := j + 1; if j < $occurs( prepaid^tbl^g.ntwk^id ) then begin movl( prepaid^tbl^g.ntwk^id[ j ].cde, lconf.param^msg.ptxt, $min( lconf.param^msg.plgth, $len( prepaid^tbl^g.ntwk^id[ j ].cde ) ) ); end; ! if j < $occurs( prepaid^tbl^g.ntwk^id ) end; ! while end; ! no process specific LCONF params located #REPLACE h040681v INIT^PARAMPROC num^prepaid^tbl^g := $occurs( prepaid^tbl^g.ntwk^id ); #ENDSCN = SW0D347 !#CMP2.28 07/06/09 BNETLIBS6180 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6180 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6180 * ******************************************************************************** #SCN = SW0D353 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6180 #NEWVERSION = 6181 #ADD 0441940D ! 06JUL2009 saderc ! Symptom: The amount being sent in DE 54 (additional amounts) is ! the wrong currency. ! Problem: The interface is sending the balance specified in the ! transaction currency of the CB (POS-BAL) token in DE 54. ! The interface should be sending the balance in the ! message originator's currency. The message originator's ! currency is defined in DE 51 (issuer currency code). ! Fix: Modified the interface to determine whether the currency ! code defined in DE 51 matches either the acct^crncy^cde ! or the txn^crncy^cde fields in the CB token. If so, move ! the corresponding amount to DE 54. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #502113 #ADD 07962c09 SUB^CONVERT^AMT pos^bal^tkn^lgth ) then begin ! ! If acct^crncy^cde or txn^crncy^cde of the POS ! Balance Token equals DE 51 (iss^crncy^cde), then ! move the corresponding amount field to DE 54. ! if ( pos^bal^tkn.acct^crncy^cde = sem.iss^crncy^cde for $len( pos^bal^tkn.acct^crncy^cde ) ) or ( pos^bal^tkn.txn^crncy^cde = sem.iss^crncy^cde for $len( pos^bal^tkn.txn^crncy^cde ) ) then begin addl^amt^bit^d := 1; if pos^bal^tkn.acct^crncy^cde = sem.iss^crncy^cde for $len( pos^bal^tkn.acct^crncy^cde ) then begin fixed^ascii^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.acct^amt^1 ); move( sem.addl^amt.info[ i ].crncy^cde, pos^bal^tkn.acct^crncy^cde ); if pos^bal^tkn.acct^amt^1 < 0f then begin movd( sem.addl^amt.info[ i ].typ^amt, "D" ); end else begin movd( sem.addl^amt.info[ i ].typ^amt, "C" ); end; end ! of if pos^bal^tkn.acct^crncy^cde = DE 51 else if pos^bal^tkn.txn^crncy^cde = sem.iss^crncy^cde for $len( pos^bal^tkn.txn^crncy^cde ) then begin fixed^ascii^( sem.addl^amt.info[ i ].amt, pos^bal^tkn.txn^amt^1 ); move( sem.addl^amt.info[ i ].crncy^cde, pos^bal^tkn.txn^crncy^cde ); if pos^bal^tkn.txn^amt^1 < 0f then begin movd( sem.addl^amt.info[ i ].typ^amt, "D" ); end else begin movd( sem.addl^amt.info[ i ].typ^amt, "C" ); end; end; ! of if pos^bal^tkn.txn^crncy^cde = DE 51 movl( sem.addl^amt.info[ i ].acct^typ, sem.proc^cde.byte[ 2 ], $len( sem.addl^amt.info[ i ].acct^typ ) ); movd( sem.addl^amt.info[ i ].amt^typ, "02" ); cnt := cnt + 1; lgth := ( cnt ) * 20; call integer^ascii^( sem.addl^amt.lgth, lgth ); end; ! of if acct^crncy^cde or txn^crncy^cde = #DELETE 07962c0A/07962c0n SUB^CONVERT^AMT #ENDSCN = SW0D353 !#CMP2.28 07/09/09 RP09BNTS6009 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6009 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RP09BNTS RP09BNTS 6009 * ******************************************************************************** #SCN = SW0D355 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00008I0D * 09JUL2009 HazraR * Symptom: Transaction Detail Report-RP09 does not contain * ATM transactions. * Problem: Report-RP09 currently includes only POS * transactions, because there are no code to support * report generation for the ATM transactions. * Fix: Added logic to include ATM transactions. * Modified sections: * WS-HEADER-LINES-SECTION * WS-HEADER-LINES-RP-SECTION * B100-MAIN-PARA. * Dependency: Apply fix to RP09BNTS and run Make. * Reference: Case #500988 #ADD 00207F00 DATA DIVISION VALUE "ATM FROM ACCT #/POS ACCT #". #DELETE 00207F01 DATA DIVISION #ADD 00207F03 DATA DIVISION VALUE "ATM TO ACCT #/POS APPR CODE". #DELETE 00207F04 DATA DIVISION #ADD 00207F06 DATA DIVISION VALUE "ATM TRM OWNER/POS RETLR". #DELETE 00207F07 DATA DIVISION #ADD 00207F0K DATA DIVISION VALUE "ATM FROM ACCT #/POS ACCT #". #DELETE 00207F0L DATA DIVISION #ADD 00207F0N DATA DIVISION VALUE "ATM TO ACCT #/POS APPR CODE". #DELETE 00207F0O DATA DIVISION #ADD 00207F0Q DATA DIVISION VALUE "ATM TRM OWNER/POS RET". #DELETE 00207F0R DATA DIVISION #ADD 00238F00 PROCEDURE DIVISION IF REC-TYP OF WS-ILF = 1 MOVE "Y" TO ATM-REC-PRESENT-SW PERFORM C100-AUTH-PROCESSING-ATM ELSE IF REC-TYP OF WS-ILF = 2 MOVE "Y" TO POS-REC-PRESENT-SW PERFORM C200-AUTH-PROCESSING-POS #DELETE 00238F01/00238F03 PROCEDURE DIVISION #ADD 00253F01 PROCEDURE DIVISION COPY C100-SECTION OF "=SWRPT_RP09SWIS". #ENDSCN = SW0D355 !#CMP2.28 07/13/09 BNETLIBS6181 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6181 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6181 * ******************************************************************************** #SCN = SW0D358 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6181 #NEWVERSION = 6182 #ADD 0441950G ! 13JUL2009 saderc ! Symptom: The interface is sending DE 23 (Card Sequence Number) ! without a card sequence number. ! Problem: The interface is sending DE 23 for manually entered ! cards. However, not all UKDM cards have a card sequence ! number. ! Fix: Modified the interface to verify that mbr^num in the ! PSTM is not spaces or zeroes before formatting DE 23 and ! turning on the bit. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #491997 #ADD 06331r0P PSTM^FRMT^0200^TO^XRQST if ( pstm.tran.track2.byte[ 0 ] = "M" or pstm.tran.track2.byte[ 0 ] = "m" ) and ( pstm.tran.mbr^num <> [ $len( pstm.tran.mbr^num ) * ["0"] ] and pstm.tran.mbr^num <> [ $len( pstm.tran.mbr^num ) * [" "] ] ) then #DELETE 06331r0Q/06331r0R PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0D358 !#CMP2.28 07/21/09 BNETLIBS6182 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6182 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6182 * ******************************************************************************** #SCN = SW0D369 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6182 #NEWVERSION = 6183 #ADD 0441960D ! 21JUL2009 saderc ! Symptom: The interface is not returning the CVC2 result in the ! crd^vrfy^flg2 field of the POS Data1 token (CH). ! Problem: The interface does not return the CVC2/CVV2 result for ! a manually entered transaction. There is no reason why ! BASE24 modules should not set the crd-vrfy-flg2 field ! in the POS Data1 token to the result of manual card ! verification (CVC2/CVV2) in a manually-entered ! transaction. ! Fix: Modified the interface to return the CVC2/CVV2 result ! in the crd^vrfy^flg2 field of the POS Data1 token, if ! present. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #503317 #ADD 12503A00 SEM^FRMT^XRESP^TO^PSTM^0210 if cvd2^rslt^present^flg or auth^inst^bit^d then #DELETE 12503A01/12508A02 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0D369 !#CMP2.28 07/31/09 BNETLIBS6183 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6183 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6183 * ******************************************************************************** #SCN = SW0D381 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6183 #NEWVERSION = 6184 #ADD 0441970G ! 31JUL2009 wielerk ! Symptom: The interface is sending 0120 messages with the ! secondary bitmap turned on with no fields on. ! Problem: The interface is incorrectly turning on the secondary ! bitmap. ! Fix: Modified the interface to turn off the secondary bitmap. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #502627 #REPLACE 07196 PSTM^FRMT^0220^TO^XADV sbit^map^bit^d := 0; #ENDSCN = SW0D381 !#CMP2.28 08/01/09 BNETS 60123FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60123 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60123 * ******************************************************************************** #SCN = SW0D382 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l000260G ! 03AUG2009 saderc ! Symptom: The logon flags are being reset to a status of "N" ! after a WARMBOOT if multiple FIID's have the same MCI ! ID. ! Problem: The matching criteria used when the interface restores ! the logon flags in the BNIIF table after a WARMBOOT does ! not contain the FIID. ! Fix: Modified the interface to include the FIID matching ! criteria when restoring the logon flags in the BNIIF ! table after a WARMBOOT. ! Proc modified: cmd^warmboot^compare^bniif ! Dependency: Apply fix to BNETS and run Make. ! Reference: Case #504641 #ADD k025991G CMD^WARMBOOT^COMPARE^BNIIF ( bniif^tbl.fiid = sav^rec.fiid for $len( sav^rec.fiid ) ) and #ENDSCN = SW0D382 !#CMP2.28 08/07/09 BNETLIBS6184 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6184 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6184 * ******************************************************************************** #SCN = SW0D397 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6184 #NEWVERSION = 6185 #ADD 0441980A ! 07AUG2009 saderc ! Symptom: The BNET interface is setting DE 48 SE 87 to a value of ! "P" (CVC2 was not processed) incorrectly. ! Problem: If the transaction is a Recurring Payment, the interface ! will formats the RECUR-PMNT-IND in the POS DATA1 (CH) ! token and adds the token to the PSTM request message. ! The problem occurs when POS auth echoes the token back ! to the interface in the 0210 response. The interface ! will then check to see if the POS DATA1 token is present ! in the 0210 response message. If the token is present, ! it will check the CRD-VRFY-FLG2 field in the POS DATA1 ! token. Since it is spaces it overwrites the CVC2 result ! for a manually entered card formatted by looking at the ! CRD-VRFY-FLG in the PS50 (04) token, which is "M" ! (valid). ! Fix: Modified the interface to set DE 48 SE 87 to a value of ! "P" when CRD-VRFY-FLG2 in the POS DATA1 token is spaces, ! if the tran is not manually entered and the ! RECUR-PMNT-IND in the POS DATA1 token is not set to "R" ! (recurring payment). ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #505500 #REPLACE 06832 PSTM^FRMT^0210^TO^XRESP "N", "0", "P", "O" -> #ADD 06848 PSTM^FRMT^0210^TO^XRESP " " -> begin ! ! We don't want to overwrite the CVC2 result ! already set for a manually entered tran, ! so set to "P" if not a manually entered ! tran and not a Recurring Payment. ! if ( ( not ( pstm.tran. track2.byte[ 0 ] = "M" or pstm.tran. track2.byte[ 0 ] = "m" ) ) or track1^found ) and pos^data1^tkn.recur^pmnt^ind <> "R" then begin movd( sem.addl^data.info.cvc^sub^fld^87. tag^data, "P" ); end; end; #ENDSCN = SW0D397 !#CMP2.28 08/21/09 BNETLIBS6185 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6185 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6185 * ******************************************************************************** #SCN = SW0D409 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6185 #NEWVERSION = 6186 #ADD 0441990O ! 20AUG2009 engelk ! Symptom: DE-38, authorization Id response, was not copied from ! the external response message into the PSTM for UKDM ! referrals. ! Problem: The MasterCard spec indicated that this field was only ! to be included in approved transactions. It even went ! so far as to indicate that MasterCard would strip it ! from other transactions. The new MasterCard spec, dated ! April 2009, now indicates that DE-38 should be included ! in UK Domestic Maestro referrals and that it may even ! be included in declined transactions. ! Fix: Added code to move DE-38 into the PSTM's approval code ! field when that bit is turned on and contains something ! other than blanks or zeroes. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #498965 #ADD 12176 SEM^FRMT^XRESP^TO^PSTM^0210 if auth^id^resp^bit^d and sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * [" "] ] and sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * ["0"] ] then #DELETE 12177 /12178 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0D409 !#CMP2.28 08/25/09 BNETS 60124FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60124 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60124 * ******************************************************************************** #SCN = SW0D412 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m000260E ! 25AUG2009 saderc ! Symptom: The customer is having problems during their ! certification due to DE 2 (PAN) and DE 33 (Forwarding ! Institution ID) being set incorrectly for a 0800 PEK ! Exchange - On Demand request message (NMM = 162). ! Problem: The interface is setting DE 2 and DE 33 to the value ! configured for Institution ID on screen 1 of the ! ICF/ICFE. DE 2 is using the first 5 bytes starting at ! position 2 and DE 33 is using the first 6 bytes starting ! at position 1. Per the Banknet Customer Interface ! Specification (April 10, 2009), DE 2 should be using ! the Member Group ID of the member requesting the working ! key exchange. DE 33 should be using the same value as ! DE 2. ! Fix: Modified the interface to format DE 2 and DE 33 with ! the Group ID (Banknet MCI ID field on the BNIIF screen) ! configured in the BNIIF for the FIID. This logic will ! be added for 0800 PEK Exchange - On Demand request ! messages. ! Proc modified: init^newkey ! Dependency: Apply fixes to BNETLIBS and BNETS. Run Make. ! Reference: Case #506895 ! ! 25AUG2009 saderc ! Symptom: The customer is failing certification because the PIN ! keys are being lost in TSS while processing a 0800 PEK ! Exchange (NMM = 161) if a database error occurs. ! Problem: The interface is sending a key backout request to TSS ! when a key was never successfully translated by TSS. ! Fix: Modified the interface to bypass the processing that ! sends a key backout request to TSS if the call to ! hiswsec^key^translate fails. ! Proc modified: sem^key^chng^rqst ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #506948 #ADD 03920k0Y INIT^NEWKEY string .fiid[ 0:3 ] := [ 4 * [" "] ]; string .group[ 0:5 ] := [ 6 * [" "] ]; #ADD 03920k1Q INIT^NEWKEY fiid ':=' pct.swi^id for sizeof( fiid ); call util^get^bniif( fiid^l, fiid, group, ! logon^acq !, ! logon^iss !, ! logon^cr !, ! logon^db !, ! service^typ !, ! traffic^typ !, ! security! ); if not sem^frmt^nmm^request( sem, nmm^rqst^key^xchng^l, group, ! prefix !, ! service !, ! traffic !, ! avs^typ ! ) then #DELETE 03920k1R INIT^NEWKEY #ADD 06101]0a SEM^KEY^CHNG^RQST end else #DELETE 06101]0b/06101]0c SEM^KEY^CHNG^RQST #ENDSCN = SW0D412 !#CMP2.28 08/25/09 BNETLIBS6186 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6186 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6186 * ******************************************************************************** #SCN = SW0D413 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6186 #NEWVERSION = 6187 #ADD A044190I ! 25AUG2009 saderc ! Symptom: The customer is having problems during their ! certification due to DE 2 (PAN) and DE 33 (Forwarding ! Institution ID) being set incorrectly for a 0800 PEK ! Exchange - On Demand request message (NMM = 162). ! Problem: The interface is setting DE 2 and DE 33 to the value ! configured for Institution ID on screen 1 of the ! ICF/ICFE. DE 2 is using the first 5 bytes starting at ! position 2 and DE 33 is using the first 6 bytes starting ! at position 1. Per the Banknet Customer Interface ! Specification (April 10, 2009), DE 2 should be using ! the Member Group ID of the member requesting the working ! key exchange. DE 33 should be using the same value as ! DE 2. ! Fix: Modified the interface to format DE 2 and DE 33 with ! the Group ID (Banknet MCI ID field on the BNIIF screen) ! configured in the BNIIF for the FIID. This logic will ! be added for 0800 PEK Exchange - On Demand request ! messages. ! Proc modified: sem^frmt^nmm^request ! Dependency: Apply fixes to BNETLIBS and BNETS. Run Make. ! Reference: Case #506895 #ADD 11290v0B SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^rqst^key^xchng^l then begin movl( sem.fwd^inst.cde, group, max^group^lgth^g ); end; #ENDSCN = SW0D413 !#CMP2.28 08/26/09 BNETLIBS6187 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6187 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6187 * ******************************************************************************** #SCN = SW0D414 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6187 #NEWVERSION = 6188 #ADD B044190N ! 26AUG2009 saderc ! Symptom: Reversals for POS transactions that have been alternate ! routed by the interface process are sent to the wrong ! authorizer by BASE24-pos Router Authorization. ! Problem: When the interface process alternate routes a POS ! transaction and the routing has been determined by ! SPROUTE routing, the wrong values are being set for ! the auth^ind2 and rte.auth^ind. This has an impact on ! reversals generated for these transactions. ! Fix: When the interface process is alternate routing a ! transaction the auth^ind2 or rte.auth^ind should be ! changed from "P" to "1" for AST routed transactions, ! from "F" to "f" for transactions that were routed using ! SPROUTE and from "f" to "9" for "No Authorizers ! Available". ! Modified procs: util^pos^alt^routing ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #506933 #REPLACE 22894 UTIL^POS^ALT^ROUTING if pstm.auth^ind2 = "P" and #ADD 22903 UTIL^POS^ALT^ROUTING if pstm.auth^ind2 = "F" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.auth^ind2, "f" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then begin mov^( dest, pstm.rte.alt1 ); end; end else #REPLACE 22904 UTIL^POS^ALT^ROUTING if pstm.auth^ind2 = "1" and #ADD 22913 UTIL^POS^ALT^ROUTING if pstm.auth^ind2 = "f" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin ! ! SPROUTE does not provide second alternate authorizers. ! Set auth indicator to "No Authorizers available". ! movd( pstm.auth^ind2, "9" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then mov^( dest, pstm.rte.alt2 ); end else #REPLACE 22920 UTIL^POS^ALT^ROUTING if pstm.rte.auth^ind = "P" and #ADD 22929 UTIL^POS^ALT^ROUTING if pstm.rte.auth^ind = "F" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.rte.auth^ind, "f" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then begin mov^( dest, pstm.rte.alt1 ); end; end else #REPLACE 22930 UTIL^POS^ALT^ROUTING if pstm.rte.auth^ind = "1" and #ADD 22939 UTIL^POS^ALT^ROUTING if pstm.rte.auth^ind = "f" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin ! ! SPROUTE does not provide second alternate authorizers. ! Set auth indicator to "No Authorizers available". ! movd( pstm.rte.auth^ind, "9" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then begin mov^( dest, pstm.rte.alt2 ); end; end else #ENDSCN = SW0D414 !#CMP2.28 09/03/09 BNETLIBS6188 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6188 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6188 * ******************************************************************************** #SCN = SW0D429 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6188 #NEWVERSION = 6189 #ADD C044190J ! 03SEP2009 wielerk ! Symptom: The interface does not send DE-37 consistently. ! Problem: The POS module sends all 12 bytes of PSTM.SEQ^NUM. ! The ATM module left-justifies, blank-fills DE-37. ! Fix: Modified logic to right-justify, zero-fill the value ! placed in DE-37. ! Modified proc: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS and SW60ABNT.BNETATMS. Run Make. ! Reference: Case #920401. #REPLACE 05657 /05657 OFFSET 0 PSTM^FRMT^0200^TO^XRQST call hiswutil^reformat^ascii^field( pstm.seq^num, $len( pstm.seq^num ), sem.ref^num, $len( sem.ref^num ), true ); #ENDSCN = SW0D429 !#CMP2.28 09/14/09 BNETS 60125FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60125 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60125 * ******************************************************************************** #SCN = SW0D433 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n000260a ! 14SEP2009 wielerk ! Symptom: The interface appears to not process a station up ! message from XPNet. ! Problem: The interface attempts to send an echotest when a ! station is stopped or started. The message failure of ! an echotest is what marks a station down, not the ! receipt of the XPNet message. If there is an existing ! NMM or XNMM timer, the echotest will be suppressed. ! The effect of this causes an operator to see the ! process as idling without processing the station ! commands ! Fix: Modified logic to allow the echotest suppression if ! the station is being stopped, but to delete existing ! NMM or XNMM timers and allow the echotest if the station ! is being marked started. ! Procs modified: init^echotest ! Dependency: Apply fixes to BNETS. Run Make. ! Reference: Case #929180. #ADD 03179R13 SUB^INIT^ECHOTEST begin if pct.station[ sta^x ].up then begin ! ! station is up and being marked down, so if ! an existing timer is found, return ! return false; end; if not pct.station[ sta^x ].up then begin ! ! station is down and being marked up, so if ! an existing timer is found, delete it so this ! action can take place immediately. ! call delete^this^timer( tcb^g, timer ); end; end; #DELETE 03179R14/Y0317900 SUB^INIT^ECHOTEST #ENDSCN = SW0D433 !#CMP2.28 09/17/09 BNETDDLS6035 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6035 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6035 * ******************************************************************************** #SCN = SW0D436 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6035 #NEWVERSION = 6036 #ADD 00262i0N * 16SEP2009 PrasadS * Symptom: Banknet Release 09.2 Mandates. * Problem: None. * Fix: 1. Added new value for DE28 transaction fee. * 2. Modified support for subelements 98, 99 within DE 48 * and also updated comment in subelements 61 and 71 * within DE 48. * 3. Added new token definition pre-pay-swi-tkn-data. * 4. Added new fields tran-fee, e-com-sec-lvl-ind, * avs-result, acct-num-ind, redefined fields * paypass-mapped-pan, paypass-pan, and modified * fields on-behalf in bnet-swi-tkn-data. * Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, * BNETLIBS, BNETS, DDLBATKN and DDLPSTKN. Run Make. * New files: ILB0909M, ILB0909R, ILB0909S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0909M. Run the ILF conversion using ILB0909R. * Replace BNETLOGM, BNETMNWD and BNETUPDT. * Reference: WO #090331-04 #ADD 00941D08 SEM * ! * surcharge transaction fee ! * bit map position = 28 ! * EBCDIC in transmission ! * Credit (C) or Debit (D) indicator followed by ! * Transaction fee in currency of tran-crncy-cde ! * Right justified, zero filled ! * ! 02 tran-fee. 04 ind pic x. 04 amt pic 9(8). #ADD 01157A03 SEM 08 tag-data pic 9(6). #DELETE 01157A04 SEM #ADD 01157A07 SEM 08 tag-data pic 9(6). #DELETE 01157A08 SEM #ADD 01157f0T SEM * 21 - Electronic Commerce Mapping Service #ADD 01157Y06 SEM * E - CVC 3 ATC Replay. * F - Format error. #DELETE 01157R0E/01157R0F SEM #ADD 01157R0H SEM * I - Invalid. #DELETE 01157R0I/01157f0Y SEM #ADD 01157R0K SEM * U - Unable to process. * V - Valid. #DELETE 01157R0L/01157R0N SEM #ADD 01157a0F SEM * Valid values position 3 (on-behalf result 1) for inControl services * are documented in MasterCard's Customer Interface Specification. #DELETE 01157a0G SEM #ADD 01157a0U SEM * 2 = Merchant claims exemption from using an IIAS based on the * IRS 90 percent rule #ADD 01157f0w SEM 04 user-fld pic x(48). #DELETE 01157f0x SEM #ADD 02760h00 SAF-BNET * Switch token version (ver-id) will be "12". #DELETE 02760h01 SAF-BNET #ADD 02760Y03 SAF-BNET 02 on-behalf occurs 10 times. #DELETE 02760Y04 SAF-BNET #ADD 02760Y0B SAF-BNET 02 tran-fee pic x(9). 02 e-com-sec-lvl-ind pic 9(3). 02 avs-result pic x. 02 acct-num-ind pic x. #DELETE 02760Y0C/02760Y0D SAF-BNET #ADD 02760e08 SAF-BNET 02 paypass-mapped-pan redefines vpan pic x(19). 02 paypass-pan redefines vpan pic x(19). #ADD 02760h06 SAF-BNET 02 pin-svc-cde pic 9(2). #ADD 02760D0I SAF-BNET ?PAGE "pre-pay-swi-tkn-data" DEFINITION pre-pay-swi-tkn-data. * The length of the token data 02 lgth type binary 16. * The type of interface adding the Pre-Pay Switch token. * Valid value = "B" (Banknet). 02 intf-typ pic x. * The phone number of the wireless phone for which the * cardholder is purchasing extra service. 02 mobile-phn-num pic x(17). * The name or other identifier of the mobile phone * service provider. 02 mobile-phn-srvc-provider-nam pic x(30). END #ENDSCN = SW0D436 !#CMP2.28 09/17/09 BNETG 6060 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6060 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6060 * ******************************************************************************** #SCN = SW0D437 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6060 #NEWVERSION = 6061 #ADD 00026:0Q ! 16SEP2009 PrasadS ! Symptom: Banknet Release 09.2 Mandate. ! Problem: None. ! Fix: 1. Added new defines atm^inq^no^fee^d and ! sem^fncl^txn^d in section bnet^defines. ! 2. Added new define tran^fee^bit^d in section ! bnet^maps and DE 28 in table sem^bit^map^tbl^g. ! 3. Removed all references to globals curr^conv^acq^g ! and curr^conv^iss^g. ! 4. Added new globals on^behalf^deny^rslt^cdes^g and ! num^on^behalf^tbl^g, and removed ! on^behalf^apprv^rslt^cdes^g in section bnet^globals. ! 5. Removed reference "C08" from define sem^moneysend^d. ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN and DDLPSTKN. Run Make. ! New files: ILB0909M, ILB0909R, ILB0909S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0909M. Run the ILF conversion using ILB0909R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #090331-04 #ADD 00148v06 define atm^inq^no^fee^d( x ) = ( x.tran^cde = "30" and x.rqst.amt^1 = 0F )#; #ADD 00228j01 sem^fncl^txn^d( x ) = ( x.tran^amt <> zeroes for $len( x.tran^amt ) )#, #ADD 00233z07 tag^data = "C07" ) )#; #DELETE 00233z08/00233z0A #DELETE 00445J00/00445J03 #ADD 00448+02 int num^on^behalf^tbl^g := 0; #ADD 00454+0I struct .on^behalf^deny^rslt^cdes^g; begin struct ntwk^id[ 0:49 ]; begin struct svc; begin string byte [0:1]; end; struct rslt; begin string byte [0:19]; end; end; end; #DELETE 00454&01 #ADD 00554 tran^fee^bit^d = pbit^map[1].<11> #, !bit 28 ! #ADD 00963 28, 0, sem^field( tran^fee ), #DELETE 00964 #DELETE 01366J00/01366J03 #ADD 01366+02 int num^on^behalf^tbl^g; #DELETE 01366d06 #ADD 01366+0L struct on^behalf^deny^rslt^cdes^g; begin struct ntwk^id[ 0:49 ]; begin struct svc; begin string byte [0:1]; end; struct rslt; begin string byte [0:19]; end; end; end; #ENDSCN = SW0D437 !#CMP2.28 09/17/09 BNETLIBS6189 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6189 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6189 * ******************************************************************************** #SCN = SW0D438 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6189 #NEWVERSION = 6190 #ADD D044190A ! 16SEP2009 PrasadS ! Symptom: Banknet Release 09.2 Mandate. ! Problem: None. ! Fix: 1. Modified the interface to remove the check on a ! value of "C08" within DE 48 SE 77 for a MoneySend ! transaction. ! 2. Modified the interface to map the value within ! DE 28 to the surcharge Data token or vice versa. ! 3. Modified the interface to support the new value "2" ! in DE 48 SE 42 subfield 1 position 2 and DE 48 SE ! 42 subfield 1 position 1-3 values of "222" and "922" ! for the online checkout service. ! 4. Added support for new value "2" in DE 48 SE 61 ! subfield 3 (IIAS Substantiation Indicator). ! 5. Modified the interface to remove the restriction ! that required a MoneySend transaction to be ! authorized on a back-end host, and to ensure that ! the contents of DE 124 are not modified when a ! response message is returned. ! 6. Modified the interface to remove support for ! currency conversion. ! 7. Modified the interface to process all entries within ! DE 48 SE 71. ! 8. Modified the interface to include the contents of ! DE 48 SE 33, DE 48 SE 42, DE 48 SE 80 and ! DE 48 SE 83 in the generic switch token. ! 9. Modified the interface to set the reversal code in ! the PSTM from DE 60 and DE 39. ! 10.Modified the interface to adjust the TCC, if the ! transaction data suggests that a different TCC would ! be more appropriate. ! 11.Modified the interface to include DE 28 in the ! generic switch token. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^amt^to^pstm^amt ! sem^frmt^unmatchd^xrvsl^to^pstm ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! New Procs: pstm^frmt^fee^to^sem^fee ! sem^frmt^xrvsl^to^pstm^rvsl^cde ! sem^frmt^fee^to^pstm^fee ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN and DDLPSTKN. Run Make. ! New files: ILB0909M, ILB0909R, ILB0909S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0909M. Run the ILF conversion using ILB0909R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #090331-04 #ADD 05498 PSTM^FRMT^0200^TO^XRQST if sem.tran^amt <> [ $len( sem.tran^amt ) * [ "0" ] ] then begin if not pstm^frmt^fee^to^sem^fee( pstm, sem ) then begin return resp^format^error^pos^l ; end; end; #ADD 05708A1P PSTM^FRMT^0200^TO^XRQST move ( sem.tran^crncy^cde, pstm.orig^crncy^cde ); #DELETE 05709 /05712 PSTM^FRMT^0200^TO^XRQST #ADD 06262 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "0" and sem.addl^data.info = "T" then begin !! ! Transaction category code cannot be a T if the ! cardholder was present, default to a R. !! movd( sem.addl^data.info, "R" ); end else if sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "0" and sem.addl^data.info = "R" then begin !! ! Transaction category code cannot be a R if the ! cardholder was not present, default to a T. !! movd( sem.addl^data.info, "T" ); end; #DELETE 06985c00/06985c0S PSTM^FRMT^0210^TO^XRESP #ADD 07194 PSTM^FRMT^0220^TO^XADV tran^fee^bit^d := 0; #ADD 07602 PSTM^FRMT^0420^TO^ACQ^XRVSL call pstm^frmt^fee^to^sem^fee( pstm, sem ); #DELETE 07758 /07784 SUB^CONVERT^AMT #DELETE 07795 /07797 SUB^CONVERT^AMT #DELETE 07801v0D/07801v0J SUB^CONVERT^AMT #ADD 07883 SUB^CONVERT^AMT not pos^inquiry^d( pstm ) and #DELETE 07888 /07898 SUB^CONVERT^AMT #DELETE 07902 /07909 SUB^CONVERT^AMT #ADD 07932 SUB^CONVERT^AMT move ( sem.addl^amt.info.crncy^cde, pstm.orig^crncy^cde ); #DELETE 07933 /07941 SUB^CONVERT^AMT #DELETE 07953 /07955 SUB^CONVERT^AMT #ADD 07976 SUB^CONVERT^AMT if not fixed^ascii^( sem.replace^amts.tran^amt, #DELETE 07977 /07978 SUB^CONVERT^AMT #ADD 07992 SUB^CONVERT^AMT ?section pstm^frmt^fee^to^sem^fee ?page" pstm^frmt^fee^to^sem^fee" !##################################################################### !# # !# PSTM^FRMT^FEE^TO^SEM^FEE # !# # !# NARRATIVE : THIS PROCEDURE FORMATS THE BNET EXTERNAL TRAN FEE # !# (P28) FROM THE PSTM SURCHARGE TOKEN TRANSACTION FEE. # !# # !# INPUT PARAMETERS : # !# PSTM : POINTER TO BASE24 INTERNAL POS MESSAGE # !# # !# OUTPUT PARAMETERS: # !# SEM : POINTER TO VISA EXTERNAL MESSAGE # !# # !# RETURN CODE: # !# TRUE : PROC COMPLETED WITH NO ERRORS # !# FALSE : PROC ENCOUNTERED ERRORS # !# # !##################################################################### int proc pstm^frmt^fee^to^sem^fee( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin int ofst; int pos^userdata; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map); int tkn^lgth; int .tkn^surcharge( surcharge^data^tkn^def ); fixed tmp^tran^fee := 0f; string tkn^id[ 0:1 ]; if base24^rel^g < 5 then begin return true; end; tran^fee^bit^d := 0; movd( tkn^id, surcharge^tkn^id^d ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; if not tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @tkn^surcharge, tkn^lgth, ! tkn^dspy^frmt^flg !, pos^userdata ) then begin if ( pstm.typ = request^d or pstm.typ = force^post^d ) then begin if tkn^surcharge.tran^fee > 0f then begin if not fixed^ascii^( sem.tran^fee.amt, tkn^surcharge.tran^fee ) then begin return false; end; sem.tran^fee.ind ':=' "D"; tran^fee^bit^d := 1; end ! of fee > 0 else if tkn^surcharge.tran^fee < 0f then begin tmp^tran^fee := -1f * tkn^surcharge.tran^fee; if not fixed^ascii^( sem.tran^fee.amt, tmp^tran^fee ) then begin return false; end; sem.tran^fee.ind ':=' "C"; tran^fee^bit^d := 1; end; ! of fee > 0 end ! of request or completion else if pstm.typ = reversal^d then begin if tkn^surcharge.orig^fee > 0f and tkn^surcharge.tran^fee > 0f then begin ! ! Set surcharge amount. ! if not fixed^ascii^( sem.tran^fee.amt, tkn^surcharge.tran^fee ) then begin return false; end; sem.tran^fee.ind ':=' "D"; tran^fee^bit^d := 1; end ! of orig > 0 and fee > 0 else if tkn^surcharge.orig^fee < 0f and tkn^surcharge.tran^fee < 0f then begin tmp^tran^fee := -1f * tkn^surcharge.tran^fee; if not fixed^ascii^( sem.tran^fee.amt, tmp^tran^fee ) then begin return false; end; sem.tran^fee.ind ':=' "C"; tran^fee^bit^d := 1; end; ! of fee > 0 end; ! of reversal end; ! of tkn^get^info return true; end; ! end of pstm^frmt^fee^to^sem^fee! #DELETE 08301c00/08301c0B PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08325 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 65, #DELETE 08326 PSTM^FRMT^SEM^ADDL^DATA #ADD 08332 PSTM^FRMT^SEM^ADDL^DATA int e^com^addl^data^tkn^found := false; #ADD 08375 PSTM^FRMT^SEM^ADDL^DATA "4722" , "4783" , "X" , "4784" , "4784" , "T" , "4785" , "4789" , "X" , #DELETE 08376 PSTM^FRMT^SEM^ADDL^DATA #ADD 08407 PSTM^FRMT^SEM^ADDL^DATA "6535" , "6535" , "T" , #ADD 08438 PSTM^FRMT^SEM^ADDL^DATA "9405" , "9405" , "T" , #DELETE 08566 /08573 PSTM^FRMT^SEM^ADDL^DATA #ADD 08687c13 PSTM^FRMT^SEM^ADDL^DATA auto^substan^data^tkn.iias^ind = "2" or #ADD 08687v03 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' e^com^addl^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @e^com^addl^data^tkn, e^com^addl^data^tkn^lgth ) then begin e^com^addl^data^tkn^found := true; end; #ADD 08687v0C PSTM^FRMT^SEM^ADDL^DATA if e^com^addl^data^tkn^found and e^com^addl^data^tkn.scheme^merch^id <> [ $len( e^com^addl^data^tkn. scheme^merch^id ) * [ " " ] ] then #DELETE 08687v0D/08687v0I PSTM^FRMT^SEM^ADDL^DATA #ADD 09010 PSTM^FRMT^SEM^ADDL^DATA if e^com^addl^data^tkn^found and e^com^addl^data^tkn.crdhldr^authn^ind <> " " and e^com^addl^data^tkn.crdhldr^authn^ind <> "0" then begin move( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth, e^com^addl^data^tkn.crdhldr^authn^ind ); end; #DELETE 10023 /10047 SUB^CONVERT^AMT #ADD 10070c0K SUB^CONVERT^AMT return false; #DELETE 10070c0L/10070c14 SUB^CONVERT^AMT #ADD 10070c18 SUB^CONVERT^AMT call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^1 ); #DELETE 10070c19/10070c1J SUB^CONVERT^AMT #ADD 10169 SUB^CONVERT^AMT bnet^amt^typ^cb^d and sem.addl^amt.info[ i ].crncy^cde = pstm.orig^crncy^cde for $len( pstm.orig^crncy^cde ) then #DELETE 10170 SUB^CONVERT^AMT #DELETE 10178 /10188 SUB^CONVERT^AMT #ADD 10217A02 SUB^CONVERT^AMT if ( sem.addl^amt.info[ i ].amt^typ = bnet^amt^fsa^eligbl^d or sem.addl^amt.info[ i ].amt^typ = bnet^amt^rx^d ) and sem.addl^amt.info[ i ].crncy^cde = pstm.orig^crncy^cde for $len( pstm.orig^crncy^cde ) then #DELETE 10217A03/10217A05 SUB^CONVERT^AMT #ADD 10381 SUB^CONVERT^AMT if sem.addl^amt.info[ i ].amt^typ = "80" and sem.addl^amt.info[ i ].crncy^cde = sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10382 SUB^CONVERT^AMT #ADD 10510 SUB^CONVERT^AMT if sem.addl^amt.info[ i ].amt^typ = "57" and sem.addl^amt.info[ i ].crncy^cde = sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10511 SUB^CONVERT^AMT #ADD 10547w02 SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10547w03/10547w04 SUB^CONVERT^AMT #ADD 10570w02 SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) and #DELETE 10570w03/10570w04 SUB^CONVERT^AMT #DELETE 10592w00/10592w14 SUB^CONVERT^AMT #ADD 10599#0X SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10599#0Y/10599#0Z SUB^CONVERT^AMT #ADD 10599#0x SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10599#0y/10599#0z SUB^CONVERT^AMT #ADD 10599#1Y SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10599#1Z/10599#1a SUB^CONVERT^AMT #ADD 10599#1x SUB^CONVERT^AMT sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then #DELETE 10599#1y/10599#1z SUB^CONVERT^AMT #DELETE 10613 /10666 SUB^CONVERT^AMT #ADD 10682 SUB^CONVERT^AMT if sem.iss^crncy^cde <> pct.crncy.in^cde for $len( pct.crncy.in^cde ) then begin if sppt^multi^crncy^g then begin ! ! System supports Multi-Currency, So BASE24 can ! accept the DE-95 Bill-amt. ! call ascii^fixed^( sem.replace^amts.crd^iss^amt, pstm.tran.amt^2 ); end else if sem.iss^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) and sem.replace^amts.setl^amt <> zeroes for $len( sem.replace^amts.setl^amt ) then begin call ascii^fixed^( sem.replace^amts.setl^amt, pstm.tran.amt^2 ); end else if sem.tran^crncy^cde = pct.crncy.in^cde for $len( pct.crncy.in^cde ) and sem.replace^amts.tran^amt <> zeroes for $len( sem.replace^amts.tran^amt ) then begin call ascii^fixed^( sem.replace^amts.tran^amt, pstm.tran.amt^2 ); end else begin return false; end; end else begin call ascii^fixed^( sem.replace^amts.crd^iss^amt, pstm.tran.amt^2 ); end; ! of else #DELETE 10683 /10760 SUB^CONVERT^AMT #DELETE 10793 /10870 SUB^CONVERT^AMT #ADD 11085 SEM^FRMT^DATA^TO^PSTM^TRACK2 ?section sem^frmt^fee^to^pstm^fee ?page "sem^frmt^fee^to^pstm^fee" !##################################################################### !# # !# sem^frmt^fee^to^pstm^fee # !# # !# This procedure formats the pos surcharge token transaction fee # !# from the BNET external tran fee. # !# # !# INPUT PARAMETERS: # !# sem - Pointer to visa external message. # !# # !# OUTPUT PARAMETERS: # !# pstm - Pointer to base24 internal pos message. # !# # !# RETURN: # !# true - Completed with no errors. # !# false - Not completed, errors encountered. # !# # !##################################################################### int proc sem^frmt^fee^to^pstm^fee( sem, pstm ); int .sem( sem^def ); int .pstm( pstm^def ); begin int add^flg, iss^scale, ofst, pos^userdata, .pbit^map := wordaddr( @sem.pbit^map ), .sbit^map := wordaddr( @sem.sbit^map ), tkn^lgth, .tkn^surcharge( surcharge^data^tkn^def ), updt^flg; fixed temp^orig^fee := 0f, temp^tran^fee := 0f; fixed(0) iss^conv^rate; string tkn^id[0:1]; if base24^rel^g < 5 then begin return true; end; if tran^fee^bit^d then begin if not ascii^fixed^( sem.tran^fee.amt, temp^tran^fee ) then begin return false; end; if sem.tran^fee.ind = "C" then begin temp^tran^fee := -1f * temp^tran^fee; end; end else begin return true; end; if sem.iss^crncy^cde <> sem.tran^crncy^cde for $len( sem.iss^crncy^cde ) then begin ! ! currency conversion ! if not ascii^fixed( sem.conv^rate^crd^iss.byte[ 1 ], 7, iss^conv^rate ) then begin return false; end; if not ascii^integer( sem.conv^rate^crd^iss, 1, iss^scale ) then begin return false; end; case iss^scale of begin !0! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ); !1! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 10f; !2! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 100f; !3! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 1000f; !4! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 10000f; !5! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 100000f; !6! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 1000000f; !7! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 10000000f; !8! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 100000000f; !9! temp^tran^fee := ( temp^tran^fee * iss^conv^rate ) / 1000000000f; !?! otherwise begin return false; end; end; ! of case end; ! of sem.iss^crncy^cde if sem.typ = sem^auth^request^d then ! 0100 ! begin if temp^tran^fee <> 0f then begin add^flg := 1; updt^flg := 1; if not hiswtkn^updt^surcharge^tkn( pstm, add^flg, updt^flg, temp^tran^fee, temp^tran^fee, base24^rel^g ) then begin return false; end; end; end else if sem.typ = sem^auth^advice^d or sem.typ = sem^acq^rvsl^rqst^d or sem.typ = sem^rvsl^adv^d then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; movd( tkn^id, surcharge^tkn^id^d ); if not tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @tkn^surcharge, tkn^lgth, ! tkn^dspy^frmt^flg !, pos^userdata ) then begin temp^orig^fee := tkn^surcharge.tran^fee; end; if temp^tran^fee <> 0f then begin add^flg := 1; updt^flg := 1; if not hiswtkn^updt^surcharge^tkn( pstm, add^flg, updt^flg, temp^tran^fee, temp^orig^fee, base24^rel^g ) then begin return false; end; end; end; ! of sem^advice or reversal return true; end; ! end of sem^frmt^fee^to^pstm^fee #ADD 11772 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM call sem^frmt^xrvsl^to^pstm^rvsl^cde( rvsl, pstm ); #DELETE 11773 /11804 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ADD 13878c02 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. iias^ind = "2" or #DELETE 13941c0N/13941c0X SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14589 SEM^FRMT^XRQST^TO^PSTM^0200 if not sem^frmt^fee^to^pstm^fee( sem, pstm ) then begin return resp^format^error^sem^l; end; #ADD 14771v02 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "222" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "922" or #ADD 14800 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add the F1 E-Commerce Additional Data Token ! The ps51^tkn^id^d in tkn^id gets overlayed so ! it is restored below. ! tkn^id ':=' e^com^addl^data^tkn^id^d; e^com^addl^data^tkn ':=' blanks for $len( e^com^addl^data^tkn ); if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec[ 1 ] = "10" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec[ 1 ] = "11" then begin e^com^addl^data^tkn.crdhldr^authn^ind ':=' "0"; end else begin e^com^addl^data^tkn.crdhldr^authn^ind ':=' sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth for $len( sem. addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth ); end; #DELETE 14800v06/14800v0D SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 14800v0L/14800v18 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14800v1A SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $offset( e^com^addl^data^tkn. user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, e^com^addl^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3257, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3261, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result tkn^id ':=' ps51^tkn^id^d; #ADD 14806 SEM^FRMT^XRQST^TO^PSTM^0200 idx := -1; while ( idx := idx + 1 ) < $occurs( sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data ) do begin if sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "05" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "21" then begin if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "U" then begin ! ! Not validated due to erroneous data. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "0" ); end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "V" then begin ! ! Passed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "2" ); end else begin ! ! Failed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "1" ); end; end else if sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "02" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "15" then begin case sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 of begin "A", "E", "F", "G", "I", "N", "T" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "U" -> begin ! ! CVD not processed ! movd( card^vrfy^flg, "L" ); end; "V" -> begin ! ! CVD match ! movd( card^vrfy^flg, "Y" ); end; otherwise -> begin ! ! Do nothing ! end; end; ! of case sem.addl^data.info... call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, ofst, false, tkn^lgth, pstm.data^flag, ! err^flg !, ! rte^grp !, card^vrfy^flg ); end; ! of tag^data.rslt^1 = "02" or "15" end; #DELETE 14807 /14838v0q SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15655 SEM^FRMT^XRVSL^TO^PSTM^0420 call sem^frmt^fee^to^pstm^fee( rvsl, pstm ); call sem^frmt^xrvsl^to^pstm^rvsl^cde( rvsl, pstm ); #DELETE 15656 /15687 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15795 SEM^FRMT^XRVSL^TO^PSTM^0420 ?section sem^frmt^xrvsl^to^pstm^rvsl^cde ?page" sem^frmt^xrvsl^to^pstm^rvsl^cde " !##################################################################### !# # !# sem^frmt^xrvsl^to^pstm^rvsl^cde # !# # !# This procedure formats a BASE24-pos reversal code from a # !# Banknet reversal message. # !# # !# INPUT PARAMETERS: # !# rvsl - pointer to a Banknet external reversal # !# # !# OUTPUT PARAMETERS: # !# pstm - pointer to a BASE24-pos reversal # !# # !##################################################################### proc sem^frmt^xrvsl^to^pstm^rvsl^cde( rvsl, pstm ); int .rvsl( sem^def ); int .pstm( pstm^def ); begin int .pbit^map := wordaddr( @rvsl.pbit^map ), .sbit^map := wordaddr( @rvsl.sbit^map ); if advice^cde^bit^d then begin ! ! Map the pstm.rvsl^cde from the value in bit 60 ! if ( rvsl.advice^cde.reason^cde = "400" ) or ( rvsl.advice^cde.reason^cde = "401" ) then begin movd( pstm.rvsl^cde, rvsl^auth^not^avail^d ); end else if ( rvsl.advice^cde.reason^cde = "402" ) then begin movd( pstm.rvsl^cde, rvsl^timeout^d ); end else begin movd( pstm.rvsl^cde, rvsl^sys^err^d ); end; end else ! ! Bit 60 not present ! if resp^cde^bit^d and rvsl.resp^cde = "17" then begin movd( pstm.rvsl^cde, rvsl^customer^cancel^d ); end else if resp^cde^bit^d and rvsl.resp^cde = "68" then begin movd( pstm.rvsl^cde, rvsl^timeout^d ); end else begin movd( pstm.rvsl^cde, rvsl^sys^err^d ); end; end; #ADD 17622N1X UTIL^COLLAPSE^SEM ! ! Move Subfield 4-Product Code ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. prod^cde.tag = "04" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. prod^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. prod^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! #DELETE 18783N0p/18783N18 UTIL^EXPAND^SEM #ADD 18783N1Q UTIL^EXPAND^SEM ! ! Move Subfield 4-Product Code ! if sub^ptr = "04" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. prod^cde.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; #ADD 24997:00 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "12"; #DELETE 24997:01 UTIL^SWI^TKN^INIT #ADD 25040 UTIL^SWI^TKN^INIT if cnt > 10 then #DELETE 25041 UTIL^SWI^TKN^INIT #ADD 25042 UTIL^SWI^TKN^INIT cnt := 10; end; ! of if cnt > 10 #DELETE 25043 /25044 UTIL^SWI^TKN^INIT #ADD 25132 UTIL^SWI^TKN^INIT move( bnet^tkn^buf.acct^num^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data ); #ADD 25134 UTIL^SWI^TKN^INIT if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin move( bnet^tkn^buf.e^com^sec^lvl^ind, sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec ); end; if sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" then begin move( bnet^tkn^buf.pin^svc^cde, sem.addl^data.info.pin^svc^cde^sub^fld^80.cde ); end; if sem.addl^data.info.avs^resp.tag = "83" then begin move( bnet^tkn^buf.avs^result, sem.addl^data.info.avs^resp.result ); end; #ADD 25134c0F UTIL^SWI^TKN^INIT if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = "32" then begin move( bnet^tkn^buf.mc^asgn^id^sub^fld^32, sem.addl^data.info.mc^asgn^id^sub^fld^32. tag^data ); end; #ADD 25136 UTIL^SWI^TKN^INIT if tran^fee^bit^d then begin move( bnet^tkn^buf.tran^fee, sem.tran^fee ); end else begin mov^( bnet^tkn^buf.tran^fee, blanks ); end; #DELETE 25136c00/25136c06 UTIL^SWI^TKN^INIT #ADD 25186 UTIL^SWI^TKN^UPDT int i; #ADD 25338 UTIL^SWI^TKN^UPDT i := -1; while ( i := i + 1 ) < $occurs( bnet^tkn^buf.on^behalf ) do begin if ( bnet^tkn^buf.on^behalf[ i ].svc <> blanks for $len( bnet^tkn^buf.on^behalf[ i ].svc ) ) then begin move( bnet^tkn.on^behalf[ i ].svc, bnet^tkn^buf.on^behalf[ i ].svc ); end; if ( bnet^tkn^buf.on^behalf[ i ].rslt^1 <> blanks for $len( bnet^tkn^buf.on^behalf[ i ].rslt^1 ) ) then begin move( bnet^tkn.on^behalf[ i ].rslt^1, bnet^tkn^buf.on^behalf[ i ].rslt^1 ); end; end; #DELETE 25339 /25371 UTIL^SWI^TKN^UPDT #ADD 25387 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.tran^fee <> [ $len( bnet^tkn^buf.tran^fee ) * [ " " ] ] then begin move( bnet^tkn.tran^fee, bnet^tkn^buf.tran^fee ); end; #ADD 25404:0B UTIL^SWI^TKN^UPDT if bnet^tkn^buf.acct^num^ind <> blanks for $len( bnet^tkn^buf.acct^num^ind ) then begin movl( bnet^tkn.acct^num^ind, bnet^tkn^buf.acct^num^ind, $len( bnet^tkn.acct^num^ind ) ); end; if bnet^tkn^buf.e^com^sec^lvl^ind <> blanks for $len( bnet^tkn^buf.e^com^sec^lvl^ind ) then begin movl( bnet^tkn.e^com^sec^lvl^ind, bnet^tkn^buf.e^com^sec^lvl^ind, $len( bnet^tkn.e^com^sec^lvl^ind ) ); end; ! of if bnet^tkn^buf.e^com^sec^lvl^ind if bnet^tkn^buf.pin^svc^cde <> blanks for $len( bnet^tkn^buf.pin^svc^cde ) then begin movl( bnet^tkn.pin^svc^cde, bnet^tkn^buf.pin^svc^cde, $len( bnet^tkn.pin^svc^cde ) ); end; ! of if bnet^tkn^buf.pin^svc^cde if bnet^tkn^buf.avs^result <> blanks for $len( bnet^tkn^buf.avs^result ) then begin movl( bnet^tkn.avs^result, bnet^tkn^buf.avs^result, $len( bnet^tkn.avs^result ) ); end; ! of if bnet^tkn^buf.avs^result #ENDSCN = SW0D438 !#CMP2.28 09/17/09 BNETS 60126FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60126 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60126 * ******************************************************************************** #SCN = SW0D439 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o000260J ! 16SEP2009 PrasadS ! Symptom: Banknet Release 09.2 Mandate. ! Problem: None. ! Fix: 1. Modified the interface to support reversal for ! Balance Inquiry. ! 2. Modified the interface to remove the restriction ! that required a MoneySend transaction to be ! authorized on a back-end host. ! 3. Modified the interface to remove the support ! for LCONF parameters CURRENCY-CONVERSION-ACQ and ! CURRENCY-CONVERSION-ISS. ! 4. Modified the interface to add support for new ! LCONF parameters ON-BEHALF-DENY-RSLT-CDESxx (where ! xx are up to 50 numbers), and removed support for ! LCONF parameters ON-BEHALF-APPRV-RSLT-CDES. Also ! modified the interface to process all content of ! DE 48 SE 71. ! Procs Modified: bnet^sem^xresp^failed ! cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^paramproc ! pstm^0210^response ! sem^request ! sem^reversal^advice ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN and DDLPSTKN. Run Make. ! New files: ILB0909M, ILB0909R, ILB0909S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0909M. Run the ILF conversion using ILB0909R. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #090331-04 #ADD G0088104 BNET^SEM^XRESP^FAILED atm^inq^no^fee^d( stm ) or #DELETE G0088105 BNET^SEM^XRESP^FAILED #DELETE 02599a01/02599a02 CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599]0B CMD^WARMBOOT^STORE^GLOBALS #ADD h025990K CMD^WARMBOOT^STORE^GLOBALS store^d( num^on^behalf^tbl^g ); for i := 0 to $occurs( temp.on^behalf^deny^rslt^cdes^g.ntwk^id ) do begin move( temp.on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc, on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc ); move( temp.on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt, on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt ); on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc ) * [ " " ] ]; on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt ) * [ " " ] ]; end; #DELETE 02599a04/02599a07 CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599]0H CMD^WARMBOOT^STORE^GLOBALS #DELETE 02599]0K CMD^WARMBOOT^RETRIEVE^GLOBALS #DELETE 02599a08/02599a0B CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD h025990d CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^d( num^on^behalf^tbl^g ); for i := 0 to $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ) do begin move( on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc , temp.on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].svc ); move( on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt, temp.on^behalf^deny^rslt^cdes^g.ntwk^id[ i ].rslt); temp.on^behalf^deny^rslt^cdes^g.ntwk^id[i].svc ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[i].svc ) * [ " " ] ]; temp.on^behalf^deny^rslt^cdes^g.ntwk^id[i].rslt ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[i].rslt ) * [ " " ] ]; end; #ADD 03941]00 INIT^PARAMPROC wlform( num^cde^excd, "More than 20 result codes defined for param " ',' "\\\\\\\\\\\\\\\\\\\\\\\\\\. This param will" ',' " not be processed." ) wlform( num^cde^allw, "Service identifier is not numeric for param " ',' "\\\\\\\\\\\\\\\\\\\\\\\\\\. This param will" ',' " not be processed." ) #DELETE 03941]01/03941]03 INIT^PARAMPROC #ADD h0394106 INIT^PARAMPROC wlform( no^bids, "No ON-BEHALF-DENY-RSLT-CDES LCONF params found" ) wlform( too^mnyb, "Too many ON-BEHALF-DENY-RSLT-CDES LCONF params found" ) #DELETE 03945j0J/03945j0K INIT^PARAMPROC #DELETE 03945]04 INIT^PARAMPROC #ADD h0397301 INIT^PARAMPROC int k; #ADD 03975 INIT^PARAMPROC string .on^behalf^lconf^param^name[ 0:25 ] := [ 26 * [ " " ] ]; #DELETE 03996j43/03996p00 INIT^PARAMPROC #DELETE 03996]0k/03996400 INIT^PARAMPROC #ADD h0406901 INIT^PARAMPROC ! ON-BEHALF-DENY-RSLT-CDES for j := 0 to ( $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ) - 1 ) do begin on^behalf^deny^rslt^cdes^g.ntwk^id[ j ].svc ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[ j ].svc ) * [ " " ] ]; on^behalf^deny^rslt^cdes^g.ntwk^id[ j ].rslt ':=' [ $len( on^behalf^deny^rslt^cdes^g.ntwk^id[ j ].rslt ) * [ " " ] ]; end; lgth := $len( on^behalf^deny^rslt^cdes^g.ntwk^id.svc ) + $len( on^behalf^deny^rslt^cdes^g.ntwk^id.rslt); movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); movd( lconf^key.item^typ, "P" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "ON-BEHALF-DENY-RSLT-CDES" ); ! ! generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; j := -1; k := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin on^behalf^lconf^param^name ':=' lconf.prikey.item^name for $occurs ( on^behalf^lconf^param^name ); j := j + 1; if j < $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ) then begin if not all^numeric( lconf.param^msg.ptxt, 2 ) then begin call log^message^( 4070, ! routing code !, @num^cde^allw, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); end else begin if lconf.param^msg.plgth > lgth then begin call log^message^( 4071, ! routing code !, @num^cde^excd, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); end else begin movl( on^behalf^deny^rslt^cdes^g.ntwk^id[ k ], lconf.param^msg.ptxt, lconf.param^msg.plgth ); k := k + 1; end; end; end; ! if j < $occurs( on^behalf^deny^rslt^cdes^g ) end; if j <= 0 then begin ! ! No LCONF params found when process name is specified ! Look for generic LCONF params ! movd( lconf^key.user^fld1, " " ); init( lconf^key.pro^name, "*", $len( lconf^key.pro^name ) ); movd( lconf^key.item^typ, "P" ); init( lconf^key.item^name, " ", $len( lconf^key.item^name ) ); movd( lconf^key.item^name, "ON-BEHALF-DENY-RSLT-CDES" ); if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 18 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; ! keyposition error j := -1; k := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin on^behalf^lconf^param^name ':=' lconf.prikey.item^name for $occurs ( on^behalf^lconf^param^name ); j := j + 1; if j < $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ) then begin if not all^numeric( lconf.param^msg.ptxt, 2 ) then begin call log^message^( 4080, ! routing code !, @num^cde^allw, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); end else begin if lconf.param^msg.plgth > lgth then begin call log^message^( 4081, ! routing code !, @num^cde^excd, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); end else begin movl( on^behalf^deny^rslt^cdes^g.ntwk^id[ k ], lconf.param^msg.ptxt, lconf.param^msg.plgth ); k := k + 1; end; end; end; ! if j < $occurs( on^behalf^deny^rslt^cdes^g ) end; ! while end; ! no process specific LCONF params located if j >= $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ) then begin call log^message^( 4060, !routing code!, @too^mnyb, net.myname, evt^msg^severity^err^l ); num^on^behalf^tbl^g := $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ); end else begin num^on^behalf^tbl^g := j + 1; end; if deny^failed^on^behalf^g and num^on^behalf^tbl^g = 0 then begin call log^message^( 4061, !routing code!, @no^bids, net.myname, evt^msg^severity^err^l ); end else begin call quicksort( on^behalf^deny^rslt^cdes^g, num^on^behalf^tbl^g, lgth, id^swap^area, util^compare^var ); end; #DELETE O0495400/O049540E PSTM^0210^RESPONSE #ADD D0659604 SEM^REQUEST int i := 0; #ADD 06612]0J SEM^REQUEST if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag = "71" then begin for i := 0 to ( $occurs( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data ) - 1 ) do begin max^num^cdes := $occurs( on^behalf^deny^rslt^cdes^g.ntwk^id ); idx := -1; while ( idx := idx + 1 ) < max^num^cdes and ( on^behalf^deny^rslt^cdes^g. ntwk^id[ idx ].svc <> sem.addl^data. info.on^behalf^svc^sub^fld^71. tag^data[ i ].svc for $len( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].svc ) ) and on^behalf^deny^rslt^cdes^g.ntwk^id[ idx ]. svc <> " " do; idx2 := -1; while ( idx2 := idx2 +1 ) < ( idx2 + 20 ) and $alpha( on^behalf^deny^rslt^cdes^g. ntwk^id[ idx ].rslt.byte[ idx2 ] ) and on^behalf^deny^rslt^cdes^g. ntwk^id[ idx ].rslt.byte[ idx2 ] <> sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 and on^behalf^deny^rslt^cdes^g.ntwk^id[ idx ]. rslt.byte[ idx2 ] <> " " do; if on^behalf^deny^rslt^cdes^g.ntwk^id[ idx ]. rslt.byte[ idx2 ] <> " " and on^behalf^deny^rslt^cdes^g.ntwk^id[ idx ]. rslt.byte[ idx2 ] = sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 then begin if frwd^dcln^advc^g then begin send^on^behalf^dcln^advc^g := true; end else begin call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^system^error^l ); return; end; end; end; end; #DELETE 06612]0K/D066122T SEM^REQUEST #ADD 07253700 SEM^REVERSAL^ADVICE if rvsl.proc^cde = sem^hlthcr^d then #DELETE 07253701/07253702 SEM^REVERSAL^ADVICE #ENDSCN = SW0D439 !#CMP2.28 09/22/09 BNETS 60127FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60127 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60127 * ******************************************************************************** #SCN = SW0D446 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p000260W ! 22SEP2009 saderc ! Symptom: The interface is responding to a duplicate 0420 reversal ! advice with an approved response code. ! Problem: The interface is incorrectly setting the response code ! to "00" (approved) in the external response message for ! a duplicate 0420 reversal advice. The response code ! should be set to "94" (duplicate transmission detected) ! in this case. ! Fix: Modified the interface to set the response code to "94" ! in the 0430 response message, if a duplicate 0420 ! reversal advice is sent from Banknet. Removed the logic ! that prevents healthcare transactions from being ! reversed. Added a check to bypass the logic that will ! format an internal message and send it to the router ! authorization process, if a record is not found in the ! ILF and the tran^amt is zero. Also, moved the logic that ! returns a response message to Banknet to the end of the ! procedure. ! Procs modified: sem^reversal^advice ! sem^reversal^advice^pos ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1008927 #DELETE 07253T02/07253705 SEM^REVERSAL^ADVICE #ADD G072560K SEM^REVERSAL^ADVICE if ilf^found and poss^dup^d( sem ) then begin ack.resp^cde ':=' resp^dup^detect^d; end ! if duplicate is found else #ADD G072560t SEM^REVERSAL^ADVICE if util^^collapse( ack, csem, extlgth ) then begin call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam ); end; #ADD G072563h SUB^PROCESS^UNMATCHD^POS^RVSL if rvsl.tran^amt = [ $len( rvsl.tran^amt ) * ["0"] ] then begin return false; end; #ENDSCN = SW0D446 !#CMP2.28 09/22/09 BNETLIBS6190 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6190 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6190 * ******************************************************************************** #SCN = SW0D447 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6190 #NEWVERSION = 6191 #ADD E044190x ! 23SEP2009 wielerk ! Symptom: Interface is not adding the Original Currency Token ! ( BE ) to issuer requests. ! Problem: The interface was using incorrect logic to determine ! when to add the BE token. ! Fix: Modified the logic used to add the Original Currency ! Token to issuer requests. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETLIBS and SW60ABNT.BNETATMS. Run Make. ! Reference: Case #1008932. #ADD 15407 SEM^FRMT^XRQST^TO^PSTM^0200 tran^crncy^cde^bit^d and iss^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.iss^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.iss^crncy^cde ) ) then #DELETE 15408 /15409 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0D447 !#CMP2.28 09/23/09 BNETLIBS6191 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6191 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6191 * ******************************************************************************** #SCN = SW0D451 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6191 #NEWVERSION = 6192 #ADD F044190B ! 24SEP2009 wielerk ! Symptom: Interface returns response code that can cause ! Mastercard to stand-in. ! Problem: A back-end Host denied a transaction with a response ! code of "30" which was translated to "069" internally. ! The interface maps this value to "96" which is a value ! that allows Mastercard to stand-in and approve. ! Fix: Modified the response code table to return an external ! value of "57" for an internal value of "069". ! Procs Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1007611. #REPLACE 08129 PSTM^FRMT^RESP^CDE^TO^SEM "069",! Message Edit Error ! "57",! Tran not supp/permit ! #ENDSCN = SW0D451 !#CMP2.28 09/30/09 BNETG 6061 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6061 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6061 * ******************************************************************************** #SCN = SW0D456 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6061 #NEWVERSION = 6062 #ADD 00026;0L ! 28SEP2009 engelk ! Symptom: Interface abends if DENY-FAILED-ON-BEHALF LCONF PARAM is ! set to "N". ! Problem: 1) If the DENY-FAILED-ON-BEHALF LCONF PARAM is set to ! "N", there is no reason to have any ! ON-BEHALF-DENY-RSLT-CDESxx LCONF PARAMs. However, ! the interface made no check on the number of codes ! read by the interface prior to attempting to sort ! them, except to put out an error message if the ! DENY-FAILED-ON-BEHALF LCONF PARAM was set to "Y", ! but no ON-BEHALF-DENY-RSLT-CDESxx were specified. ! Therefore, the interface attempted to sort an empty ! list of codes. ! 2) The global structure for on-behalf deny result codes ! did not make sense. Network Ids have nothing to do ! with on-behalf results codes. ! 3) When LCONF MAESTRO-NETWORK-IDxx, ! PREPAID-NETWORK-IDxx and ON-BEHALF-DENY-RSLT-CDExx ! PARAMS were stored and retrieved on warmboot, the ! loop moved one more occurrence than existed. ! 4) If an ON-BEHALF-DENY-RSLT-CDExx LCONF PARAM ! a) did not contain a valid service code ! or ! b) contained too many on-behalf results codes ! it was still counted in the number of table entries ! loaded, although it was excluded from the table. ! 5) MAESTRO-NETWORK-IDs and PREPAID-NETWORK-IDs were ! not processed properly when a single param was ! configured. ! Fix: 1) Removed the sort of the ON-BEHALF-DENY-RSLT-CDESxx ! codes. The sort was needed only if a binary search ! of the table was subsequently done, but it is not. ! 2) Renamed on^behalf^deny^rslt^cde^g global structure ! on^behalf^g and eliminated the reference to network ! ids. ! 3) Changed the LCONF param store and retrieve code to ! move data only for the number of occurrences for ! MAESTRO and PREPAID network IDs, as well as ! on-behalf service/result code combinations. ! 4) Excluded ON-BEHALF-DENY-RSLT-CDExx LCONF PARAM ! values from count of valid table entries loaded if ! they do not include a valid service code or if ! too many on-behalf results codes are specified. ! 5) Modified the check of the parameter counter for the ! MAESTRO-NETWORK-IDs and PREPAID-NETWORK-ID LCONF ! params so that single parameter presence was handled ! appropriately. ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #1010987 #REPLACE 00454;01 struct .on^behalf^g; #REPLACE 00454;03 struct deny[ 0:49 ]; #REPLACE 01366;09 struct on^behalf^g; #REPLACE 01366;0B struct deny[ 0:49 ]; #ENDSCN = SW0D456 !#CMP2.28 10/02/09 BNETS 60128FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60128 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60128 * ******************************************************************************** #SCN = SW0D459 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q000260N ! 28SEP2009 engelk ! Symptom: Interface abends if DENY-FAILED-ON-BEHALF LCONF PARAM is ! set to "N". ! Problem: 1) If the DENY-FAILED-ON-BEHALF LCONF PARAM is set to ! "N", there is no reason to have any ! ON-BEHALF-DENY-RSLT-CDESxx LCONF PARAMs. However, ! the interface made no check on the number of codes ! read by the interface prior to attempting to sort ! them, except to put out an error message if the ! DENY-FAILED-ON-BEHALF LCONF PARAM was set to "Y", ! but no ON-BEHALF-DENY-RSLT-CDESxx were specified. ! Therefore, the interface attempted to sort an empty ! list of codes. ! 2) The global structure for on-behalf deny result codes ! did not make sense. Network Ids have nothing to do ! with on-behalf results codes. ! 3) When LCONF MAESTRO-NETWORK-IDxx, ! PREPAID-NETWORK-IDxx and ON-BEHALF-DENY-RSLT-CDExx ! PARAMS were stored and retrieved on warmboot, the ! loop moved one more occurrence than existed. ! 4) If an ON-BEHALF-DENY-RSLT-CDExx LCONF PARAM ! a) did not contain a valid service code ! or ! b) contained too many on-behalf results codes ! it was still counted in the number of table entries ! loaded, although it was excluded from the table. ! 5) MAESTRO-NETWORK-IDs and PREPAID-NETWORK-IDs were ! not processed properly when a single param was ! configured. ! Fix: 1) Removed the sort of the ON-BEHALF-DENY-RSLT-CDESxx ! codes. The sort was needed only if a binary search ! of the table was subsequently done, but it is not. ! 2) Modified the on-behalf results codes global ! structure to eliminate the reference to network ids. ! 3) Changed the LCONF param store and retrieve code to ! move data only for the number of occurrences for ! MAESTRO and PREPAID network IDs, as well as ! on-behalf service/result code combinations. ! 4) Excluded ON-BEHALF-DENY-RSLT-CDExx LCONF PARAM ! values from count of valid table entries loaded if ! they do not include a valid service code or if ! too many on-behalf results codes are specified. ! 5) Modified the check of the parameter counter for the ! MAESTRO-NETWORK-IDs and PREPAID-NETWORK-ID LCONF ! params so that single parameter presence was handled ! appropriately. ! Procs modified: cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^paramproc ! sem^request ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #1010987 #REPLACE h0259905 CMD^WARMBOOT^STORE^GLOBALS for i := 0 to ( $occurs( temp.maestro^tbl^g.ntwk^id ) - 1 ) do #REPLACE h025990E CMD^WARMBOOT^STORE^GLOBALS for i := 0 to ( $occurs( temp.prepaid^tbl^g.ntwk^id ) - 1 ) do #REPLACE p0259906 OFFSET 1/p0259906 OFFSET 1 CMD^WARMBOOT^STORE^GLOBALS for i := 0 to ( $occurs( temp.on^behalf^g.deny ) - 1 ) do begin move( temp.on^behalf^g.deny[ i ].svc, on^behalf^g.deny[ i ].svc ); move( temp.on^behalf^g.deny[ i ].rslt, on^behalf^g.deny[ i ].rslt ); on^behalf^g.deny[ i ].svc ':=' [ $len( on^behalf^g.deny[ i ].svc ) * [ " " ] ]; on^behalf^g.deny[ i ].rslt ':=' [ $len( on^behalf^g.deny[ i ].rslt ) * [ " " ] ]; end; #DELETE p0259909/p025990K CMD^WARMBOOT^STORE^GLOBALS #REPLACE h025990O CMD^WARMBOOT^RETRIEVE^GLOBALS for i := 0 to ( $occurs( maestro^tbl^g.ntwk^id ) - 1 ) do #REPLACE h025990X CMD^WARMBOOT^RETRIEVE^GLOBALS for i := 0 to ( $occurs( prepaid^tbl^g.ntwk^id ) - 1 ) do #ADD p025990X CMD^WARMBOOT^RETRIEVE^GLOBALS for i := 0 to ( $occurs( on^behalf^g.deny ) - 1 ) do begin move( on^behalf^g.deny[ i ].svc , temp.on^behalf^g.deny[ i ].svc ); move( on^behalf^g.deny[ i ].rslt, temp.on^behalf^g.deny[ i ].rslt); temp.on^behalf^g.deny[ i ].svc ':=' [ $len( on^behalf^g.deny[ i ].svc ) * [ " " ] ]; temp.on^behalf^g.deny[ i ].rslt ':=' [ $len( on^behalf^g.deny[ i ].rslt ) * [ " " ] ]; end; #DELETE p025990Y/p025990k CMD^WARMBOOT^RETRIEVE^GLOBALS #REPLACE p0394106 INIT^PARAMPROC wlform( no^svc^id, #REPLACE h0397400 INIT^PARAMPROC int param^good := true; #REPLACE l0406801 INIT^PARAMPROC if j < 0 then #REPLACE l040680e INIT^PARAMPROC if j < 0 then #REPLACE h040682H/p0406900 INIT^PARAMPROC ! Routine is EXITED below if deny^failed^on^behalf^g is FALSE ! ! There is no need to read ON-BEHALF-DENY-RSLT-CDESxx LCONF ! ! PARAMS if they are not going to be used. ! ! Any new LCONF params should be processed before this code. ! ! ON-BEHALF-DENY-RSLT-CDES for j := 0 to ( $occurs( on^behalf^g.deny ) - 1 ) do begin on^behalf^g.deny[ j ].svc ':=' [ $len( on^behalf^g.deny[ j ].svc ) * [ " " ] ]; on^behalf^g.deny[ j ].rslt ':=' [ $len( on^behalf^g.deny[ j ].rslt ) * [ " " ] ]; end; if not deny^failed^on^behalf^g then begin ! ! No need to read ON-BEHALF-DENY-RSLT-CDESxx LCONF params ! They will not be used unless this global is set to true ! Exit the routine as this is the last LCONF processing done ! return true; end; lgth := $len( on^behalf^g.deny[ j ].svc ) + $len( on^behalf^g.deny[ j ].rslt ); #DELETE p0406901/p040690E INIT^PARAMPROC #ADD p040690c INIT^PARAMPROC j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin param^good := true; on^behalf^lconf^param^name ':=' lconf.prikey.item^name for $occurs( on^behalf^lconf^param^name ); if j < $occurs( on^behalf^g.deny ) then begin if not all^numeric( lconf.param^msg.ptxt, $len( on^behalf^g.deny[ j ].svc ) ) then begin call log^message^( 4070, ! routing code !, @no^svc^id, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); param^good := false; #DELETE p040690d/p040690u INIT^PARAMPROC #ADD p0406915 INIT^PARAMPROC param^good := false; #REPLACE p0406916 INIT^PARAMPROC end; #DELETE p0406917/p040691D INIT^PARAMPROC #ADD p040691E INIT^PARAMPROC if param^good then begin movl( on^behalf^g.deny[ j ], lconf.param^msg.ptxt, lconf.param^msg.plgth ); j := j + 1; end; #REPLACE p040691F INIT^PARAMPROC end; ! if j < $occurs( on^behalf^g.deny ) ! #ADD p040691h INIT^PARAMPROC j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin param^good := true; on^behalf^lconf^param^name ':=' lconf.prikey.item^name for $occurs ( on^behalf^lconf^param^name ); if j < $occurs( on^behalf^g.deny ) then begin if not all^numeric( lconf.param^msg.ptxt, $len( on^behalf^g.deny[j].svc ) ) then begin call log^message^( 4080, ! routing code !, @no^svc^id, net.myname, evt_msg_severity_err_l, @on^behalf^lconf^param^name, item^name^len^l ); param^good := false; #DELETE p040691i/p040691z INIT^PARAMPROC #ADD p040692A INIT^PARAMPROC param^good := false; #REPLACE p040692B INIT^PARAMPROC end; #DELETE p040692C/p040692I INIT^PARAMPROC #ADD p040692J INIT^PARAMPROC if param^good then begin movl( on^behalf^g.deny[ j ], lconf.param^msg.ptxt, lconf.param^msg.plgth ); j := j + 1; end; #DELETE p040692K INIT^PARAMPROC #REPLACE p040692L INIT^PARAMPROC end; ! if j < $occurs( on^behalf^g.deny ) ! #REPLACE p040692P INIT^PARAMPROC if j > $occurs( on^behalf^g.deny ) then #ADD p040692T INIT^PARAMPROC num^on^behalf^tbl^g := $occurs( on^behalf^g.deny ); #DELETE p040692U/p040692V INIT^PARAMPROC #REPLACE p040692Z INIT^PARAMPROC num^on^behalf^tbl^g := j; #REPLACE p040692i INIT^PARAMPROC end; #DELETE p040692j/p040692o INIT^PARAMPROC #ADD p0661208 SEM^REQUEST max^num^cdes := $occurs( on^behalf^g.deny ); ! ! find matching service & keep its index in idx ! idx := -1; while ( idx := idx + 1 ) < max^num^cdes and ( on^behalf^g.deny[ idx ].svc <> sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].svc for $len( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].svc ) ) and on^behalf^g.deny[ idx ].svc <> " " do; ! ! find matching result & keep its index in idx2 ! idx2 := -1; while ( idx2 := idx2 + 1 ) < ( idx2 + $len( on^behalf^g.deny[ 0 ].rslt ) ) and $alpha( on^behalf^g.deny[ idx ]. rslt.byte[ idx2 ] ) and on^behalf^g.deny[ idx ].rslt.byte[ idx2 ] <> sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 and on^behalf^g.deny[ idx ].rslt.byte[ idx2 ] <> " " do; if on^behalf^g.deny[ idx ].rslt.byte[ idx2 ] <> " " and on^behalf^g.deny[ idx ].rslt.byte[ idx2 ] = sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 then #DELETE p0661209/p066120f SEM^REQUEST #ADD p066120r SEM^REQUEST end; ! match on results code found ! end; ! DE-48, SE-71 for loop ! end; ! DE-48, SE-71 included in SEM ! #DELETE p066120s/p066120u SEM^REQUEST #ENDSCN = SW0D459 !#CMP2.28 10/23/09 BNETG 6062 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6062 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6062 * ******************************************************************************** #SCN = SW0D485 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00026<0n ! ! 23OCT2009 wielerk ! Symptom: Amount fields are not represented correctly by this ! interface under certain currency codes. ! Problem: The interface uses an ISO table to determine decimal ! positions for each of the currencies of the world. ! MasterCard uses an internal table which does not match ! the ISO table in many currency decimal positions. ! The error in decimal placement can occur in acquirer ! and issuer traffic flows. ! Fix: Added the new HISWUTL to the source list. ! Dependency: New file BNETTBL. ! Apply fixes to ABNTMM, BNETATMS, BNETATMM, BNETG, ! BNETLIBS, BNETM, BNETMM and HISWUTLS. Run Make. ! Replace BNETMNWD ! Reference: Case #929517. #ADD 01366N2W ? hiswutil^cnv^amt^expnt, #ADD 01366N4A ! hiswutil^cnv^amt^expnt, ! #ENDSCN = SW0D485 !#CMP2.28 10/23/09 BNETLIBS6192 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6192 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6192 * ******************************************************************************** #SCN = SW0D486 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6192 #NEWVERSION = 6193 #ADD G044190D ! 23OCT2009 wielerk ! Symptom: Amount fields are not represented correctly by this ! interface under certain currency codes. ! Problem: The interface uses an ISO table to determine decimal ! positions for each of the currencies of the world. ! MasterCard uses an internal table which does not match ! the ISO table in many currency decimal positions. ! The error in decimal placement can occur in acquirer ! and issuer traffic flows. ! Fix: Modified the logic used to format amount fields to ! invoke a new HISWUTL proc that will make the necessary ! corrections to amount fields that are impacted by the ! decimal position inconsistency. ! Procs Modified: sem^frmt^amt^to^pstm^amt ! sem^frmt^fee^to^pstm^fee ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^fee^to^sem^fee ! Dependency: New file BNETTBL. ! Apply fixes to ABNTMM, BNETATMS, BNETATMM, BNETG, ! BNETLIBS, BNETM, BNETMM and HISWUTLS. Run Make. ! Replace BNETMNWD ! Reference: Case #929517. #ADD 07741Z01 PSTM^FRMT^AMT^TO^SEM^AMT fixed hlthcr^amt := 0f; #ADD 07756 PSTM^FRMT^AMT^TO^SEM^AMT ?source =swbnet_bnettbl(crncy^expnt^tbl) #DELETE 07757 PSTM^FRMT^AMT^TO^SEM^AMT #ADD E0779502 PSTM^FRMT^AMT^TO^SEM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #DELETE 07798 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07801v0C PSTM^FRMT^AMT^TO^SEM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #DELETE E0780100/E0780102 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07834 PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt:= pstm.tran.amt^2; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #ADD 07835 PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt ) then #DELETE 07836 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07850A0b PSTM^FRMT^AMT^TO^SEM^AMT hlthcr^amt := hlthcr^get^tkn.adnl^amt[ i ]. amt; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, hlthcr^get^tkn.adnl^amt[ i ].crncy^cde, 0, hlthcr^amt ) then begin return false; end; #DELETE 07850K0P PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07850K0R PSTM^FRMT^AMT^TO^SEM^AMT hlthcr^amt ); #DELETE 07850K0S PSTM^FRMT^AMT^TO^SEM^AMT #ADD E0790202 PSTM^FRMT^AMT^TO^SEM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #DELETE 07910 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07945 PSTM^FRMT^AMT^TO^SEM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #DELETE 07946 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 0796250K PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt := pos^bal^tkn.acct^amt^1; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pos^bal^tkn.acct^crncy^cde, 0, pstm^amt ) then begin return false; end; #ADD 0796250L PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt ); #DELETE 0796250M PSTM^FRMT^AMT^TO^SEM^AMT #ADD 0796250g PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt := pos^bal^tkn.txn^amt^1; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pos^bal^tkn.txn^crncy^cde, 0, pstm^amt ) then begin return false; end; #ADD 0796250h PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt ); #DELETE 0796250i PSTM^FRMT^AMT^TO^SEM^AMT #ADD 07976 PSTM^FRMT^AMT^TO^SEM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; #DELETE E0797600 PSTM^FRMT^AMT^TO^SEM^AMT #ADD E079920Z PSTM^FRMT^FEE^TO^SEM^FEE ?source =swbnet_bnettbl(crncy^expnt^tbl) #DELETE E079920a PSTM^FRMT^FEE^TO^SEM^FEE #ADD E0799216 PSTM^FRMT^FEE^TO^SEM^FEE tmp^tran^fee := tkn^surcharge.tran^fee; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, tmp^tran^fee ) then begin return false; end; #ADD E0799217 PSTM^FRMT^FEE^TO^SEM^FEE tmp^tran^fee ) then #DELETE E0799218 PSTM^FRMT^FEE^TO^SEM^FEE #ADD E079921J PSTM^FRMT^FEE^TO^SEM^FEE if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, tmp^tran^fee ) then begin return false; end; #ADD E079921d PSTM^FRMT^FEE^TO^SEM^FEE tmp^tran^fee := tkn^surcharge.tran^fee; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, tmp^tran^fee ) then begin return false; end; #ADD E079921e PSTM^FRMT^FEE^TO^SEM^FEE tmp^tran^fee ) then #DELETE E079921f PSTM^FRMT^FEE^TO^SEM^FEE #ADD E079921r PSTM^FRMT^FEE^TO^SEM^FEE if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, tmp^tran^fee ) then begin return false; end; #ADD 10021A02 SEM^FRMT^AMT^TO^PSTM^AMT ?source =swbnet_bnettbl(crncy^expnt^tbl) #DELETE 10022 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10070c1K SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 1, pstm.tran.amt^1 ) then begin return false; end; #ADD 10176 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, tran^amt ) then begin return false; end; #DELETE 10177 /E1017802 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10217K0L SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].crncy^cde, 1, hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].amt ) then begin return false; end; #DELETE 10217K0M/10217K0O SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10404 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, hlthcr^tkn.adnl^amt[ 0 ].crncy^cde, 1, hlthcr^tkn.adnl^amt[ 0 ].amt ) then begin return false; end; #DELETE 10405 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10516 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, hlthcr^get^tkn.adnl^amt[ 0 ].amt ) then begin return false; end; #DELETE 10517 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10555w02 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, tran^amt ) then begin return false; end; #DELETE 10562 SEM^FRMT^AMT^TO^PSTM^AMT #REPLACE 10581 /10581 OFFSET 0 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, tran^amt ) then begin return false; end; #DELETE 10582w00/10582w02 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10599#0j SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, pos^bal^tkn.acct^amt^1 ) then begin return false; end; #ADD 10599#19 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, pos^bal^tkn.txn^amt^1 ) then begin return false; end; #DELETE 10599#1A SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10599#1j SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, pos^bal^tkn.acct^amt^1 ) then begin return false; end; #DELETE 10599#1k SEM^FRMT^AMT^TO^PSTM^AMT #ADD 10599#28 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.addl^amt.info[ i ].crncy^cde, 1, pos^bal^tkn.txn^amt^1 ) then begin return false; end; #DELETE 10599#29 SEM^FRMT^AMT^TO^PSTM^AMT #REPLACE 10605105 SEM^FRMT^AMT^TO^PSTM^AMT ! Partial auth not allowed - process as full approval ! #ADD 10612 SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 1, tran^amt ) then begin return false; end; #DELETE E1061300/E1061302 SEM^FRMT^AMT^TO^PSTM^AMT #ADD E106820e SEM^FRMT^AMT^TO^PSTM^AMT if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 1, pstm.tran.amt^2 ) then begin return false; end; #DELETE E106820f/E1068302 SEM^FRMT^AMT^TO^PSTM^AMT #ADD E110850g SEM^FRMT^FEE^TO^PSTM^FEE ?source =swbnet_bnettbl(crncy^expnt^tbl) #DELETE E110850h SEM^FRMT^FEE^TO^PSTM^FEE #ADD E110851q SEM^FRMT^FEE^TO^PSTM^FEE if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, sem.iss^crncy^cde, 1, temp^tran^fee ) then begin return false; end; #ENDSCN = SW0D486 !#CMP2.28 10/23/09 BNETM 6004 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETM BNETM 6004 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETM BNETM 6004 * ******************************************************************************** #SCN = SW0D487 , FILEID = BNETM #VOLUME = $ROOK.SW60BNET #FILE = BNETM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6004 #NEWVERSION = 6005 #ADD 0088A08 # 23OCT2009 wielerk # Symptom: Amount fields are not represented correctly by this # interface under certain currency codes. # Problem: The interface uses an ISO table to determine decimal # positions for each of the currencies of the world. # MasterCard uses an internal table which does not match # the ISO table in many currency decimal positions. # The error in decimal placement can occur in acquirer # and issuer traffic flows. # Fix: Added a dependency for the new currency table. # Dependency: New file BNETTBL. # Apply fixes to ABNTMM, BNETATMS, BNETATMM, BNETG, # BNETLIBS, BNETM, BNETMM and HISWUTLS. Run Make. # Replace BNETMNWD # Reference: Case #929517. #ADD 0155 $(swbnet_bnettbl) \ #ENDSCN = SW0D487 !#CMP2.28 10/23/09 BNETMM 6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETMM BNETMM 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETMM BNETMM 6001 * ******************************************************************************** #SCN = SW0D488 , FILEID = BNETMM #VOLUME = $ROOK.SW60BNET #FILE = BNETMM #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6001 #NEWVERSION = 6002 #ADD 0045A08 # 23OCT2009 wielerk # Symptom: Amount fields are not represented correctly by this # interface under certain currency codes. # Problem: The interface uses an ISO table to determine decimal # positions for each of the currencies of the world. # MasterCard uses an internal table which does not match # the ISO table in many currency decimal positions. # The error in decimal placement can occur in acquirer # and issuer traffic flows. # Fix: Added an entry for the new currency table. # Dependency: New file BNETTBL. # Apply fixes to ABNTMM, BNETATMS, BNETATMM, BNETG, # BNETLIBS, BNETM, BNETMM and HISWUTLS. Run Make. # Replace BNETMNWD # Reference: Case #929517. #ADD 0071 swbnet_bnettbl = \K9.$ROOK.sw60bnet.bnettbl #DELETE 0072 #ENDSCN = SW0D488 !#CMP2.28 11/03/09 BNETLIBS6193 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6193 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6193 * ******************************************************************************** #SCN = SW0D491 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6193 #NEWVERSION = 6194 #ADD H044190N ! 02NOV2009 engelk ! Symptom: The trace Number (P-11) in the switch common data (BY) ! token for issuer POS reversals did not reflect the value ! from the reversal, but rather the trace number from the ! original request. ! Problem: When the switch common data token was to be updated ! during SEM reversal processing, the interface passed the ! external message from the ILF, as opposed to the SEM ! reversal received. ! Fix: Modified the code to pass the SEM reversal received to ! switch common data token update routine. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #923045 #REPLACE 15786 SEM^FRMT^XRVSL^TO^PSTM^0420 call util^add^swi^cmn^data^tkn( rvsl, #ENDSCN = SW0D491 !#CMP2.28 11/05/09 BNETLIBS6194 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6194 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6194 * ******************************************************************************** #SCN = SW0D494 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6194 #NEWVERSION = 6195 #ADD I044190F ! 05NOV2009 saderc ! Symptom: The account type subfield in DE 54 (addl^amt) is set ! incorrectly in UKDM purchase with cash back trans. ! Problem: The account type subfield should be set to "00" (Not ! Applicable) for UKDM purchase with cash back trans. ! Fix: Added logic to set account type to "00", if the tran is ! a UKDM and a purchase with cash back. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #985058 #ADD 07808 PSTM^FRMT^AMT^TO^SEM^AMT if uk^domestic^maestro^d then begin movd( sem.addl^amt.info[ 0 ].acct^typ, bnet^dflt^acct^d ); end else #ENDSCN = SW0D494 !#CMP2.28 11/20/09 BNETS 60129FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60129 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60129 * ******************************************************************************** #SCN = SW0D503 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r000260r ! 06NOV2009 bensone ! Symptom: The interface started logging Deallocate error message ! 9231 after the SECUTILS Data Stack Relief fix was ! bound into the interface. ! Problem: During initialization the interface called procedure ! hiswsec^init^devices with the warmboot flag set to true. ! This caused pin^init in SECUTILS to try and deallocate ! the new secutils segment. Because the segment had never ! been allocated, the deallocate failed and message 9231 ! was logged to EMS. ! Fix: In procedure init^^initialization, set the warmboot ! flag to false in the call to hiswsec^init^devices. ! Proc modified: init^^initialization ! Dependency: Apply fix to BNETS. Run Make. ! Refer to BA60UD0D.SCNSECU for a complete listing of ! dependencies. ! Reference: Case #450316 #REPLACE 02637t04 INIT^^INITIALIZATION false ) then #ENDSCN = SW0D503 !#CMP2.28 12/10/09 BNETLIBS6195 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6195 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6195 * ******************************************************************************** #SCN = SW0D520 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6195 #NEWVERSION = 6196 #ADD J044190B ! 10DEC2009 saderc ! Symptom: The interface is mapping DE 61.10 (CAT Level) from the ! inbound external request to the ICHG-RESP field in the ! PSTM. ! Problem: The logic to map DE 61.10 to the ICHG-RESP field in the ! PSTM was added several years ago. However, since the ! introduction of the PT-SRV-DATA token (C4) in 1997/1998, ! the DE 61.10 has been mapped to the ! CRDHLDR-ACTVT-TERM-IND field in this token. As a result, ! code to map DE 61.10 to the ICHG-RESP field in the PSTM ! is obsolete. ! Fix: Modified the interface to only map DE 61.10 to the ! ICHG-RESP field in the PSTM when the BASE24 release is ! less than 5. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1014701 #ADD 13809 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g < 5 then begin move( pstm.tran.ichg^resp.byte[7], sem.ntl^pos^data.cond^cde.byte[9] ); end; #DELETE 13810 /13811 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0D520 !#CMP2.28 12/23/09 BNETLIBS6196 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6196 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6196 * ******************************************************************************** #SCN = SW0E001 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6196 #NEWVERSION = 6197 #ADD K044190I ! 23DEC2009 saderc ! Symptom: The interface is formatting pstm.tran.apprv^cde with ! zeroes for an unmatched reversal being sent to POS ! Router Auth. ! Problem: Generally, the approval code in the 0420 PSTM is taken ! from the value in the corresponding field in the 0210 ! PSTM logged to the ILF, because the approval code ! (DE 38) in the external 0400/0420 message must match the ! value in the 0110 response. For an unmatched reversal, ! however, the 0210 PSTM is unavailable because the ILF ! record can't be located, so the interface should extract ! the value from the external 0400/0420 message. ! Fix: Modified the interface to format pstm.tran.apprv^cde ! with the value in DE 38, if present, for unmatched ! reversals. ! Proc modified: sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fixes to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #1016306 #ADD E1177302 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if auth^id^resp^bit^d then begin call integer^ascii^( pstm.tran.apprv^cde^lgth, $len( rvsl.auth^id^resp ) ); pstm.tran.apprv^cde ':=' [ $len( pstm.tran.apprv^cde ) * [" "] ]; move( pstm.tran.apprv^cde, rvsl.auth^id^resp ); end; #ENDSCN = SW0E001 !#CMP2.28 01/11/10 BNETLIBS6197 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6197 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6197 * ******************************************************************************** #SCN = SW0E011 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6197 #NEWVERSION = 6198 #ADD L044190J ! 11DEC2010 saderc ! Symptom: The interface is not formatting the amounts for an ! an unmatched reversal being sent to POS Router Auth. ! Problem: When we receive an unmatched reversal, the first thing ! we do is invoke procedure sem^frmt^xrqst^to^pstm^0200 ! to build the PSTM from scratch. These procedure call ! sem^frmt^amt^to^pstm^amt to format the amount fields ! within the PSTM. However, the logic in this proc differs ! by external message type. For an unmatched reversal, the ! external message type is 0400 or 0420, and this means ! that the PSTM Amount-1 field is not set up (this is only ! done for requests and advices). ! Fix: Modified the interface to format the amounts in the ! PSTM for an unmatched reversal. ! Proc modified: sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fixes to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #1016306 #ADD 11751 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM string msg^typ[ 0:3 ] := [ 4 * [ " " ] ]; #ADD 11752 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM ! ! Two calls to format the amounts will be required. The first ! call with the message type set to a auth request will set ! amount 1. The second call with the message type set to a ! reversal will set amount 2 for the reversal since it may have ! been set to zero from the first call. ! movl( msg^typ, rvsl.typ, 4 ); movd( rvsl.typ, sem^auth^request^d ); call sem^frmt^amt^to^pstm^amt( rvsl, pstm ); movl( rvsl.typ, msg^typ, 4 ); call sem^frmt^amt^to^pstm^amt( rvsl, pstm ); #ENDSCN = SW0E011 !#CMP2.28 01/13/10 BNETLIBS6198 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6198 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6198 * ******************************************************************************** #SCN = SW0E013 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6198 #NEWVERSION = 6199 #ADD M044190I ! 14JAN2010 saderc ! Symptom: There are fields in the external response not being ! added to the Switch token. ! Problem: In the util^swi^tkn^init procedure, the logic checks the ! appropriate bits in the message bit maps to determine ! whether there is data to be added to the Switch token. ! However, when BASE24 is the acquirer, this processing is ! performed when the response message from Banknet is ! received, and so the bit map being checked is the ! response message bit map. There are a number of fields ! included in the Switch token that are sent in the ! request message, but may not be returned in the response ! message. For these fields, the data will not be added to ! the Switch token, because the appropriate bit is not set ! in the response message bit map. ! Fix: Modified the interface to add the following fields to ! the Switch token for a response message when BASE24 is ! the acquirer: ! DE 12 (local tran time) ! DE 13 (local tran date) ! DE 48 (additional data) ! DE 61 (POS data) ! Proc modified: util^swi^tkn^init ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1017741 #ADD 24999 UTIL^SWI^TKN^INIT if local^tim^bit^d or sem.typ = sem^auth^response^d or sem.typ = sem^response^d then begin move( bnet^tkn^buf.local^tim, sem.local^tim ); end #DELETE 25000 /25001 UTIL^SWI^TKN^INIT #ADD 25004 UTIL^SWI^TKN^INIT if local^dat^bit^d or sem.typ = sem^auth^response^d or sem.typ = sem^response^d then begin move( bnet^tkn^buf.local^dat, sem.local^dat ); end #DELETE 25005 /25006 UTIL^SWI^TKN^INIT #ADD 25024 UTIL^SWI^TKN^INIT if addl^data^bit^d or sem.typ = sem^auth^response^d or sem.typ = sem^response^d then #DELETE 25025 UTIL^SWI^TKN^INIT #ADD 25140:03 UTIL^SWI^TKN^INIT if ntl^pos^data^bit^d or sem.typ = sem^auth^response^d or sem.typ = sem^response^d then #DELETE 25140:04 UTIL^SWI^TKN^INIT #ENDSCN = SW0E013 !#CMP2.28 01/18/10 BNETLIBS6199 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6199 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6199 * ******************************************************************************** #SCN = SW0E015 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6199 #NEWVERSION = 61100 #ADD N044190Q ! 14JAN2010 engelk ! Symptom: Group Status command information did not match what ! logon status information should be after a series of ! group logons and logoffs. ! Problem: 1) Code should be ensuring that the given BNIIF record ! is credit before marking it logged on as credit. ! 2) Code should be ensuring that the given BNIIF record ! is debit before marking it logged on as debit. ! 3) Code should be ensuring that the given BNIIF record ! is issuer before marking it logged on as issuer. ! 4) Code should be ensuring that the given BNIIF record ! is acquirer before marking it logged on as acquirer. ! 5) found instances in logon/logoff logic where the wrong ! type of logon variable was set. ! Fix: Added code to ensure that a given BNIIF record matched ! the logon criteria before marking it logged ON/OFF as ! CREDIT/DEBIT and ISSUER/ACQUIRER. ! Procs modified: util^set^logon^status ! Dependency: Apply fix to BNETLIBS and run Make. ! Reference: Case #1020098 #ADD 24109 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^group^l and ( bniif^tbl.traffic = acq^l or bniif^tbl.traffic = both^l ) then begin set( bniif^tbl.logon^acq, true ); if bniif^tbl.prefix^ctr > 0 then begin for j := 0 to ( bniif^tbl.prefix^ctr - 1 ) do bniif^tbl.prefix[ j ].logon^acq := true; end; ! if prefixes have been entered end; ! group logon if nmm^info^cde = nmm^logon^prefix^l and ( bniif^tbl.traffic = acq^l or bniif^tbl.traffic = both^l ) then begin #DELETE 24110 /24124 UTIL^SET^LOGON^STATUS #ADD 24129 UTIL^SET^LOGON^STATUS begin bniif^tbl.prefix[ j ].logon^acq := true; set( bniif^tbl.logon^acq, true ); end; end; #DELETE 24130 /24132 UTIL^SET^LOGON^STATUS #ADD 24174 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^group^l and ( bniif^tbl.traffic = iss^l or bniif^tbl.traffic = both^l ) then begin set( bniif^tbl.logon^iss, true ); if bniif^tbl.prefix^ctr > 0 then begin for j := 0 to ( bniif^tbl.prefix^ctr - 1 ) do bniif^tbl.prefix[ j ].logon^iss := true; end; ! Prefixes have been entered end; if nmm^info^cde = nmm^logon^prefix^l and ( bniif^tbl.traffic = iss^l or bniif^tbl.traffic = both^l ) then #DELETE 24175 /24185 UTIL^SET^LOGON^STATUS #ADD 24191 UTIL^SET^LOGON^STATUS begin bniif^tbl.prefix[ j ].logon^iss := true; bniif^tbl.logon^iss := true; end; #DELETE 24192 UTIL^SET^LOGON^STATUS #ADD 24206 UTIL^SET^LOGON^STATUS set( bniif^tbl.logon^iss, false ); #ADD 24213 UTIL^SET^LOGON^STATUS ! ! if any prefix is still marked logged on ! as issuer, record must be marked logged on ! as issuer. ! if bniif^tbl.prefix[j].logon^iss then begin set( bniif^tbl.logon^iss, true ); end; #DELETE 24214 UTIL^SET^LOGON^STATUS #ADD 24232 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^group^l and ( bniif^tbl.service = credit^l or bniif^tbl.service = both^l ) then #DELETE 24233 UTIL^SET^LOGON^STATUS #ADD 24242 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^prefix^l and ( bniif^tbl.service = credit^l or bniif^tbl.service = both^l ) then begin #DELETE 24243 /24247 UTIL^SET^LOGON^STATUS #ADD 24252 UTIL^SET^LOGON^STATUS begin bniif^tbl.prefix[ j ].logon^cr := true; set( bniif^tbl.logon^cr, true ); end; #DELETE 24253 UTIL^SET^LOGON^STATUS #ADD 24267 UTIL^SET^LOGON^STATUS set( bniif^tbl.logon^cr, false ); #DELETE 24268 UTIL^SET^LOGON^STATUS #ADD 24274 UTIL^SET^LOGON^STATUS ! ! if any prefix is still marked logged on ! as credit, record must be marked logged on ! as credit. ! if bniif^tbl.prefix[j].logon^cr then begin set( bniif^tbl.logon^cr, true ); end; #DELETE 24275 /24277 UTIL^SET^LOGON^STATUS #ADD 24297 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^group^l and ( bniif^tbl.service = debit^l or bniif^tbl.service = both^l ) then #DELETE 24298 UTIL^SET^LOGON^STATUS #ADD 24307 UTIL^SET^LOGON^STATUS if nmm^info^cde = nmm^logon^prefix^l and ( bniif^tbl.service = debit^l or bniif^tbl.service = both^l ) then #ADD 24307 UTIL^SET^LOGON^STATUS begin #ADD 24307 UTIL^SET^LOGON^STATUS if bniif^tbl.prefix^ctr > 0 then #ADD 24307 UTIL^SET^LOGON^STATUS #ADD 24307 UTIL^SET^LOGON^STATUS for j := 0 to (bniif^tbl.prefix^ctr - 1) do begin bniif^tbl.prefix[ j ].logon^db := true; set( bniif^tbl.logon^db, true ); end; end; #DELETE 24308 /24320 UTIL^SET^LOGON^STATUS #ADD 24332 UTIL^SET^LOGON^STATUS set( bniif^tbl.logon^db, false ); #DELETE 24333 UTIL^SET^LOGON^STATUS #ADD 24339 UTIL^SET^LOGON^STATUS ! ! if any prefix is still marked logged on ! as debit, record must be marked logged on ! as debit. ! if bniif^tbl.prefix[j].logon^db then begin set( bniif^tbl.logon^db, true ); end; #DELETE 24340 /24342 UTIL^SET^LOGON^STATUS #ENDSCN = SW0E015 !#CMP2.28 01/29/10 BNETS 60130FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60130 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60130 * ******************************************************************************** #SCN = SW0E019 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s000260I ! 29JAN2010 saderc ! Symptom: The interface is sending a session activation when ! receiving a 9511 message from XPNET. ! Problem: The interface will attempt to send a session activation ! (0800) messages when it receives either a 9511 or a 9518 ! message from XPNET. The 9511 message does not relate to ! the COMMS, but is used internally by XPNET to identify ! the station as UP. MasterCard mandates that members ! connect to their MIPs using TCP/IP. For TCP/IP, XPNET ! will send a 9511 to the application, followed by a 9518. ! It's not until the 9518 is received that we can be sure ! that the socket is connected. It seems that the customer ! received the 9518 about 15 hundredths of a second after ! the 9511. So, if we wait until the 9518 message is ! received before the session activation message is sent, ! there will only be a negligible delay in activating the ! station. ! Fix: Modified the interface to only send the session ! activation message after a 9518 message is received from ! XPNET. Note: the LINE attribute FMM should be set to ALL ! to receive 9518/9519 messages from XPNET. ! Proc modified: cmd^station^change ! Dependency: Apply fix to BNETS. Run Make. Replace BNETMNWD. ! Reference: Case #1017261 #ADD 02117U00 CMD^STATION^CHANGE if mtp = "9518" then #DELETE 02117U01/02117U02 CMD^STATION^CHANGE #ENDSCN = SW0E019 !#CMP2.28 02/03/10 BNETLIBS61100FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61100 * ******************************************************************************** #SCN = SW0E026 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61100 #NEWVERSION = 61101 #ADD O044190L ! 03FEB2010 saderc ! Symptom: The interface is not formatting the Original Currency ! token (BE) correctly when a partial reversal is received ! from MasterCard. ! Problem: For full reversal, an internal 0420 message is formatted ! and the amt^1 field of the Original Currency token ! should contain the value from transaction amount (DE 4). ! For a partial reversal, an internal 0220 adjustment ! transaction takes place where the amt^2 field of BE ! token should be populated with the value of field ! DE 95.1 (tran amount of replacement amounts). However, ! interface is not formatting the Original Currency token ! while processing a reversal. ! Fix: Modified code to format the Original Currency token ! if the transaction currency code (DE 49) is different ! from the issuer currency code (DE 51). Also, added ! additional logic to format the amt-2 field in the ! Original Currency token in the cases where we are ! processing an unmatched reversal or a purchase with ! cash back. Both of these trans are formatted in the ! proc that formats a 0200 external request to an internal ! BASE24-pos request. ! Modified procs: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #1022646 #ADD 13769 SEM^FRMT^XRQST^TO^PSTM^0200 string tran^amt^2[ 0:11 ] := [ 12 * [ " " ] ]; #ADD 15419 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Format amt-2 in the token if the unmatched reversal request ! is a partial reversal (DE 95 is present) or the 0200 request ! is a purchase with cash back. ! if replace^amt^bit^d and sem.replace^amts.tran^amt <> [ $len( sem.replace^amts.tran^amt ) * [ " " ] ] then begin movl( tran^amt^2, sem.replace^amts.tran^amt, $len( sem.replace^amts.tran^amt ) ); end ! of if replace^amt^bit^d and else if pos^purch^cb^d( pstm ) and addl^amt^bit^d then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end else begin cnt := 0; end; for idx := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ idx ].amt^typ = bnet^amt^typ^cb^d and sem.addl^amt.info[ idx ].crncy^cde = sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then ! ! ! Map cashback amount to AMT^2 in the BE ! token. ! ! begin movl( tran^amt^2, sem.addl^amt.info[ idx ].amt, $len( sem.addl^amt.info[ idx ].amt ) ); end; end; ! of for idx := 0 to ( cnt - 1 ) do ! end ! of if pos^purch^cb^d( pstm ) and else begin init( tran^amt^2, "0", $occurs( tran^amt^2 ) ); end; #ADD 15425 SEM^FRMT^XRQST^TO^PSTM^0200 tran^amt^2, $occurs( tran^amt^2 ), #DELETE 15426 /15427 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15645 SEM^FRMT^XRVSL^TO^PSTM^0420 int .orig^crncy^60^get^tkn( orig^crncy^60^tkn^def ); int orig^crncy^60^get^lgth; #ADD 15646 SEM^FRMT^XRVSL^TO^PSTM^0420 int tkn^lgth := 0; fixed orig^crncy^60^amt^2; string amt^1[ 0:11 ] := [ 12 * [ " " ] ]; string amt^2[ 0:11 ] := [ 12 * [ " " ] ]; string crncy^cde[ 0:2 ] := [ 3 * [ " " ] ]; string conv^dat[ 0:3 ] := [ 4 * [ " " ] ]; string conv^rate[ 0:7 ] := [ 8 * [ " " ] ]; #ADD 15762C05 SEM^FRMT^XRVSL^TO^PSTM^0420 if base24^rel^g >= 5 and tran^crncy^cde^bit^d and iss^crncy^cde^bit^d and rvsl.tran^crncy^cde <> rvsl.iss^crncy^cde for $min( $len( rvsl.tran^crncy^cde ), $len( rvsl.iss^crncy^cde ) ) then begin movl( amt^1, rvsl.tran^amt, $len( rvsl.tran^amt ) ); movl( conv^rate, rvsl.conv^rate^crd^iss, $len( rvsl.conv^rate^crd^iss ) ); movl( conv^dat, rvsl.conv^dat, $len ( rvsl.conv^dat ) ); movl( crncy^cde, rvsl.tran^crncy^cde, $len( rvsl.tran^crncy^cde ) ); if replace^amt^bit^d and rvsl.replace^amts.tran^amt <> [ $len( rvsl.replace^amts.tran^amt ) * [ " " ] ] then begin ! ! If DE 95.1 is present ! movl( amt^2, rvsl.replace^amts.tran^amt, $len( rvsl.replace^amts.tran^amt ) ); end else begin init( amt^2, "0", $occurs( amt^2 ) ); end; tkn^id ':=' orig^crncy^60^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^get^tkn, orig^crncy^60^get^lgth ) then begin ! ! Retrieve the Original Currency Token ! ascii^fixed^( amt^2, orig^crncy^60^amt^2 ); orig^crncy^60^get^tkn.amt^2 := orig^crncy^60^amt^2; end ! of token present else begin ! ! Add the Original Currency Token ! tkn^lgth := 0; ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len ( pstm.srvcs ) ); call hiswtkn_add_orig_crncy_60( ofst, pos^l, amt^1, $occurs( amt^1 ), amt^2, $occurs( amt^2 ), crncy^cde, conv^rate, conv^dat, pstm, tkn^lgth ); end; end; #ENDSCN = SW0E026 !#CMP2.28 02/10/10 BNETDDLS6036 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6036 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6036 * ******************************************************************************** #SCN = SW0E030 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6036 #NEWVERSION = 6037 #ADD 00262j0K * 10FEB2010 bensone * Symptom: Banknet Release 10.1 Mandates Phase 1 * Problem: None * Fix: Add support for SE 15 and 75 in DE 48. Add a comment * that '18' is a valid value for DE 48 SE 71 subfield 1. * Changed comments for position 3 of DE 48 SE 71. Add * three new fields to Banknet switch token. Update the * Banknet switch token version id to '13'. * Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, * BNETLIBS, BNETS, DDLBATKN, RQBNRLFS. * Run Make. Replace BNETMNWD and BNETUPDT. * Reference: WO #091012-04 #ADD 01157e02 SEM * 18 - Fraud Scoring Service #ADD 01157R0A SEM * Valid values position 3 (on-behalf result 1) and * valid position 1-2 and position 3 value combinations #DELETE 01157R0B/01157j0Z SEM #ADD 01157e0T SEM * * Authorization System Advice Date and Time * Subfield tag = 15 * Contains the Authorization System Advice Date and Time in * AFD completion advices. * 06 auth-sys-adv-sub-fld-15. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 dat pic 9(6). 10 tim pic 9(4). * * Fraud Scoring Data * Subfield tag = 75 * Contains the Fraud Scoring Data when Expert Monitoring * Fraud Scoring Service is performed on the transaction. * 06 fraud-scoring-data-sub-fld-75. 08 tag pic 99. 08 lgth pic 99. 08 fraud-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(3). #REPLACE 01157j0j SEM 04 user-fld pic x(23). #REPLACE 02760j01 SAF-BNET * Switch token version (ver-id) will be "13". #ADD 02760j0P SAF-BNET 02 pin-cap-cde pic 9(2). 02 auth-sys-adv-dat-tim pic 9(10). 02 fraud-score pic 9(3). 02 user-fld-aci pic x. #ENDSCN = SW0E030 !#CMP2.28 02/10/10 BNETG 6063 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6063 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6063 * ******************************************************************************** #SCN = SW0E032 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00026<0o ! 10FEB2010 bensone ! Symptom: Banknet Release 10.1 Mandates Phase 1 ! Problem: None ! Fix: Global 502, modify the defines 'pos^preauth^match^d' ! and 'sem^preauth^match^d' to recognize when a ! transaction satisfies the criteria for sending an AFD ! completion advice. ! Global 503, add a new define 'funding^transaction^d' ! to identify funding transactions by MCC '6539'. ! Global Operations Revised Maestro and Cirrus ATM Access ! Fee Standards, add a new define 'sem^inq^no^fee^d' to ! identify an external inquiry transaction that does not ! contain a key. ! Case #506988, prevent 'Reverse Channel Writes' by ! increasing the reply buffer size using NETINIT. Source ! in 'blk^size^constants' from BADDLTAL ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, RQBNRLFS. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #091012-04 #ADD 00026&0J ? blk^size^constants #ADD 00026&0M ! blk^size^constants #ADD 00166&09 define pos^preauth^match^d( x ) = ( x.retl^sic^cde = "5542" )#; define sem^preauth^match^d( x ) = ( x.merch^typ = "5542" )#; #DELETE 00166&0A/00166&0G #ADD 00175&02 define funding^transaction^d = "6539"#; #ADD 00228;03 sem^inq^no^fee^d( x ) = ( x.proc^cde = "30" and ( x.tran^amt = zeroes for $len( x.tran^amt ) ) )#, #ENDSCN = SW0E032 !#CMP2.28 02/10/10 BNETLIBS61101FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61101 * ******************************************************************************** #SCN = SW0E033 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61101 #NEWVERSION = 61102 #ADD P044190R ! 10FEB2010 bensone ! Symptom: Banknet Release 10.1 Mandates Phase 1 ! Problem: None ! Fix: Global 104, remove support for a value of '3' in ! DE 48 SE 42 subfield 1 position 2, for both acquirer ! and issuer processing. ! Global 502, interface will be modified to support ! pre-authorization completion messages in both its ! acquirer and issuer processing. ! Global 503, interface will be modified to support ! funding transactions at an ATM as a POS purchase ! transaction in its issuer processing. ! Global 512, interface will be modified to support ! MasterCard Pay with Rewards Service in its acquirer ! processing. ! Global 103, interface will be modified to support ! DE 48 SE 75 field in 0100/Authorization Request and ! 0120/Authorization Advice messages in its issuer ! processing, and to include the data in the Banknet ! switch token in order to allow customers to pass the ! fraud score to PRM. ! Case #01018610, interface will be modified to map ! account balances to the correct fields in the POS ! Balances token in its acquirer processing. ! Case #01017741 - New Clearing Data Integrity Edits, ! interface will be modified to add DE26 to the Banknet ! switch token. ! Case #00927495, interface will be modified to correct ! DE 38 processing for UK Domestic Maestro. ! Procs Modified: pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xadv^to^pstm^0220 ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, RQBNRLFS. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #091012-04 #REPLACE 06578=01 PSTM^FRMT^0210^TO^XRESP init( sem.auth^id^resp, " ", $len( sem.auth^id^resp ) ); #ADD 06601r02 PSTM^FRMT^0210^TO^XRESP if not ascii^integer^( pstm.tran.apprv^cde^lgth, lgth ) then begin if pct.pos.appr^cde^lgth > 0 then begin lgth := pct.pos.appr^cde^lgth; end else begin lgth := $min( $len( pstm.tran.apprv^cde ), $len( sem.auth^id^resp ) ); end; end; ! get approval code length ! ! DE-38 always sent for UKDM referrals, even if zeroes ! if sem^referral^d( sem ) then begin auth^id^resp^bit^d := 1; init( sem.auth^id^resp, " ", $len( sem.auth^id^resp ) ); init( sem.auth^id^resp, "0", lgth ); end; #DELETE 06601=00/06601=05 PSTM^FRMT^0210^TO^XRESP #ADD 06601=0B PSTM^FRMT^0210^TO^XRESP ! ! ! DE-38 always sent for UKDM, if available ! ! ! auth^id^resp^bit^d := 1; init( sem.auth^id^resp, " ", $len( sem.auth^id^resp ) ); #DELETE 06601=0C/06601=0O PSTM^FRMT^0210^TO^XRESP #DELETE 07175v0I PSTM^FRMT^0220^TO^XADV #ADD 07175v0L PSTM^FRMT^0220^TO^XADV movd ( sem.advice^cde.reason^cde, "191" ); #DELETE 07200=03/07200=08 PSTM^FRMT^0220^TO^XADV #ADD 07200=0D PSTM^FRMT^0220^TO^XADV ! ! ! DE-38 always sent for UKDM, if available ! ! ! auth^id^resp^bit^d := 1; init( sem.auth^id^resp, " ", $len( sem.auth^id^resp ) ); #ADD 07200=0g PSTM^FRMT^0220^TO^XADV init( sem.auth^id^resp, " ", $len( sem.auth^id^resp ) ); #DELETE 07200=0h PSTM^FRMT^0220^TO^XADV #ADD 07211 PSTM^FRMT^0220^TO^XADV if sem.advice^cde.reason^cde = " " then begin movd ( sem.advice^cde.reason^cde, "190" ); end; #DELETE 07212 PSTM^FRMT^0220^TO^XADV #ADD E0901001 PSTM^FRMT^SEM^ADDL^DATA ( e^com^addl^data^tkn.crdhldr^authn^ind = "1" or e^com^addl^data^tkn.crdhldr^authn^ind = "2" ) then #DELETE E0901002/E0901003 PSTM^FRMT^SEM^ADDL^DATA #ADD 10599~00 SEM^FRMT^AMT^TO^PSTM^AMT if base24^rel^g >= 5 and not pos^inquiry^d( pstm ) and #DELETE 10599~01 SEM^FRMT^AMT^TO^PSTM^AMT #REPLACE 10599#0X SEM^FRMT^AMT^TO^PSTM^AMT sem.addl^amt.info[ i ].crncy^cde <> #REPLACE 10599#0x SEM^FRMT^AMT^TO^PSTM^AMT sem.addl^amt.info[ i ].crncy^cde = #REPLACE 10599#1Y SEM^FRMT^AMT^TO^PSTM^AMT sem.addl^amt.info[ i ].crncy^cde <> #REPLACE 10599#1x SEM^FRMT^AMT^TO^PSTM^AMT sem.addl^amt.info[ i ].crncy^cde = #ADD 11594r00 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem^preauth^match^d( sem ) and #DELETE 11594r01/11594~02 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0S SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.typ = sem^auth^advice^d and ( sem.advice^cde.reason^cde = "190" or sem.advice^cde.reason^cde = "191" ) then #DELETE 11594r0T SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11891 SEM^FRMT^XADV^TO^PSTM^0220 if auth^id^resp^bit^d and sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * [" "] ] and sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * ["0"] ] then #DELETE 11892 SEM^FRMT^XADV^TO^PSTM^0220 #ADD 11981 SEM^FRMT^XADV^TO^SEM^XACK if adv.advice^cde.reason^cde = "190" or adv.advice^cde.reason^cde = "191" then begin addl^data^bit^d := 1; end; #ADD 12154~02 SEM^FRMT^XRESP^TO^PSTM^0210 addl^amt^bit^d then #DELETE 12154~03 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12154#06 SEM^FRMT^XRESP^TO^PSTM^0210 ! DE 54 present #DELETE 12154#07 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12180 /12181 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12520A02 SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.auth^inst.cde = "000000" or rqst.auth^inst.cde = "000001" then #DELETE 12520A03 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12520A0A SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.auth^inst.cde = "000" then #ADD 12520A0F SEM^FRMT^XRESP^TO^PSTM^0210 end else begin ! ! ! Response provided by issuer ! ! ! movd( pos^data1^tkn.resp^src^rsn^cde, "5" ); #ADD 12633A02 SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.auth^inst.cde = "000000" or rqst.auth^inst.cde = "000001" then #DELETE 12633A03 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12633A0A SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.auth^inst.cde = "000" then #ADD 12633A0F SEM^FRMT^XRESP^TO^PSTM^0210 end else begin ! ! ! Response provided by issuer ! ! ! movd( pos^data1^tkn.resp^src^rsn^cde, "5" ); #ADD 13881 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.proc^cde = sem^hlthcr^d or sem.proc^cde = sem^pmnt^txn^d or sem.merch^typ = funding^transaction^d ) then #DELETE 13882 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 13893F00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde = sem^hlthcr^d then begin movd( txn^subtyp^tkn.txn^subtyp, hlthcr^srvc^sub^d ); end else if sem.proc^cde = sem^pmnt^txn^d then begin movd( txn^subtyp^tkn.txn^subtyp, pmnt^from^3rd^prty^d ); end else begin movd( txn^subtyp^tkn.txn^subtyp, pmnt^to^3rd^prty^d ); end; #DELETE 13893F01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14771J0W SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec = "21" then #DELETE 14771J0X/14771J0Z SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15180 SEM^FRMT^XRQST^TO^PSTM^0200 ! Transaction Subtype token added earlier in proc, but ! #DELETE 15181 /15182 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 15185 /15223 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15732r00 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem^preauth^match^d( sem ) and #DELETE 15732r01/15732~02 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 18502v09 UTIL^EXPAND^SEM else if ptr[ length ] = "15" then begin movl( sem^ptr.addl^data.info. auth^sys^adv^sub^fld^15.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 18618 UTIL^EXPAND^SEM else if ptr[ length ] = "75" then begin ! ! ! Fraud Scoring Data ! ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! ! Move Subfield 1 - Fraud Score ! ! ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; length := length + tag^length + 4; end ! of if ptr[ length ] = "75" ! #REPLACE E2499701 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "13"; #ADD E251340P UTIL^SWI^TKN^INIT if sem.addl^data.info. auth^sys^adv^sub^fld^15.tag = "15" then begin move( bnet^tkn^buf.auth^sys^adv^dat^tim, sem.addl^data.info.auth^sys^adv^sub^fld^15. tag^data ); end; if sem.addl^data.info. fraud^scoring^data^sub^fld^75.tag = "75" then begin move( bnet^tkn^buf.fraud^score, sem.addl^data.info.fraud^scoring^data^sub^fld^75. fraud^score.tag^data ); end; #ADD E251360A UTIL^SWI^TKN^INIT if pin^cap^cde^bit^d or sem.typ = sem^auth^response^d then begin move( bnet^tkn^buf.pin^cap^cde, sem.pin^cap^cde ); end else begin mov^( bnet^tkn^buf.pin^cap^cde, blanks ); end; #ADD E2538707 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.pin^cap^cde <> [ $len( bnet^tkn^buf.pin^cap^cde ) * [ " " ] ] then begin move( bnet^tkn.pin^cap^cde, bnet^tkn^buf.pin^cap^cde ); end; #ADD E254040W UTIL^SWI^TKN^UPDT if bnet^tkn^buf.auth^sys^adv^dat^tim <> blanks for $len( bnet^tkn^buf.auth^sys^adv^dat^tim ) then begin movl( bnet^tkn.auth^sys^adv^dat^tim, bnet^tkn^buf.auth^sys^adv^dat^tim, $len( bnet^tkn.auth^sys^adv^dat^tim ) ); end; ! of if bnet^tkn^buf.auth^sys^adv^dat^tim if bnet^tkn^buf.fraud^score <> blanks for $len( bnet^tkn^buf.fraud^score ) then begin movl( bnet^tkn.fraud^score, bnet^tkn^buf.fraud^score, $len( bnet^tkn.fraud^score ) ); end; ! of if bnet^tkn^buf.fraud^score #ENDSCN = SW0E033 !#CMP2.28 02/10/10 BNETS 60131FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60131 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60131 * ******************************************************************************** #SCN = SW0E034 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t000260P ! 10FEB2010 bensone ! Symptom: Banknet Release 10.1 Mandates Phase 1 ! Problem: None ! Fix: Global 502, interface will be modified to support ! pre-authorization completion messages in both its ! acquirer and issuer processing. ! Global 503, interface will be modified to support ! funding transactions at an ATM as a POS purchase ! transaction in its issuer processing. ! Global Operations Revised Maestro and Cirrus ATM Access ! Fee Standards, interface will be modified to support ! reversals of balance inquiries. ! Europe Region 511, interface will be modified to ! decline any card activation requests. ! Case #506988, prevent 'Reverse Channel Writes' by ! increasing the reply buffer size using NETINIT. ! Procs Modified: bnets^60^130 ! pstm^0420^reversal ! sem^advice^pos ! sem^request^pos ! tim^out^00^outbound ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, RQBNRLFS. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #091012-04 #ADD 00305R03 BNETS^60^131 max^output^blk^lgth^l, #DELETE 00305R04 BNETS^60^131 #DELETE Y052100K PSTM^0420^REVERSAL #ADD 05757501 SEM^ADVICE^POS not sem^fncl^txn^d( sem ) or sem.merch^typ = funding^transaction^d ) and not frwd^dcln^advc^g then #DELETE 05757502/05757503 SEM^ADVICE^POS #ADD G067632P SEM^REQUEST^POS if sem.proc^cde = sem^pmnt^txn^d and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag = "77" and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C09" then begin ! ! Decline card activation requests ! if frwd^dcln^advc^g then begin if frmt^err := sem^frmt^xrqst^to^pstm^0200( sem, pstm, sta^x ) then begin call sem^request^deny( susp, sta^x, frmt^err, sub^format^error^l ); return; end else begin ! ! ! LCONF parameter FRWD-DCLN-ADVC set to 'Y' and ! ! frmt^err = false, then forward to Router ! ! Authorization. ! ! ! movd( pstm.typ, force^post^d ); movd( pstm.tran.resp^cde, "055" ); call util^send^pstm( pstm, pct.pos.dest ); call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; ! of if frmt^err := ... ! end; ! of if frwd^dcln^advc^g ! call sem^request^deny( susp, sta^x, resp^tran^not^supp^sem^l, sub^format^error^l ); return; end; #ADD Y0802300 TIM^OUT^00^OUTBOUND if ( sem^fncl^txn^d( sem ) or sem.proc^cde = sem^pin^unblk^d or sem.proc^cde = sem^pin^chng^d ) then #DELETE Y0802301 TIM^OUT^00^OUTBOUND #ENDSCN = SW0E034 !#CMP2.28 02/10/10 RQBNRLFS6025 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.RQBNRLFS RQBNRLFS 6025 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.RQBNRLFS RQBNRLFS 6025 * ******************************************************************************** #SCN = SW0E035 , FILEID = RQBNRLFS #VOLUME = $ROOK.SW60BNET #FILE = RQBNRLFS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6025 #NEWVERSION = 6026 #ADD 00018Y0c * 10FEB2010 bensone * Symptom: Banknet Release 10.1 Mandates Phase 1 * Problem: None * Fix: Canada region 505, allow a space to be entered * in the ACCOUNT CATEGORY field on the MCC107 * screen of the Banknet Request Log File (BNRLF). * Modified: 400-MOVE-RECORD * Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, * BNETG, BNETLIBS, BNETS, DDLBATKN, RQBNRLFS. * Run Make. Replace BNETMNWD and BNETUPDT. * Reference: WO #091012-04 #ADD 00715SKS 480-DATA-CHECK ACCT-CAT OF MCC107 OF PATH-RQST NOT = "B" AND ACCT-CAT OF MCC107 OF PATH-RQST NOT = " " #DELETE 00715SKT 480-DATA-CHECK #ADD 00715SKX 480-DATA-CHECK MOVE "ACCOUNT CATEGORY MUST BE 'B' OR SPACE" TO ERR-TXT #DELETE 00715SKY 480-DATA-CHECK #ENDSCN = SW0E035 !#CMP2.28 03/12/10 BNETLIBS61102FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61102 * ******************************************************************************** #SCN = SW0E086 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61102 #NEWVERSION = 61103 #ADD Q044190l ! 12MAR2010 wielerk ! Symptom: 0130 messages generated by this module contain an ! incorrect length in de-48( addl-data ). ! Problem: For se-15 ( auth system advice date/time ), collapse ! logic was not created based on interchange rules on ! message content. The interchange has changed those ! rules to require de-48 se-15 in acks. ! Fix: Add logic to collapse de-48 se-15 correctly. ! Proc Modified: util^collapse^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1065891. #ADD 17023A00 UTIL^COLLAPSE^SEM if hdr.addl^data.info. auth^sys^adv^sub^fld^15.tag = "15" then begin ! ! convert the length ! call ascii^integer( hdr.addl^data.info. auth^sys^adv^sub^fld^15. lgth, 2, tag^length ); ! ! move tag, tag^lgth and tag^data to ptr ! movl( ptr, hdr.addl^data.info. auth^sys^adv^sub^fld^15.tag, ( tag^length + 4 ) ); ! ! convert data moved to ptr to EBCDIC ! call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); ! ! move the pointer past the data moved in ! @ptr := @ptr[ tag^length + 4 ]; end; ! of SE 15, Auth System Advice Date/Time #ENDSCN = SW0E086 !#CMP2.28 03/19/10 BNETG 6064 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6064 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6064 * ******************************************************************************** #SCN = SW0E093 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00026>0L ! 19MAR2010 wielerk ! Symptom: This module was alternate routing fallback transactions ! instead of denying them. ! Problem: Fallback transactions were not being denied correctly if ! configured by the LCONF to do so, logic allowed them to ! be alternately routed or denied for a response code ! unrelated to a fallback denial. ! Fix: Added a literal, resp^fallback^dec^atm^l = 088. ! Dependency: Apply fixes to BNETG, BNETATMS, BNETEMVS. Run Make. ! Reference: Case #1066176. #REPLACE 00245v0D literal resp^fallback^dec^atm^l = 088; #ENDSCN = SW0E093 !#CMP2.28 03/22/10 BNETG 6065 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6065 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6065 * ******************************************************************************** #SCN = SW0E097 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00026|0B ! 22MAR2010 wielerk ! Symptom: This module was alternate routing fallback transactions ! instead of denying them. ! Problem: Fallback transactions were not being denied correctly if ! configured by the LCONF to do so, logic allowed them to ! be alternately routed or denied for a response code ! unrelated to a fallback denial. ! Fix: Added a literal, resp^dec^emv^fallback^l = 408. ! Dependency: Apply fixes to BNETG, BNETS, BNETLIBS, BNETEMVS. ! Run Make. ! Reference: Case #1066423. #ADD 00264k01 literal resp^dec^emv^fallback^l = 408; #ENDSCN = SW0E097 !#CMP2.28 03/22/10 BNETS 60132FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60132 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60132 * ******************************************************************************** #SCN = SW0E098 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u000260Q ! 22MAR2010 wielerk ! Symptom: This module was alternate routing fallback transactions ! instead of denying them. ! Problem: Fallback transactions were not being denied correctly if ! configured by the LCONF to do so. Logic allowed them to ! be alternately routed or denied for a response code ! unrelated to a fallback denial. ! The module only recognized a timeout substate as a ! value to generate a denial, all others were available to ! be alternately routed if configured to do so. ! Fix: Modified logic to allow a response code of "408" to be ! generated and passed to a denied PSTM. ! Modified logic to recognize additional substate values ! to cause transactions to be denied and not alternately ! routed. ! Procs Modified: pstm^0200^request ! pstm^0200^route ! sem^response^pos ! Dependency: Apply fixes to BNETG, BNETS, BNETLIBS, BNETEMVS. ! Run Make. ! Reference: Case #1066423. #REPLACE 04825 SUB^APPRV^BLIND sub^format^error^l ) #ADD 04882d00 PSTM^0200^ROUTE if substate = sub^system^error^l or substate = sub^format^error^l or substate = sub^fail^pre^auth^l then #DELETE 04882d01 PSTM^0200^ROUTE #ADD 04882d02 PSTM^0200^ROUTE movd( pstm.responder, interface^orig^d ); #ADD 04882{0F PSTM^0200^ROUTE movd( pstm.responder, interface^orig^d ); #REPLACE G0718204 SEM^RESPONSE^POS sub^rqst^down^l ); #ENDSCN = SW0E098 !#CMP2.28 03/22/10 BNETLIBS61103FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61103 * ******************************************************************************** #SCN = SW0E099 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61103 #NEWVERSION = 61104 #ADD R044190C ! 22MAR2010 wielerk ! Symptom: This module was alternate routing fallback transactions ! instead of denying them. ! Problem: Fallback transactions were not being denied correctly if ! configured by the LCONF to do so. Logic allowed them to ! be alternately routed or denied for a response code ! unrelated to a fallback denial. ! Fix: Modified logic to allow a response code of "408" to be ! generated and passed to a denied PSTM. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETG, BNETS, BNETLIBS, BNETEMVS. ! Run Make. ! Reference: Case #1066423. #ADD 05964N1t PSTM^FRMT^0200^TO^XRQST if ( response := pstm^frmt^b24^tkn^to^xrqst^emv( sem, pstm ) ) <> true then begin return response; end; #DELETE 05964N1u/05964N1x PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0E099 !#CMP2.28 04/13/10 BNETS 60133FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60133 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60133 * ******************************************************************************** #SCN = SW0E113 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v000260M ! 06APR2010 engelk ! Symptom: DE-63.2, Banknet reference number, assigned to a SEM ! 0120 advice by MasterCard was not logged to the ILF ! and is required for clearing. ! Problem: ILF record for the SEM 0120 advice was not updated ! with data from the SEM 0130 advice acknowledgement ! when it was received. ! Fix: Added code to update the SEM 0120 ILF record with the ! following data elements from the SEM 0130: ! DE-6 - card issuing amount ! DE-10 - conversion rate, card issuer ! DE-15 - settlement date (MMDD) ! DE-16 - conversion date (MMDD) ! DE-51 - issuer currency code ! DE-63 - banknet data ! Procs modified: sem^advice^response ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #1067974 #ADD 05791 SEM^ADVICE^RESPONSE struct .advc( sem^def ); #REPLACE 05792 SEM^ADVICE^RESPONSE struct .ilf( ilf^def ); #ADD 05795 SEM^ADVICE^RESPONSE int .base24^msg[ 0:wlen( msg^def ) - 1 ]; int fnum := -1; int ilf^found := false; #DELETE 05796 SEM^ADVICE^RESPONSE #REPLACE 05796]00 SEM^ADVICE^RESPONSE int ilf^lgth := 0; #REPLACE 05796]04 SEM^ADVICE^RESPONSE string .rt^just^termid[ 0:( $len( bniif^def.mci^id ) - 1 ) ]; #ADD 05822 SEM^ADVICE^RESPONSE call util^saf^delete( saf, $len( saf^bnet^def ) ); ! ! Find and update the ILF record, so that DE-63, subfield 2 ! (Banknet Reference Number) is available for clearing and ! acquirer-generated First Presentment/1240 message ! Also, update the following data elements which were not ! present in the original 0120: ! DE-6 - card issuing amount ! DE-10 - conversion rate, card issuer ! DE-15 - settlement date (MMDD) ! DE-16 - conversion date (MMDD) ! DE-51 - issuer currency code ! DE-63 - banknet data ! call sem^frmt^prikey( sem, susp.prikey, true ); call hiswutil^justify^field( rt^just^termid, $occurs( rt^just^termid ), susp.prikey.term^id, $len( susp.prikey.term^id ), right^justify^l ); init( susp.prikey.term^id, " ", $len( susp.prikey.term^id ) ); movl( susp.prikey.term^id, rt^just^termid, $occurs( rt^just^termid ) ); if ( fnum := util^ilf^get( susp.prikey, $len( susp.prikey ), ilf, ilf^lgth, base24^msg, advc ) ) then begin ilf^found := true; if crd^iss^amt^bit^d then ! P-6 ! begin move( advc.crd^iss^amt, sem.crd^iss^amt ); end; if conv^rate^crd^iss^bit^d then ! P-10 ! begin move( advc.conv^rate^crd^iss, sem.conv^rate^crd^iss ); end; if setl^dat^bit^d then ! P-15 ! begin move( advc.setl^dat, sem.setl^dat ); end; if conv^dat^bit^d then ! P-16 ! begin move( advc.conv^dat, sem.conv^dat ); end; if iss^crncy^cde^bit^d then ! P-51 ! begin move( advc.iss^crncy^cde, sem.iss^crncy^cde ); end; if banknet^data^bit^d then ! P-63 ! begin move( advc.banknet^data, sem.banknet^data ); end; if not util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, base24^msg, sem ) then begin call util^ilf^add( dat, susp.prikey, $len( susp.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, advc, $len( sem^def ), sub^format^error^l ); end; ! If ILF record could not be updated ! end; ! ILF record found ! if not ilf^found then begin call util^ilf^add( dat, susp.prikey, $len( susp.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, sem, $len( sem^def ), sub^format^error^l ); end; ! ilf record not found ! #DELETE 05823 SEM^ADVICE^RESPONSE #REPLACE 05825 SEM^ADVICE^RESPONSE end; ! SAF timer found ! #ENDSCN = SW0E113 !#CMP2.28 04/13/10 BNETLIBS61104FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61104 * ******************************************************************************** #SCN = SW0E114 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61104 #NEWVERSION = 61105 #ADD S044190E ! 06APR2010 engelk ! Symptom: DE-63.2, Banknet reference number, assigned to a SEM ! 0120 advice by MasterCard was not logged to the ILF ! and is required for clearing. ! Problem: ILF record for the SEM 0120 advice was not updated ! with data from the SEM 0130 advice acknowledgement ! when it was received. ! Fix: Added code to update the SEM 0120 ILF record with the ! following data elements from the SEM 0130: ! DE-6 - card issuing amount ! DE-10 - conversion rate, card issuer ! DE-15 - settlement date (MMDD) ! DE-16 - conversion date (MMDD) ! DE-51 - issuer currency code ! DE-63 - banknet data ! The ILF look-up required the modification of the SEM ! advice format proc as DE-127 is required to find the ! ILF record when the 0130 is processed. DE-127 is ! optional in the 0120 and was not previously sent ! because it was not needed. It is required to be ! echoed without modification in the 0130 if present in ! the 0120. ! Also, modified the length of the term^id array used ! to suspend external requests as it was too short. ! Procs modified: pstm^frmt^0220^to^xadv ! util^suspend^and^send^sem ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #1067974 #ADD 07175v0K PSTM^FRMT^0220^TO^XADV move( orig^sem.private^data, sem.private^data ); #ADD E0719402 PSTM^FRMT^0220^TO^XADV adnl^data^ntl^bit^d := 0; ! S-112 ! file^rec^bit^d := 0; ! S-120 ! if sem.sbit^map = [ $len( sem.sbit^map ) * [ 0 ] ] then begin sbit^map^bit^d := 0; end; #DELETE 07195 /07200 PSTM^FRMT^0220^TO^XADV #REPLACE 24785 UTIL^SUSPEND^AND^SEND^SEM string left^just^term^id[0:( $len( bniif^def.mci^id ) - 1 )]; #ENDSCN = SW0E114 !#CMP2.28 04/21/10 BNETLIBS61105FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61105 * ******************************************************************************** #SCN = SW0E123 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61105 #NEWVERSION = 61106 #ADD T044190T ! 21APR2010 swiftd ! Symptom: Reg E compliance. ! Problem: The goal is to provide the means for BASE24 U.S. ! customers to identify those transactions that are ! subject to the regulation, i.e. ATM and single-debit ! transactions (which are subject to the overdraft ! protection rule) versus Recurring Payments/Installment ! Payments (which are not subject to the overdraft ! protection rule). This will enable customers to make ! changes to their authorization logic to process ! transactions appropriately. ! Fix: Made code changes to positively identify recurring ! payments. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: WO #100301-01. #ADD 05964c05 PSTM^FRMT^0200^TO^XRQST if pos^data1^tkn.recur^pmnt^ind = "R" or pos^data1^tkn.recur^pmnt^ind = "I" then #DELETE 05964c06 PSTM^FRMT^0200^TO^XRQST #ADD 05964N0M PSTM^FRMT^0200^TO^XRQST ( ps51^get^tkn.moto^flg = "2" or ps51^get^tkn.moto^flg = "3" ) ) then #DELETE 05964N0N PSTM^FRMT^0200^TO^XRQST #ADD 0684890D PSTM^FRMT^0210^TO^XRESP ( pos^data1^tkn.recur^pmnt^ind <> "R" and pos^data1^tkn.recur^pmnt^ind <> "I" ) then #DELETE 0684890E PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0E123 !#CMP2.28 04/22/10 BNETG 6066 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6066 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6066 * ******************************************************************************** #SCN = SW0E130 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00026@0C ! 22APR2010 swiftd ! Symptom: Banknet Release 10.1 Release Item LAC 111 ! Problem: None ! Fix: Added new global variable sppt^non^emv^pin^chng^g ! in the section bnet^glbl^def and globals^def. ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETLIBS, BNETG, ! and BNETS. Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #100305-01 #ADD 00026X01 !##################################################################### !# # !# BNET GLOBALS IS OUT OF SPACE # !# # !# The Banknet Interface has almost reached the limit of 256 bytes # !# of primary global space # !# # !# ALL NEW GLOBALS MUST BE ADDED TO THE NEW GLOBAL STRUCTURE AT # !# SCN# 00435:0A # !##################################################################### #DELETE 00026X02 #ADD 00435:01 !##################################################################### !# # !# BNET GLOBALS IS OUT OF SPACE # !# # !# The Banknet Interface has almost reached the limit of 256 bytes # !# of primary global space # !# # !# ALL NEW GLOBALS MUST BE ADDED TO THE FOLLOWING STRUCTURE # !##################################################################### #DELETE 00435:02/00435:04 #ADD 00435:0F int sppt^non^emv^pin^chng^g; #ADD 01366u05 int sppt^non^emv^pin^chng^g; #ENDSCN = SW0E130 !#CMP2.28 04/22/10 BNETLIBS61106FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61106 * ******************************************************************************** #SCN = SW0E131 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61106 #NEWVERSION = 61107 #ADD U044190I ! 22APR2010 swiftd ! Symptom: Minor Errors in the Banknet Interface ! Problem: These reported errors have been addressed along with the ! Release Item LAC 111 changes. ! Fix: 1) The interface has been modified to ensure that only ! one logoff message is sent to Banknet. ! 2) The interface has been modified to ensure that only ! one logon message is sent to Banknet. ! 3) The interface has been modified to ensure that Amount ! Types 10 and 11 are not included in DE 54 in 0110 ! response messages returned to Banknet. ! 4) The interface has been modified to ensure that ! appropriate response codes are set for ATM ! transactions processed via BASE24-pos. ! 5) The interface has been modified to ensure that a ! BASE24-atm response code of '74' is mapped to a ! Banknet response code of '57'. ! 6) The interface has been modified to ensure that ! DE 61.11 is set correctly. ! Procs Modified: pstm^frmt^amt^to^sem^amt ! pstm^frmt^resp^cde^to^sem ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETLIBS, BNETG, ! and BNETS. Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: Case #01022657 ! ! 22APR2010 swiftd ! Symptom: New Merchant Category Code. ! Problem: None. ! Fix: Global Operations Bulletin No. 3 introduces a Merchant ! Category Code (MCC) of '9754' (Gambling-Horse Racing, ! Dog Racing, State Lotteries). The Banknet Interface ! currently performs specific processing on transactions ! with an MCC of '7995' (Gambling Transactions). This ! processing must be extended to transactions with an MCC ! of '9754'. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETLIBS, BNETG, ! and BNETS. Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: Case #01069250. #ADD 05708x0A PSTM^FRMT^0200^TO^XRQST if sem.merch^typ = "7995" or sem.merch^typ = "9754" then #DELETE 05708x0B PSTM^FRMT^0200^TO^XRQST #ADD 06175N0A PSTM^FRMT^0200^TO^XRQST if ( sem.merch^typ = "7995" or sem.merch^typ = "9754" ) and #DELETE 06176 PSTM^FRMT^0200^TO^XRQST #ADD 07920 PSTM^FRMT^AMT^TO^SEM^AMT if not pos^purch^cb^d( pstm ) then begin init( sem.addl^amt, " ", $len( sem.addl^amt ) ); addl^amt^bit^d := 0; end; #REPLACE 08107 PSTM^FRMT^RESP^CDE^TO^SEM "055",! Invalid Tran ! "*4",! A - 57, P - 12! #REPLACE 08119`02 PSTM^FRMT^RESP^CDE^TO^SEM "064",! Bad Track2 ! "*4",! A - 57, P - 12 ! #REPLACE 08142 PSTM^FRMT^RESP^CDE^TO^SEM "078",! Duplicate Tran ! "*2",! A - 70, P - 94! #REPLACE 08152 PSTM^FRMT^RESP^CDE^TO^SEM "088",! Place Call ! "70",! ! #REPLACE 08170 PSTM^FRMT^RESP^CDE^TO^SEM "100",! Referral; unable to proc! "*1",! A - 57, P - 01! #REPLACE 08173 /08174 PSTM^FRMT^RESP^CDE^TO^SEM "103",! Referral; NEG file prob ! "*1",! A - 57, P - 01! "104",! Referral; CAF file prob ! "*1",! A - 57, P - 01! #REPLACE 08176 /08182 PSTM^FRMT^RESP^CDE^TO^SEM "106",! Referral; Amt over max ! "*1",! A - 57, P - 01! "107",! Referral; Over daily lim! "*1",! A - 57, P - 01! "108",! Referral; CAPF not found! "*1",! A - 57, P - 01! "109",! Referral; Advance < min ! "*1",! A - 57, P - 01! "110",! Referral; Number times ! "*1",! A - 57, P - 01! "111",! Referral; Delinquent ! "*1",! A - 57, P - 01! "112",! Referral; Over limit ! "*1",! A - 57, P - 01! #REPLACE 08183y01 PSTM^FRMT^RESP^CDE^TO^SEM "113",! Referral; Timeout ! "*1",! A - 57, P - 01! #REPLACE 08184 /08187 PSTM^FRMT^RESP^CDE^TO^SEM "115",! Referral; PTLF Full ! "*1",! A - 57, P - 01! "120",! UAF File Problem ! "*1",! A - 57, P - 01! "121",! Admin File Problem ! "*1",! A - 57, P - 01! "122",! Admin File Problem ! "*1",! A - 57, P - 01! #REPLACE 08189 /08193 PSTM^FRMT^RESP^CDE^TO^SEM "130",! ARQC failure referral ! "*1",! A - 57, P - 01! "131",! CVR referral ! "*1",! A - 57, P - 01! "132",! TVR referral ! "*1",! A - 57, P - 01! "133",! Rsn Online Cde referral ! "*1",! A - 57, P - 01! "134",! Fallback Reverral ! "*1",! A - 57, P - 01! #REPLACE 08195 PSTM^FRMT^RESP^CDE^TO^SEM "150",! Invalid Service Code ! "*3",! Invalid merchant! #ADD 08263 PSTM^FRMT^RESP^CDE^TO^SEM if sem^atm^d( sem ) or sem^ncd^txn^d( sem ) then #DELETE 08264 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08268 PSTM^FRMT^RESP^CDE^TO^SEM !*2! rcode ':=' "70"; !*3! rcode ':=' "57"; !*4! rcode ':=' "57"; #DELETE 08269 /08274 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08275 PSTM^FRMT^RESP^CDE^TO^SEM #DELETE 08276 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08285 PSTM^FRMT^RESP^CDE^TO^SEM else if rcode = "*3" then rcode ':=' "03" else if rcode = "*4" then rcode ':=' "12" #REPLACE E0832501 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 66, #ADD E0843802 PSTM^FRMT^SEM^ADDL^DATA "9751" , "9752" , "R" , "9754" , "9754" , "U" ]; #DELETE 08439 PSTM^FRMT^SEM^ADDL^DATA #ADD 09459I00 PSTM^FRMT^SEM^ADDL^DATA if pstm.retl^sic^cde = "7995" or pstm.retl^sic^cde = "9754" then #DELETE 09459I01 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0E131 !#CMP2.28 04/22/10 BNETS 60134FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60134 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60134 * ******************************************************************************** #SCN = SW0E133 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w000260J ! 31MAR2010 swiftd ! Symptom: Banknet Release 10.1 Release Item LAC 111 ! Problem: None ! Fix: The interface has been modified to support PIN Change ! transactions, where EMV data is not present. ! Procs Modified: cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^paramproc ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETLIBS, BNETG, ! and BNETS. Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #100305-01 ! ! 31MAR2010 swiftd ! Symptom: Minor Errors in the Banknet Interface ! Problem: These reported errors have been addressed along with the ! Release Item LAC 111 changes. ! Fix: 1) The interface has been modified to ensure that only ! one logoff message is sent to Banknet. ! 2) The interface has been modified to ensure that only ! one logon message is sent to Banknet. ! 3) The interface has been modified to ensure that Amount ! Types 10 and 11 are not included in DE 54 in 0110 ! response messages returned to Banknet. ! 4) The interface has been modified to ensure that ! appropriate response codes are set for ATM ! transactions processed via BASE24-pos. ! 5) The interface has been modified to ensure that a ! BASE24-atm response code of '74' is mapped to a ! Banknet response code of '57'. ! 6) The interface has been modified to ensure that ! DE 61.11 is set correctly. ! Procs Modified: init^logoff ! init^logoff ! Dependency: Apply fixes to BNETATMS, BNETEMVS, BNETLIBS, BNETG, ! and BNETS. Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: Case #01022657 #ADD 02599R14 CMD^WARMBOOT^STORE^GLOBALS store^bnet^g^d( x ) = temp.x := bnet^g.x#, #ADD G025990M CMD^WARMBOOT^STORE^GLOBALS store^bnet^g^d( sppt^non^emv^pin^chng^g ); #ADD T0259907 CMD^WARMBOOT^STORE^GLOBALS bnet^g.sppt^non^emv^pin^chng^g := false; #ADD 02599T3D CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^bnet^g^d( x ) = bnet^g.x := temp.x#, #ADD G0259912 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^bnet^g^d( sppt^non^emv^pin^chng^g ); #ADD k028310O INIT^BNET^G bnet^g.sppt^non^emv^pin^chng^g := 0; #DELETE O0371904/O037190B SUB^INIT^LOGOFF #DELETE O0384805/O038480C SUB^INIT^LOGON #ADD i0394501 INIT^PARAMPROC "P", "BNET-SPPT-NON-EMV-PIN-CHANGE ", #ADD i039960C INIT^PARAMPROC ! ! BNET-SPPT-NON-EMV-PIN-CHANGE ! if not ferror then begin bnet^g.sppt^non^emv^pin^chng^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.sppt^non^emv^pin^chng^g := true; end; end; #ENDSCN = SW0E133 !#CMP2.28 04/30/10 BNETLIBS61107FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61107 * ******************************************************************************** #SCN = SW0E141 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61107 #NEWVERSION = 61108 #ADD V044190f ! 30APR2010 wielerk ! Symptom: E-commerce transactions acquired by Base24 are denied ! by Mastercard with format error response code. ! Problem: When formatting a Base24 acquired e-commerce transaction ! de-48.42.01.3 ( addl data.ecom sec sub 42.lvl sec.ucaf ) ! was passed with values that Mastercard does not allow. ! If de-22 ( pos entry mde ) = "81" ( e-com ), the data ! in de-48.42.01.3 must be "2" or "3". ! Fix: Added an edit to enforce the formatting of de-48 for ! e-commerce transactions using Mastercard Electronic ! cards. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #01071754. #ADD 05708v00 PSTM^FRMT^0200^TO^XRQST if sem.pos^entry^mde = "81" and ( sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag = "76" and sem.addl^data.info. mc^elec^accpt^ind^sub^fld^76.tag^data = "E" ) and ( sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" and sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind <> "2" and sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind <> "3" ) then begin return resp^format^error^pos^l; end; #ENDSCN = SW0E141 !#CMP2.28 05/14/10 BNETLIBS61108FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61108 * ******************************************************************************** #SCN = SW0E188 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61108 #NEWVERSION = 61109 #ADD W044190F ! 14MAY2010 wielerk ! Symptom: External responses are rejected by Mastercard with 0620 ! messages. ! Problem: When de-112 ( addl natl data ) is present and doesn't ! conform to the sub element coding scheme, the length ! of de-48 ( addl data ) is incorrectly reset. This ! incorrect value is carried over to the outbound ! response causing the subsequent reject. ! Fix: Modified logic used to identify incorrectly formatted ! de-112 data. ! Proc Modified: util^expand^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #01076472. #ADD 18889c14 UTIL^EXPAND^SEM if t^length > bad^lgth then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.adnl^data^natl.lgth, t^length ); end; ! of resetting field length #DELETE 18889c15/18889c17 UTIL^EXPAND^SEM #ENDSCN = SW0E188 !#CMP2.28 05/28/10 BNETG 6067 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6067 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6067 * ******************************************************************************** #SCN = SW0E203 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00026\09 ! 28MAY2010 saderc ! Symptom: Not on us (Our Card/not our ATM) MasterCard ATM trans ! are being logged to the PTLF, not the TLF. ! Problem: The sem^ncd^txn^d define is used to determine whether a ! an ATM transaction is a Non-Currency Dispense (NCD) ! transaction. This define currently does not include ! the merchant type "6011", which is why this transaction ! is being processed as POS. ! Fix: Modified the sem^ncd^txn^d define to include the ! merchant type "6011". ! Dependency: Apply fix to BNETG. Run Make. ! Reference: Case #1077113 #REPLACE 00233&00 x.merch^typ = "6011" or #ENDSCN = SW0E203 !#CMP2.28 06/17/10 BNETLIBS61109FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61109 * ******************************************************************************** #SCN = SW0E215 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61109 #NEWVERSION = 61110 #ADD X044190E ! 10JUN2010 swiftd ! Symptom: Banknet Release 10.1 Mandates Phase 2 ! Problem: None. ! Fix: 1) The interface has been modified to set DE 39 to "85" ! in an approved PIN Management authorization response. ! 2) The Banknet IPF Refresh module has been enhanced to ! allow acquirers to configure the BASE24 card type at ! the Product Type ID level. ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETATMS, BNETLIBS, and IPBNREFS. Run Make. ! Replace RUNIPBNR. ! Reference: WO #091028-02 Case #01073809 #ADD 08301 PSTM^FRMT^RESP^CDE^TO^SEM if pos^inquiry^d( pstm ) and pos^approved^d( pstm ) then begin movd( rcode, "85" ); end; #ENDSCN = SW0E215 !#CMP2.28 06/30/10 BNETLIBS61110FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61110 * ******************************************************************************** #SCN = SW0E221 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61110 #NEWVERSION = 61111 #ADD Y044190D ! 30JUN2010 saderc ! Symptom: The interface is not formatting the amt^2 field in the ! Original Currency token correctly while processing an ! external reversal message. ! Problem: The ascii^fixed^ routine is defined to calculate the ! length of the source variable using $len. Since amt^2 ! is defined as a string, the move length is incorrect. ! Fix: Replaced the ascii^fixed^ routine with the ascii^fixed ! routine to correctly convert the value in amt^2 to a ! fixed value. ! Proc Modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #1082547 #ADD P157620f SEM^FRMT^XRVSL^TO^PSTM^0420 ascii^fixed( amt^2, $occurs( amt^2 ), orig^crncy^60^amt^2 ); #DELETE P157620g SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0E221 !#CMP2.28 07/16/10 BNETLIBS61111FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61111 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61111 * ******************************************************************************** #SCN = SW0E239 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61111 #NEWVERSION = 61112 #ADD Z044190E ! 17JUL2010 engelk ! Symptom: Track1 (23) token was not added to the PSTM when a ! contactless mag stripe card was used and track1 data was ! available. ! Problem: Code present only added the Track1 if the POS entry mode ! was contact magnetic stripe. If track1 data is present ! in the external message, that data should be passed into ! BASE24 via the Track1 (23) token. ! Fix: Removed the POS entry mode check so that the Track1 (23) ! token is added if track1 data is included in the ! external message. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETLIBS and BNETATMS. Run Make. ! Reference: Case #1083721 #REPLACE 14326 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 and track1^bit^d then #DELETE 14327 /14328 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0E239 !#CMP2.28 07/20/10 BNETS 60135FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60135 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60135 * ******************************************************************************** #SCN = SW0E244 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x000260b ! 20JUL2010 wielerk ! Symptom: AFD Pre-auth completions not matching pre-auth responses ! on the ILF, preventing forwarding 0120 to Mastercard. ! Problem: There are Base24 acquirers that do not use fid i to ! return the original sequence number from the device to ! use as the pre-auth sequence number for matching the ! completion to the original pre-auth. ! Fix: Modified logic to log the ILF for an AFD pre-auth using ! de-38 as the sequence number value in the ILF key. ! Procs Modified: sem^response^pos ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #01074248. #REPLACE 07178 /07179 SEM^RESPONSE^POS response; int pos^mrch^tkn^lgth := 0; int .pos^mrch^tkn^ptr( pos^mrch^tkn^def ); int .pstm( pstm^def ) := @susp.intrn^msg; #REPLACE 07182 SEM^RESPONSE^POS string tkn^id[ 0:1 ]; #ADD Y0720600 SEM^RESPONSE^POS if pos^pre^auth^d( pstm ) and sem^preauth^match^d( sem ) then begin movd( tkn^id, pos^mrch^tkn^id^d ); if ( hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn^ptr, pos^mrch^tkn^lgth ) and pos^mrch^tkn^ptr.enhanced^pre^auth = "Y" ) or pstm.pre^auth^seq^num = "APPROVALCODE" then begin init( susp.prikey.seq^num, " ", $len( susp.prikey.seq^num ) ); move( susp.prikey.seq^num, pstm.tran.apprv^cde ); end else begin move( susp.prikey.seq^num, pstm.seq^num ); end; #DELETE Y0720601/Y072060C SEM^RESPONSE^POS #DELETE Y072060E SEM^RESPONSE^POS #ENDSCN = SW0E244 !#CMP2.28 07/20/10 BNETLIBS61112FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61112 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61112 * ******************************************************************************** #SCN = SW0E245 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61112 #NEWVERSION = 61113 #ADD a044190F ! 20JUL2010 wielerk ! Symptom: AFD Pre-auth completions not matching pre-auth responses ! on the ILF, preventing forwarding 0120 to Mastercard. ! Problem: There are Base24 acquirers that do not use fid i to ! return the original sequence number from the device to ! use as the pre-auth sequence number for matching the ! completion to the original pre-auth. ! Fix: Modified logic to use PSTM.APPRV^CDE passed in fid F ! from the device to use as the seq-num for the ILF key if ! configured. ! Proc Modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #01074248. #REPLACE 07167 /07169 PSTM^FRMT^0220^TO^XADV int .pbit^map := wordaddr( @sem.pbit^map ); int pos^mrch^tkn^lgth := 0; int .pos^mrch^tkn^ptr( pos^mrch^tkn^def ); int response; int .sbit^map := wordaddr( @sem.sbit^map ); #REPLACE 07169=02 PSTM^FRMT^0220^TO^XADV string tkn^id[ 0:1 ]; #ADD 07175v04 PSTM^FRMT^0220^TO^XADV movd( tkn^id, pos^mrch^tkn^id^d ); if ( hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn^ptr, pos^mrch^tkn^lgth ) and pos^mrch^tkn^ptr.enhanced^pre^auth = "Y" ) then begin init( orig^prikey.seq^num, " ", $len( orig^prikey.seq^num ) ); move( orig^prikey.seq^num, pstm.tran.apprv^cde ); end else begin move( orig^prikey.seq^num, pstm.pre^auth^seq^num ); end; #DELETE 07175v05 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0E245 !#CMP2.28 08/13/10 BNETLIBS61113FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61113 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61113 * ******************************************************************************** #SCN = SW0E250 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61113 #NEWVERSION = 61114 #ADD b044190E ! 12AUG2010 wielerk ! Symptom: Some 0120 advices from Mastercard are rejected with a ! format error and EMS message #1980 indicating de-121 ! ( auth agent id code ) is in error. ! Problem: Mastercard allows de-112 ( additional data national ) ! to be sent without conforming to the formatting rules ! in their specifications. ! Fix: Modified logic to bypass de-112 if not formatted ! correctly. ! Proc Modified: util^expand^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #01078171. #DELETE 18889c0K/18889c0Q UTIL^EXPAND^SEM #ADD 18889c0R UTIL^EXPAND^SEM if t^length < 6 then begin ! ! no subfields present ! length := t^length + 3; end; tag^length := 0; bad^lgth := 0; #ENDSCN = SW0E250 !#CMP2.28 08/19/10 BNETD 6003 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6003 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6003 * ******************************************************************************** #SCN = SW0E283 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6003 #NEWVERSION = 6004 #ADD 00043C0G ! 20AUG2010 bensone ! Symptom: Banknet Release 10.2 Mandates. ! Problem: None ! Fix: Correct reversal processing for Case #01066149. ! Proc modified: sem^acq^rvsl^rqst^atm ! Dependency: Apply fixes to the ATM auth modules AUTHG and AUTHLIBS. ! Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETG, ! BNETLIBS and BNETS. Run Make. ! New files: ILB0910M, ILB0910R, ILB0910S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0910M. Run the ILF conversion using ILB0910R. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD and ! BNETUPDT. ! Reference: WO #100318-04 #ADD 00254A0g SEM^FRMT^XRQST^EMV^TO^STM^TKN !# dat - ilf settlement date # !# stm - original internal message from the ILF # !# sem - original external message from the ILF # !# ilf - original ILF record # !# ilf^fnum - file number of original ILF record # !# ilf^lgth - length of original ILF record # #ADD 00254A0k SEM^ACQ^RVSL^RQST^ATM proc sem^acq^rvsl^rqst^atm( rvsl, msg, sta^x, dat, stm, sem, ilf, ilf^fnum, ilf^lgth ); #DELETE 00254A0l SEM^ACQ^RVSL^RQST^ATM #ADD 00254A0o SEM^ACQ^RVSL^RQST^ATM string .dat; int .stm( stm^def ); int .sem( sem^def ); int .ilf( ilf^def ); int ilf^fnum; int ilf^lgth; #ENDSCN = SW0E283 !#CMP2.28 08/19/10 BNETDDLS6037 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6037 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6037 * ******************************************************************************** #SCN = SW0E284 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6037 #NEWVERSION = 6038 #ADD 00262k0D * 20AUG2010 bensone * Symptom: Banknet Release 10.2 Mandates. * Problem: None * Fix: Correct the definition for tag-data in DE 48 SE 15. * Add new subfields 2,3,4 and 5 to DE 48 SE 75 in the SEM * and in the Switch Token. Update the Banknet switch * token version id to '14'. Increase the size of the * user field in DE 48 for future updates. An ILF * conversion will be required. * Dependency: Apply fixes to the ATM auth modules AUTHG and AUTHLIBS. * Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETG, * BNETLIBS and BNETS. Run Make. * New files: ILB0910M, ILB0910R, ILB0910S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0910M. Run the ILF conversion using ILB0910R. * Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD and * BNETUPDT. * Reference: WO #100318-04 #REPLACE 01157k0L/01157k0M SEM 10 dat pic 9(4). 10 tim pic 9(6). #ADD 01157k0a SEM 08 score-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). 08 rule-adj-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(3). 08 rule-rsn-cde-1. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). 08 rule-rsn-cde-2. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). #REPLACE 01157k0d SEM 04 user-fld pic x(62). #REPLACE 02760k01 SAF-BNET * Switch token version (ver-id) will be "14". #ADD 02760k05 SAF-BNET 02 fraud-data. 04 score pic x(3). 04 rsn-cde pic x(2). 04 rule-adj-score pic x(3). 04 rule-rsn-cde-1 pic x(2). 04 rule-rsn-cde-2 pic x(2). #DELETE 02760k06/02760k07 SAF-BNET #ENDSCN = SW0E284 !#CMP2.28 08/19/10 BNETG 6068 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6068 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6068 * ******************************************************************************** #SCN = SW0E285 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00026]0D ! 20AUG2010 bensone ! Symptom: Banknet Release 10.2 Mandates. ! Problem: None ! Fix: Global 504 - MasterCard MoneySend On-Us Funding ! Transaction Enhancements. ! Europe 109 - Maestro Automated Petrol Dispenser ! Completion Advice. ! Global 107 - Store-and-Forward Processing Changes ! for Advice Messages ! Support for a Cutover Timer ! for Cases #01007464 and #01012359. ! Processing of the transmission date and time ! for Cases #01011783, #01016458 and #01017244. ! Enhance format error processing for Case #01068725. ! Source-in guardian_literals from oktg. ! Source-in NSK externals to process timestamps. ! Defines added: atm^funding^txn^d ! Defines modified: sem^preauth^match^d ! funding^transaction^d ! Literals added: resp^invalid^amt^sem^l ! type^cutover^l ! Literals removed: nmm^logon^saf^l ! Globals added: ilf^create^g ! tran^tim^set^g ! Dependency: Apply fixes to the ATM auth modules AUTHG and AUTHLIBS. ! Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETG, ! BNETLIBS and BNETS. Run Make. ! New files: ILB0910M, ILB0910R, ILB0910S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0910M. Run the ILF conversion using ILB0910R. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD and ! BNETUPDT. ! Reference: WO #100318-04 #ADD 00026N4D ? guardian_literals, #ADD 00026N4G ! guardian_literals, #ADD 00166>02 define sem^preauth^match^d( x ) = ( x.proc^cde = sem^purchase^d and x.merch^typ = "5542" )#; #DELETE 00166>03 #ADD 00175>00 define funding^transaction^d = "6538"#; define atm^funding^txn^d = "6539"#; #DELETE 00175>01 #ADD 00270c01 resp^invalid^amt^sem^l = 13, #DELETE 00270c02 #DELETE 00279 #ADD 00325 type^cutover^l = 12, #ADD 00435\0F int ilf^create^g; int tran^tim^set^g; #DELETE 00435\0G #ADD 01366v0I int ilf^create^g; int tran^tim^set^g; #DELETE 01366v0J #ADD 01366N09 ? converttimestamp, #ADD 01366N0G ? interpretinterval, #ADD 01366N0X ! converttimestamp! #ADD 01366N14 ! interpretinterval! #ENDSCN = SW0E285 !#CMP2.28 08/19/10 BNETLIBS61114FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61114 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61114 * ******************************************************************************** #SCN = SW0E286 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61114 #NEWVERSION = 61115 #ADD c044190D ! 20AUG2010 bensone ! Symptom: Banknet Release 10.2 Mandates. ! Problem: None ! Fix: Global 104 - Expert Monitoring Real-Time Fraud Scoring ! Service Enhancements. ! Global 504 - MasterCard MoneySend On-Us Funding ! Transaction Enhancements ! Europe 109 - Maestro Automated Petrol Dispenser ! Completion Advice. ! Europe 502 - Introduction of Account Level Management. ! Global 107 - Store-and-Forward Processing Changes ! for Advice Messages ! Global Operations Bulletin No. 7 - Data Integrity ! Enhancements and Changes to Authorization Edits. ! Support for a Cutover Timer ! for Cases #01007464 and #01012359. ! Processing of the transmission date and time for ! Cases #01011783, #01016458 and #01017244. ! PERFMON Configuration for Case #01074061. ! Correct reversal processing for Case #01066149. ! Support Completion Advices without Track Data ! for Case #01078876. ! Enhance format error processing for Case #01068725. ! Ignore DE14 in MoneySend Payment Transactions ! for Case #01088368. ! Cases #01063673, #01073467, #01074155, #01075066. ! proc added: util^gmt^offset ! procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^prikey ! pstm^frmt^sem^addl^data ! sem^frmt^data^to^pstm^track2 ! sem^frmt^nmm^request ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xresp ! util^ilf^collapse^base24 ! util^ilf^cutover ! util^ilf^open ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to the ATM auth modules AUTHG and AUTHLIBS. ! Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETG, ! BNETLIBS and BNETS. Run Make. ! New files: ILB0910M, ILB0910R, ILB0910S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0910M. Run the ILF conversion using ILB0910R. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD and ! BNETUPDT. ! Reference: WO #100318-04 #DELETE 05708N0T PSTM^FRMT^0200^TO^XRQST #DELETE 05708N0r/05708N1D PSTM^FRMT^0200^TO^XRQST #ADD 08038 PSTM^FRMT^PRIKEY if bnet^g.tran^tim^set^g <> 0 then begin movl( prikey.tran^dat^tim.byte[ 0 ], pstm.tran^dat.mm, 4 ); movl( prikey.tran^dat^tim.byte[ 4 ], pstm.tran^tim, 6 ); end; #ADD 08493A03 PSTM^FRMT^SEM^ADDL^DATA int found^txn^sub^tkn := false; #ADD 08510 PSTM^FRMT^SEM^ADDL^DATA movd ( sem.addl^data.info.tran^cat^cde, " " ); #DELETE 08511 PSTM^FRMT^SEM^ADDL^DATA #ADD 08517 PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); end; if pos^pmnt^d( pstm ) then begin movd( sem.addl^data.info.tran^cat^cde, "P" ); end #DELETE 08518 /08525 PSTM^FRMT^SEM^ADDL^DATA #ADD 08716 PSTM^FRMT^SEM^ADDL^DATA if found^txn^sub^tkn and #DELETE 08717 /08722 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08886 PSTM^FRMT^SEM^ADDL^DATA #ADD 09459I00 PSTM^FRMT^SEM^ADDL^DATA if sem.addl^data.info.tran^cat^cde <> "U" and ( pos^cash^adv^d( pstm ) or pos^inquiry^d( pstm ) ) then begin movd( sem.addl^data.info.tran^cat^cde, "C" ); end; #DELETE V0945900/09459I09 PSTM^FRMT^SEM^ADDL^DATA #ADD 10929^01 SEM^FRMT^DATA^TO^PSTM^TRACK2 if sem.typ = sem^auth^request^d and #DELETE 10929^02 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ADD 10980 SEM^FRMT^DATA^TO^PSTM^TRACK2 if sem.exp^dat <> " " and sem.exp^dat <> "0000" and not sem^moneysend^d( sem ) then begin call hiswutil^exp^dat^yymm( sem.exp^dat, pstm.tran.exp^dat ); end else begin mov^( pstm.tran.exp^dat, pstm.tran.track2.byte[i + 1] ); end; #DELETE 10981 /10988 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ADD 11010 SEM^FRMT^DATA^TO^PSTM^TRACK2 movd( data^elem^err^g, "045" ); #DELETE 11011 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ADD 11033 SEM^FRMT^DATA^TO^PSTM^TRACK2 if exp^dat <> " " and exp^dat <> "0000" and not sem^moneysend^d( sem ) then begin call hiswutil^exp^dat^yymm( exp^dat, pstm.tran.exp^dat ); end else begin movd( pstm.tran.exp^dat, "0000" ); end; #DELETE 11034 /11038 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ADD 11060 SEM^FRMT^DATA^TO^PSTM^TRACK2 if sem.exp^dat <> " " and sem.exp^dat <> "0000" and not sem^moneysend^d( sem ) then #DELETE 11061 SEM^FRMT^DATA^TO^PSTM^TRACK2 #DELETE 11133 SEM^FRMT^NMM^REQUEST #DELETE 11210 SEM^FRMT^NMM^REQUEST #ADD 11544 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN begin #DELETE 11545 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11546 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN end; #DELETE 11547 /11551 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD Q1159401 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( ( util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) or ( not util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) then #DELETE Q1159402/11594r04 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD Q1159407 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.advice^cde.reason^cde = "191" then #DELETE Q1159408/Q1159409 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0Z SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ! The first 6 bytes of pstm.pre^auth^seq^num must be set ! ! to the value in the last 6 bytes of DE 32 (acq^inst). ! ! The remaining 6 bytes of pstm.pre^auth^seq^num will be set ! ! to the value in the last 6 bytes of DE 7 (tran^dat^tim). ! #DELETE 11594r0a/11594r0d SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0e SEM^FRMT^PROC^CDE^TO^PSTM^TRAN call ascii^integer^( sem.acq^inst.lgth, strt^byte ); #DELETE 11594r0f SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #DELETE 11594r0h SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0i SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if strt^byte >= 6 then #DELETE 11594r0j SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0l SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.acq^inst.cde.byte[ strt^byte - 6 ], 6 ); end else begin movl( pstm.pre^auth^seq^num[ 6 - strt^byte ], sem.acq^inst.cde.byte[ 0 ], strt^byte ); #DELETE 11594r0m/11594r0n SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 11594r0p SEM^FRMT^PROC^CDE^TO^PSTM^TRAN movl( pstm.pre^auth^seq^num.byte[ 6 ], sem.tran^dat^tim.byte[ 4 ], 6 ); #DELETE 11594r0q/11594r0s SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #DELETE 11960N01 SEM^FRMT^XADV^TO^SEM^XACK #DELETE 11967 SEM^FRMT^XADV^TO^SEM^XACK #DELETE 11976 SEM^FRMT^XADV^TO^SEM^XACK #ADD 13368 SEM^FRMT^XRESP^TO^PSTM^0210 call sem^frmt^xresp^emv^to^pstm^tkn( sem, pstm ); #DELETE 13369N00/13372 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD Q1388102 SEM^FRMT^XRQST^TO^PSTM^0200 sem.merch^typ = atm^funding^txn^d or #ADD 14437 SEM^FRMT^XRQST^TO^PSTM^0200 movd( data^elem^err^g, "052" ); #DELETE 14438 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14587 SEM^FRMT^XRQST^TO^PSTM^0200 begin return resp^invalid^amt^sem^l; end; #DELETE 14588 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD E1458902 SEM^FRMT^XRQST^TO^PSTM^0200 return resp^invalid^amt^sem^l; #DELETE E1458903 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14595 SEM^FRMT^XRQST^TO^PSTM^0200 set( pstm.term^tim^ofst, 0 ); if bnet^g.tran^tim^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, pstm.tran^dat ); movl( pstm.tran^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); set( pstm.term^tim^ofst, 0 - pct.gmt^ofst ); call util^gmt^offset( pstm.term^tim^ofst ); end; #DELETE 14596 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14690304 SEM^FRMT^XRQST^TO^PSTM^0200 if pin^bit^d or ( sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" and sem.addl^data.info.pin^svc^cde^sub^fld^80.cde = "PV" ) then #DELETE 14690305 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14690307 SEM^FRMT^XRQST^TO^PSTM^0200 end else ! ! ! If offline PIN is used, then set crdhldr^id^method to a ! ! value of "2" (PIN). ! ! ! if emv^data^bit^d and ( sem.proc^cde = sem^wdl^d or sem.ntl^pos^data.cond^cde.byte[ 9 ] = cat^lvl^1^auto^disp^mach^d ) then begin movd( pos^data^tkn.crdhldr^id^method, "2" ); end else ! ! ! If DE 48.43 (UCAF) is present, then set crdhldr^id^method ! ! to a value of "5" (Authentication Value). ! ! ! if sem.addl^data.info.ucaf^sub^fld^43.tag = "43" and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * [" "] ] and sem.addl^data.info.ucaf^sub^fld^43.tag^data <> [ $len( sem.addl^data.info.ucaf^sub^fld^43. tag^data ) * ["0"] ] then begin movd( pos^data^tkn.crdhldr^id^method, "5" ); end else ! ! ! If e-commerce, then set crdhldr^id^method to a value of "4" ! ! (No CVM) for a payment, or to a value of "0" (Unknown), as ! ! the CVM could be either offline PIN or none. ! ! ! if sem.pos^entry^mde = elec^commerce then begin if sem.proc^cde = sem^pmnt^txn^d then begin movd( pos^data^tkn.crdhldr^id^method, "4" ); end else begin movd( pos^data^tkn.crdhldr^id^method, "0" ); end; end else ! ! ! If cardholder is not present, then set crdhldr^id^method ! ! to a value of "4" (None - Cardholder Not Present). ! ! ! if sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "0" then begin movd( pos^data^tkn.crdhldr^id^method, "4" ); end else ! ! ! If an unattended terminal, then set crdhldr^id^method ! ! to a value of "3" (None - Cardholder Present). ! ! ! if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "0" then begin movd( pos^data^tkn.crdhldr^id^method, "3" ); end else ! ! ! If this is not a contact EMV transaction, then set ! ! crdhldr^id^method to a value of "1" (Signature). ! ! ! if sem.pos^entry^mde <> chip^read then begin movd( pos^data^tkn.crdhldr^id^method, "1" ); #ADD 15436 SEM^FRMT^XRQST^TO^PSTM^0200 movd( data^elem^err^g, "055" ); #ADD Q1573201 SEM^FRMT^XRVSL^TO^PSTM^0420 ( ( util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) or ( not util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) then #DELETE Q1573202/15732r04 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15732r06 SEM^FRMT^XRVSL^TO^PSTM^0420 ! The first 6 bytes of pstm.pre^auth^seq^num must be set ! ! to the value in the last 6 bytes of DE 32 (acq^inst). ! ! The remaining 6 bytes of pstm.pre^auth^seq^num will be set ! ! to the value in the last 6 bytes of DE 7 (tran^dat^tim). ! #DELETE 15732r07/15732r0A SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15732r0B SEM^FRMT^XRVSL^TO^PSTM^0420 call ascii^integer^( sem.acq^inst.lgth, strt^byte ); #DELETE 15732r0C SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 15732r0E SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15732r0F SEM^FRMT^XRVSL^TO^PSTM^0420 if strt^byte >= 6 then #DELETE 15732r0G SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15732r0I SEM^FRMT^XRVSL^TO^PSTM^0420 sem.acq^inst.cde.byte[ strt^byte - 6 ], 6 ); end else begin movl( pstm.pre^auth^seq^num[ 6 - strt^byte ], sem.acq^inst.cde.byte[ 0 ], strt^byte ); #DELETE 15732r0J/15732r0K SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 15732r0M SEM^FRMT^XRVSL^TO^PSTM^0420 movl( pstm.pre^auth^seq^num.byte[ 6 ], sem.tran^dat^tim.byte[ 4 ], 6 ); #DELETE 15732r0N/15732r0P SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 17662 UTIL^COLLAPSE^SEM ! ! ! Fraud Scoring Data ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. tag = "75" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Fraud Score ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.tag = "01" then begin call ascii^integer( hdr.addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! ! Move Subfield 2 - Score Reason Code ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.tag = "02" then begin call ascii^integer( hdr.addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Rule Adjusted Score ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.tag = "03" then begin call ascii^integer( hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! ! ! ! Move Subfield 4 - Rule Reason Code 1 ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag = "04" then begin call ascii^integer( hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! ! ! ! Move Subfield 5 - Rule Reason Code 2 ! ! ! if hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag = "05" then begin call ascii^integer( hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 05 ! end; ! of if hdr...tag = "75" #DELETE 17663 UTIL^COLLAPSE^SEM #REPLACE Q186180T/Q186180T OFFSET 0 UTIL^EXPAND^SEM end; ! subfield 01 ! ! ! Move Subfield 2 - Score Reason Code ! if sub^ptr = "02" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 02 ! ! ! Move Subfield 3 - Rule Adjusted Score ! if sub^ptr = "03" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 03 ! ! ! Move Subfield 4 - Rule Reason Code 1 ! if sub^ptr = "04" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 04 ! ! ! Move Subfield 5 - Rule Reason Code 2 ! if sub^ptr = "05" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 05 ! #ADD 19067v0a UTIL^FRMT^ADDL^DATA^TO^XRESP addl^data^bit^d := 0; #ADD 20154 UTIL^GMT^ASCII ?section util^gmt^offset ?page "util^gmt^offset" !##################################################################### !# # !# util^gmt^offset # !# # !# This procedure calculates the time offset in minutes # !# between the local civil time and GMT. # !# # !# GMT = Greenwich mean time, can be considered equivalent to # !# Coordinated Universal Time (UTC) # !# LST = local standard time or time in the local time zone # !# without adjustment for daylight saving time. # !# LCT = local civil time or time in the local time zone # !# including adjustment for daylight saving time. # !# # !# INPUT PARAMETERS: # !# N/A # !# # !# OUTPUT PARAMETERS: # !# offset - the number of minutes between GMT and LCT. # !# the value will be positive if GMT > LCT. # !# the value will be negative if GMT < LCT. # !# the value will be zero if GMT = LCT or # !# converttimestamp fails or # !# LCONF parameter is not configured for this option. # !# # !# RETURN: # !# N/A # !# # !##################################################################### proc util^gmt^offset( offset ); int .offset; begin fixed gmt^tim; fixed lct^tim; int err := 0; int hh := 0; int mm := 0; int sign := 1; offset := 0; if bnet^g.tran^tim^set^g <> 2 then begin return; end; gmt^tim := juliantimestamp; lct^tim := converttimestamp( gmt^tim, conv_julian_gmt_lct_l, !node!, err ); if err then begin lct^tim := converttimestamp( gmt^tim, conv_julian_gmt_lst_l, !node!, err ); if err then begin return; end; end; if gmt^tim = lct^tim then begin return; end else if gmt^tim > lct^tim then begin interpretinterval ( gmt^tim - lct^tim, hh, mm ); end else if gmt^tim < lct^tim then begin interpretinterval ( lct^tim - gmt^tim, hh, mm ); sign := -1; end; offset := sign * 60 * hh + mm; end; ! of util^gmt^offset #ADD 20750N03 UTIL^ILF^COLLAPSE^BASE24 call util^updt^perfmon( pct.ln, sim, ilf.substate, base24^rel^g, true ); #DELETE 20750N04 UTIL^ILF^COLLAPSE^BASE24 #REPLACE 20805 /20806 UTIL^ILF^CUTOVER struct .icf( icf^ptr^def ); struct .icf^buf( icf^buf^def ); #DELETE 20807 UTIL^ILF^CUTOVER #ADD 20808 UTIL^ILF^CUTOVER int create^it; int fnum; int i; int icf^lgth; #DELETE 20809 /20811 UTIL^ILF^CUTOVER #DELETE 20815 UTIL^ILF^CUTOVER #DELETE 20817 /20820 UTIL^ILF^CUTOVER #ADD 20836 UTIL^ILF^CUTOVER ! ! Update the ICF record ! if compare^ascii^yymmdd( dat, 8, pct.setl.swi^dat ) then begin mov^ ( pct.setl.swi^dat, dat ); mov^ ( icf.base.swi^setl.post^dat, dat ); set ( i, 0 ); while ( i := i + 1 ) < $occurs(icf.base.suspense) and ilf^name^g <> icf.base.suspense[ i ].fname for 12 do; if ilf^name^g <> icf.base.suspense[ i ].fname for 12 then begin for i := $occurs( icf.base.suspense ) - 1 downto 1 do begin move ( icf.base.suspense[ i ].fnames, icf.base.suspense[ i - 1 ].fnames ); end; icf.base.suspense[ 0 ].fname ':=' ilf^name^g for 12; end; end; #DELETE 20837 UTIL^ILF^CUTOVER #DELETE 20849 /20878 UTIL^ILF^CUTOVER #ADD 20879 UTIL^ILF^CUTOVER if not create^it then begin ! ! If the ILF was created prior to util^ilf^open then ! update the header record with the current trace number ! call util^ilf^updt^header( fnum, pct.trace^num ); end; #ADD 21260 UTIL^ILF^OPEN int proc util^ilf^open( fnum, dat, create^it, icf, file^frmt ) extensible; #DELETE 21261 UTIL^ILF^OPEN #ADD 21269 UTIL^ILF^OPEN wlform( error1, "FAILURE on ILF CUTOVER" ) #ADD 21274 UTIL^ILF^OPEN struct .prikey( prikey^def ); #ADD 21278 UTIL^ILF^OPEN int .ilf^fname [0:11]; int j; int altkey^params[0:64]; string params = altkey^params; #ADD 21428 UTIL^ILF^OPEN ! ! Add the newly created ILF to the PCT in order to add ! the ILF header record ! init ( pct.ilf[ next^l ], 0, $len( pct.ilf )); mov^ ( pct.ilf[ next^l ].dat, dat ); set ( pct.ilf[ next^l ].fcb.filenum, fnum ); set ( pct.ilf[ next^l ].fcb.file^frmt, file_frmt ); ! ! Initialize the primary key for the ILF header record ! init ( prikey, " ", wlen( prikey^def ) ); if not util^ilf^add( dat, prikey, $len( prikey ), header^l ) then begin call log^message^( 2210, ! routing code !, @error1, net.myname, evt_msg_severity_err_l ); if fnum > 0 then begin call fileinfo ( fnum, ! error !, ilf^fname ); call filerecinfo( fnum,,,,,,,,,,,, altkey^params ); if params[0] > 4 or params[1] > 4 then begin call programmatic^dump( 940 ); end; call hiswfile^close( fnum ); call hiswfile^purge( ilf^fname ); j := ( params[1] * 4 ) + 1; for i := 0 to ( params[0] - 1 ) do begin call hiswfile^purge( altkey^params[ j +( 12 * i ) ] ); end; set( fnum, -2 ); end; ! of fnum > 0 move( dat, zeroes ); init ( pct.ilf[ next^l ], 0, $len( pct.ilf )); set ( pct.ilf[ next^l ].fcb.filenum, -2 ); return false; end; ! of not util^ilf^add init ( pct.ilf[ next^l ], 0, $len( pct.ilf )); set ( pct.ilf[ next^l ].fcb.filenum, -2 ); end; ! of created #DELETE 21429 /21450 UTIL^ILF^OPEN #ADD 22294 UTIL^ILF^UPDT^HEADER call fileinfo( fnum, !error!, filename ); #ADD 22324 UTIL^ILF^UPDT^HEADER call fileinfo( fnum, !error!, filename ); #ADD 22392 UTIL^ILF^UPDT^HEADER call fileinfo( fnum, !error!, filename ); #REPLACE Q2499701 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "14"; #ADD Q251340B UTIL^SWI^TKN^INIT move( bnet^tkn^buf.fraud^data.score, #DELETE Q251340C UTIL^SWI^TKN^INIT #ADD Q251340E UTIL^SWI^TKN^INIT move( bnet^tkn^buf.fraud^data.rsn^cde, sem.addl^data.info.fraud^scoring^data^sub^fld^75. score^rsn^cde.tag^data ); move( bnet^tkn^buf.fraud^data.rule^adj^score, sem.addl^data.info.fraud^scoring^data^sub^fld^75. rule^adj^score.tag^data ); move( bnet^tkn^buf.fraud^data.rule^rsn^cde^1, sem.addl^data.info.fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag^data ); move( bnet^tkn^buf.fraud^data.rule^rsn^cde^2, sem.addl^data.info.fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag^data ); #ADD Q2540408 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.fraud^data <> blanks for $len( bnet^tkn^buf.fraud^data ) then #DELETE Q2540409/Q254040A UTIL^SWI^TKN^UPDT #ADD Q254040B UTIL^SWI^TKN^UPDT movl( bnet^tkn.fraud^data, bnet^tkn^buf.fraud^data, $len( bnet^tkn.fraud^data ) ); end; ! of if bnet^tkn^buf.fraud^data #DELETE Q254040C/Q254040F UTIL^SWI^TKN^UPDT #ENDSCN = SW0E286 !#CMP2.28 08/19/10 BNETS 60136FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60136 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60136 * ******************************************************************************** #SCN = SW0E289 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y000260D ! 20AUG2010 bensone ! Symptom: Banknet Release 10.2 Mandates. ! Problem: None ! Fix: Global 504 - MasterCard MoneySend On-Us Funding ! Transaction Enhancements ! Europe 109 - Maestro Automated Petrol Dispenser ! Completion Advice. ! Global 107 - Store-and-Forward Processing Changes ! for Advice Messages ! Support for a Cutover Timer ! for Cases #01007464 and #01012359. ! Processing of the transmission date and time ! for Cases #01011783, #01016458 and #01017244. ! Correct reversal processing for Case #01066149. ! Support Completion Advices without Track Data ! for Case #01078876. ! Enhance format error processing for Case #01068725. ! Cases #01063673, #01073467, #01074155, #01075066. ! proc added: tim^out^12^cutover ! procs modified: bnet^sem^xresp^failed ! cmd^^command^input ! cmd^logon^g ! cmd^logon^g^gsi ! cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^bnet^g ! init^dat ! init^ilf ! init^paramproc ! pstm^0220^force^post ! sem^acq^rvsl^rqst ! sem^acq^rvsl^rqst^pos ! sem^advice^pos ! sem^nmm^response ! sem^request^deny ! sem^response^nack ! sem^response^nack^pos ! sem^reversal^advice^pos ! tim^^timeout ! tim^out^05^nmm ! tim^out^06^xnmm ! Proc removed: sem^logon^response^saf ! Dependency: Apply fixes to the ATM auth modules AUTHG and AUTHLIBS. ! Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETG, ! BNETLIBS and BNETS. Run Make. ! New files: ILB0910M, ILB0910R, ILB0910S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0910M. Run the ILF conversion using ILB0910R. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD and ! BNETUPDT. ! Reference: WO #100318-04 #REPLACE Y0026601 BNETS^60^136 PROC BNETS^60^135 MAIN; #ADD G0088104 BNET^SEM^XRESP^FAILED ilf.substate <> 0 or #ADD G008810E BNET^SEM^XRESP^FAILED if not atm^cash^back^d( stm ) then begin stm.rqst.amt^2 := 0f; stm.rqst.amt^3 := 0f; end; #ADD G008810T BNET^SEM^XRESP^FAILED call util^send^stm( stm, ilf.orig^net^pro ); #DELETE G008810U/G008810a BNET^SEM^XRESP^FAILED #ADD G0088110 BNET^SEM^XRESP^FAILED ilf.substate <> 0 or #ADD G008811L BNET^SEM^XRESP^FAILED call util^send^pstm( pstm, ilf.orig^net^pro ); #DELETE G008811M/G008811P BNET^SEM^XRESP^FAILED #DELETE G0107000/G0107301 CMD^^COMMAND^INPUT #DELETE Y0172003/Y0173002 CMD^LOGON^G #DELETE Y0175503/Y017550C CMD^LOGON^G^GSI #ADD x0259905 CMD^WARMBOOT^STORE^GLOBALS store^bnet^g^d( ilf^create^g ); store^bnet^g^d( tran^tim^set^g ); #ADD x0259908 CMD^WARMBOOT^STORE^GLOBALS bnet^g.ilf^create^g := -1; bnet^g.tran^tim^set^g := 0; #ADD x025990E CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^bnet^g^d( ilf^create^g ); retrieve^bnet^g^d( tran^tim^set^g ); #ADD x0283102 INIT^BNET^G bnet^g.ilf^create^g := -1; bnet^g.tran^tim^set^g := 0; #ADD 03094 INIT^DAT int(32) ilf^create^tim := 0d; int(32) sw^cutover^tim := 0d; struct .userbuf( timer^userbuf^def ); int create^it := false; int file^frmt; int fnum; int .timer( timer^def ); #ADD 03098 INIT^DAT string .next^swi^bus^dat[0:5]; #ADD 03126X00 INIT^DAT if compare^ascii^yymmdd( pct.setl.swi^dat, 7, icf.base.swi^setl.post^dat ) then begin ! ! If the post date is '<=' the date in the ICFE ! Adjust the post date to keep in sync after cutover ! pct.setl.swi^dat ':=' icf.base.swi^setl.post^dat for 6; end else begin ! ! Update the date in the ICFE ! icf.base.swi^setl.post^dat ':=' pct.setl.swi^dat for 6; end; call timer^delete( tcb^g, type^cutover^l ); if bnet^g.ilf^create^g <> -1 then begin ! ! If the optional LCONF param SW-BNET-CREATE-ILF is being ! used to set a timer for creating new ILF's ! ! calculate the next switch business date ! call julian^to^yymmdd( yymmdd^to^julian( pct.setl.swi^dat ) + 1d, next^swi^bus^dat ); ! ! calculate the time for creating the new ILF ! ilf^create^tim := hiswutil^calc^cutover^time( $dbl( bnet^g.ilf^create^g ) '/' 100, $dbl( bnet^g.ilf^create^g ) '\' 100 ); ! ! add the cutover timer with the next switch business date ! if @timer := timer^insert( tcb^g, ilf^create^tim, type^cutover^l ) then begin @userbuf := @timer.userbuf; init( userbuf, " ", wlen( userbuf ) ); movl( userbuf, next^swi^bus^dat, $occurs( next^swi^bus^dat ) ); end; ! of timer^insert sw^cutover^tim := hiswutil^calc^cutover^time( icf.base.swi^setl.setl^hh, icf.base.swi^setl.setl^mm ); if ilf^create^tim > sw^cutover^tim then begin ! ! If the cutover timer will expire after interchange ! cutover then create and close the next day's ILF ! create^it := true; if util^ilf^open( fnum, next^swi^bus^dat, create^it, ! icf !, file^frmt ) then begin call hiswfile^close( fnum ); end; end; ! of ilf^create^tim > sw^cutover^tim end; ! of bnet^g.ilf^create^g <> -1 #DELETE 03126X01/03132 INIT^DAT #DELETE 03426 /03432 INIT^ILF #ADD p039410J INIT^PARAMPROC wlform( inv^tim^set, "SW-BNET-TRAN-TIME-SET param contains" ',' " invalid data. Default of # will be used." ) #DELETE h0394107 INIT^PARAMPROC #ADD x0394502 INIT^PARAMPROC "P", "SW-BNET-CREATE-ILF ", "P", "SW-BNET-TRAN-TIME-SET ", #ADD x039960C INIT^PARAMPROC ! ! SW-BNET-CREATE-ILF ! if not ferror then begin @ptr := numin( lconf.param^msg.ptxt, hour, 10, status ); @ptr := numin( ptr[ 1 ], minute, 10, status ); bnet^g.ilf^create^g := ( hour * 100 ) + minute; end; ! ! SW-BNET-TRAN-TIME-SET ! if not ferror then begin status := ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.tran^tim^set^g ); if not status or ( bnet^g.tran^tim^set^g <> 0 and bnet^g.tran^tim^set^g <> 1 and bnet^g.tran^tim^set^g <> 2 ) then begin bnet^g.tran^tim^set^g := 0; call log^message^( 4036, ! routing code !, @inv^tim^set, net.myname, evt^msg^severity^warn^l, bnet^g.tran^tim^set^g ); end; end; #ADD Y050112P PSTM^0220^FORCE^POST if sem.typ = sem^auth^advice^d and ( saf^0120^msg^g or sem.advice^cde.reason^cde = "191" ) then #DELETE T050110I/T050110J PSTM^0220^FORCE^POST #ADD G0537415 SEM^ACQ^RVSL^RQST struct .sem( sem^def ); int .base24^msg[ 0:wlen( msg^def ) - 1 ]; int ilf^fnum; int ilf^lgth := 0; int .pbit^map := wordaddr( @rvsl.pbit^map ); #DELETE G0537416/G0537418 SEM^ACQ^RVSL^RQST #ADD G0537419 SEM^ACQ^RVSL^RQST string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; #ADD G053741A SEM^ACQ^RVSL^RQST if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( rvsl.setl^dat, dat ); call util^ilf^dat( dat ); end; #ADD G053741D SEM^ACQ^RVSL^RQST if ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, sem ) ) then #DELETE G053741E/G053741H SEM^ACQ^RVSL^RQST #DELETE G053741J SEM^ACQ^RVSL^RQST #ADD G053741Y SEM^ACQ^RVSL^RQST call sem^acq^rvsl^rqst^atm( rvsl, msg, sta^x, dat, base24^msg, sem, ilf, ilf^fnum, ilf^lgth ); #DELETE G053741Z SEM^ACQ^RVSL^RQST #ADD G053741c SEM^ACQ^RVSL^RQST call sem^acq^rvsl^rqst^pos( rvsl, msg, sta^x, dat, base24^msg, sem, ilf, ilf^fnum, ilf^lgth ); #DELETE G053741d SEM^ACQ^RVSL^RQST #ADD G053741m SEM^ACQ^RVSL^RQST !##################################################################### !# # !# sem^acq^rvsl^rqst^pos # !# # !# This procedure handles a 0400/Acquirer POS Reversal Request # !# message from the network. # !# # !# INPUT PARAMETERS: # !# rvsl - reversal message # !# msg - message word pointer # !# sta^x - index of station reversal received on # !# dat - ilf settlement date # !# pstm - original internal message from the ILF # !# sem - original external message from the ILF # !# ilf - original ILF record # !# ilf^fnum - file number of original ILF record # !# ilf^lgth - length of original ILF record # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^acq^rvsl^rqst^pos( rvsl, msg, sta^x, dat, pstm, sem, ilf, ilf^fnum, ilf^lgth ); #DELETE 05374}21/G053741u SEM^ACQ^RVSL^RQST^POS #ADD 05374}2J SEM^ACQ^RVSL^RQST^POS string .dat; int .pstm( pstm^def ); int .sem( sem^def ); int .ilf( ilf^def ); int ilf^fnum; int ilf^lgth; #DELETE 05374}2R/05374}2S SEM^ACQ^RVSL^RQST^POS #DELETE 05374}2V SEM^ACQ^RVSL^RQST^POS #DELETE 05374}2Z/05374}2d SEM^ACQ^RVSL^RQST^POS #DELETE 05374}2g SEM^ACQ^RVSL^RQST^POS #ADD 0537470D FRMT^AND^SEND^ACQ^RVSL^RESP ! ! if ilf^lgth > 0 then the ILF record was found and passed to ! this procedure. ! if ilf^lgth > 0 and poss^dup^d( sem ) then begin ack^resp^cde ':=' resp^dup^detect^d; #DELETE 0537470E/0537470G FRMT^AND^SEND^ACQ^RVSL^RESP #DELETE 05374}3V/05374}3u FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 05374}3v FRMT^AND^SEND^ACQ^RVSL^RESP if not ilf^lgth > 0 then #DELETE 05374}3w FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 05374}3x FRMT^AND^SEND^ACQ^RVSL^RESP ack^resp^cde ':=' resp^system^error^sem^d; if rvsl.tran^amt = [ $len( rvsl.tran^amt ) * ["0"] ] then begin call frmt^and^send^acq^rvsl^resp; return; end; #DELETE 05374}4W FRMT^AND^SEND^ACQ^RVSL^RESP #ADD G053742E FRMT^AND^SEND^ACQ^RVSL^RESP ilf.substate <> 0 or #DELETE G053742F FRMT^AND^SEND^ACQ^RVSL^RESP #ADD G053742L FRMT^AND^SEND^ACQ^RVSL^RESP if ilf.intrn^msg^savearea^lgth = 0 or ilf.substate <> 0 or not pos^approved^d( pstm ) then #REPLACE 05374}6z FRMT^AND^SEND^ACQ^RVSL^RESP if not util^ilf^updt( ilf^fnum, #REPLACE 05374}7g FRMT^AND^SEND^ACQ^RVSL^RESP if not util^ilf^updt( ilf^fnum, #ADD 05374}8P FRMT^AND^SEND^ACQ^RVSL^RESP call util^send^pstm( pstm, ilf.orig^net^pro ); end ! of destination cannot be determined ! else begin call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end; ! of destination cannot be determined ! #DELETE 05374}8Q/05374}9Q FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 05374}9U FRMT^AND^SEND^ACQ^RVSL^RESP ilf.orig^net^pro ); #DELETE 05374}9V FRMT^AND^SEND^ACQ^RVSL^RESP #REPLACE 05374}9a FRMT^AND^SEND^ACQ^RVSL^RESP if not util^ilf^updt( ilf^fnum, #ADD 05726j05 SEM^ADVICE^POS int ilf^found := false; #ADD 05733 SEM^ADVICE^POS call util^ilf^dat( dat ); #ADD 05743 SEM^ADVICE^POS if fnum := util^ilf^get( ilf.prikey, $len(ilf.prikey), ilf, ilf^lgth ) then #DELETE 05744 /05745 SEM^ADVICE^POS #ADD 05746 SEM^ADVICE^POS ilf^found := true; #ADD u0575701 SEM^ADVICE^POS sem.merch^typ = atm^funding^txn^d ) and #DELETE u0575702 SEM^ADVICE^POS #ADD 05764 SEM^ADVICE^POS if ilf^found and ( pstm.tran.track2.byte[ 0 ] = "m" or pstm.tran.track2.byte[ 0 ] = "M" ) then begin move( pstm.tran.mbr^num, ilf.pos.tran.mbr^num ); end; #DELETE 06374 /06416 SEM^LOGON^RESPONSE^SAF #DELETE 06510 SEM^NMM^RESPONSE #DELETE 06555 SEM^NMM^RESPONSE #ADD 06699 SEM^REQUEST^DENY wlform( frmt^err, "Request \\\\ DENIED, Format Error on DE \\\," ','" BNET REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) #ADD 06717q01 ELIM^DE54^CASH^BACK^AMT ! Determine if a format error occurred when the request was ! ! processed. If there was an error, the DE will be contained ! #DELETE 06717q02/06717q03 ELIM^DE54^CASH^BACK^AMT #ADD 06717q06 ELIM^DE54^CASH^BACK^AMT if rcode = resp^format^error^sem^l and data^elem^err^g <> [ $len( data^elem^err^g ) * [" "] ] then #DELETE 06717q07 ELIM^DE54^CASH^BACK^AMT #ADD 06717q08 ELIM^DE54^CASH^BACK^AMT call log^message^( 1575,! routing code !, @frmt^err, net.myname, evt_msg_severity_info_l, @rqst.typ, @data^elem^err^g, @rqst.banknet^data.ref^num, @rqst.setl^dat ); #ADD G068710m SEM^RESPONSE^NACK end else begin return; #ADD G068712n SEM^RESPONSE^NACK^POS ilf.substate <> 0 or #ADD G072563m SUB^PROCESS^UNMATCHD^POS^RVSL ilf.substate <> 0 or #ADD G072563r SUB^PROCESS^UNMATCHD^POS^RVSL return true; #DELETE G072563s SUB^PROCESS^UNMATCHD^POS^RVSL #REPLACE G072563y SUB^PROCESS^UNMATCHD^POS^RVSL return true; #DELETE G0725640/G072564I SUB^PROCESS^UNMATCHD^POS^RVSL #ADD G072564c SUB^PROCESS^UNMATCHD^POS^RVSL call util^send^pstm( pstm, ilf.orig^net^pro ); #DELETE G072564d/G072564m SUB^PROCESS^UNMATCHD^POS^RVSL #ADD 07972 TIM^^TIMEOUT !12! call tim^out^12^cutover ( timer, userbuf ); #DELETE 07973 TIM^^TIMEOUT #DELETE 08166d0Q/08166d0U TIM^OUT^05^NMM #ADD 08168 TIM^OUT^05^NMM nmm^info^cde = nmm^logon^prefix^l then #DELETE 08169 /08170 TIM^OUT^05^NMM #DELETE 08225 TIM^OUT^06^XNMM #ADD 08426 TIM^OUT^11^SDF ?section tim^out^12^cutover ?page "tim^out^12^cutover" !##################################################################### !# # !# tim^out^12^cutover # !# # !# This procedure processes an expired cutover timer. The optional # !# LCONF param SW-BNET-CREATE-ILF is used to set the time when the # !# next day's ILF will be created. If the next switch business # !# date from the timer is greater than the current switch business # !# date and equal to the calculated switch business date then # !# cutover the interface. Calculate a new next switch business # !# date and start a new timer. Create and close an ILF for the # !# new next switch business date. # !# # !# INPUT PARAMETERS: # !# timer - pointer to timer struct # !# userbuf - pointer to userbuf within timer # !# # !# OUTPUT PARAMETERS: # !# none # !# # !# RETURN: # !# none # !# # !##################################################################### proc tim^out^12^cutover( timer, userbuf ); int .timer( timer^def ); int .userbuf( timer^userbuf^def ); begin int(32) ilf^create^tim := 0d; int create^it := false; int file^frmt; int fnum; string .next^swi^bus^dat[ 0:5 ]; string .calc^swi^bus^dat[ 0:5 ]; @userbuf := @timer.userbuf; movl( next^swi^bus^dat, userbuf, $occurs( next^swi^bus^dat ) ); if compare^ascii^yymmdd( next^swi^bus^dat, 2, pct.setl.swi^dat ) then begin ! ! If the next switch business date from the timer is ! greater than the current switch business date, ! then calculate what the switch business date should be ! call hiswutil^posting^date( calc^swi^bus^dat, pct.setl.swi^tim ) ; if next^swi^bus^dat = calc^swi^bus^dat for $occurs( next^swi^bus^dat ) then begin ! ! If the switch business date should be ! cutover then cutover the interface ! call util^ilf^dat( next^swi^bus^dat ); end; end; ! ! calculate the next switch business date ! call julian^to^yymmdd( yymmdd^to^julian( pct.setl.swi^dat ) + 1d, next^swi^bus^dat ); ! ! calculate the time for creating the new ILF ! ilf^create^tim := hiswutil^calc^cutover^time( $dbl( bnet^g.ilf^create^g ) '/' 100, $dbl( bnet^g.ilf^create^g ) '\' 100 ); ! ! add the cutover timer with the next switch business date ! if @timer := timer^insert( tcb^g, ilf^create^tim, type^cutover^l ) then begin @userbuf := @timer.userbuf; init( userbuf, " ", wlen( userbuf ) ); movl( userbuf, next^swi^bus^dat, $occurs( next^swi^bus^dat ) ); end; ! of timer^insert ! ! Create and close the next day's ILF ! create^it := true; if util^ilf^open( fnum, next^swi^bus^dat, create^it, ! icf !, file^frmt ) then begin call hiswfile^close( fnum ); end; end; ! of tim^out^12^cutover #ENDSCN = SW0E289 !#CMP2.28 09/10/10 BNETLIBS61115FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61115 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61115 * ******************************************************************************** #SCN = SW0E299 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61115 #NEWVERSION = 61116 #ADD d044190t ! 10SEP2010 saderc ! Symptom: The interface is reversing response messages from POS ! Router Authorization. ! Problem: The problem is related to the addition of the ! SW-BNET-TRAN-TIME-SET LCONF parameter. If this param ! is set to zero and the GMT Offset on screen 12 of the ! ICFE is set to a non-zero, the interface is reversing ! the message because it is unable to find the suspended ! record. The reason why the interface is not finding the ! suspended record is because the tran date/time in the ! internal message is using the local time, which is ! calculated using the GMT Offset. When the response ! message is returned to the interface, it does attempt to ! adjust the tran date/time in the internal message back ! to GMT by calling the util^gmt^adjust when it builds the ! prikey. However, it uses the value in the ! pstm.term^tim^ofst field, which was set to zero for this ! enhancement. As a result, the search fails because the ! suspended record used the sem.tran^dat^tim, which is GMT ! time. ! Fix: Modified the interface to set the pstm.term^tim^ofst to ! the result of subtracting the GMT offset from zero. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! util^gmt^offset ! Dependency: Apply fixes to BNETATMS and BNETLIBS. Run Make. ! Reference: Case #1090899 #REPLACE d1459501 SEM^FRMT^XRQST^TO^PSTM^0200 set( pstm.term^tim^ofst, 0 - pct.gmt^ofst ); #DELETE d1459507 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE d201540j UTIL^GMT^OFFSET #ENDSCN = SW0E299 !#CMP2.28 09/10/10 BNETS 60137FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60137 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60137 * ******************************************************************************** #SCN = SW0E301 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z000260q ! 10SEP2010 wielerk ! Symptom: AFD Pre-auth completions not matching pre-auth responses ! on the ILF, preventing forwarding 0120 to Mastercard. ! Problem: The value logged as the ILF key sequence number did ! not allow installations which are not using Enhanced ! Preauth to match completions. ! Fix: Modified logic to log the ILF for an AFD pre-auth using ! PSTM.PRE^AUTH^SEQ^NUM as the sequence number value in ! the ILF key. ! Procs Modified: sem^response^pos ! Dependency: Apply fixes to BNETS. Run Make. ! Reference: Case #01090645. #REPLACE y0720608 SEM^RESPONSE^POS pos^mrch^tkn^ptr.enhanced^pre^auth = "Y" ) then #DELETE y0720609 SEM^RESPONSE^POS #ADD y072060E SEM^RESPONSE^POS else if pstm.pre^auth^seq^num = "APPROVALCODE" then begin init( pstm.pre^auth^seq^num, " ", $len( pstm.pre^auth^seq^num ) ); move( pstm.pre^auth^seq^num, pstm.tran.apprv^cde ); init( susp.prikey.seq^num, " ", $len( susp.prikey.seq^num ) ); move( susp.prikey.seq^num, pstm.tran.apprv^cde ); end else begin init( susp.prikey.seq^num, " ", $len( susp.prikey.seq^num ) ); move( susp.prikey.seq^num, pstm.pre^auth^seq^num ); #DELETE y072060F/y072060H SEM^RESPONSE^POS #ENDSCN = SW0E301 !#CMP2.28 09/17/10 BNETG 6069 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6069 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6069 * ******************************************************************************** #SCN = SW0E309 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00026^0Y ! 17SEP2010 bensone ! Symptom: Banknet UK Domestic Maestro Technical Alignment ! Problem: None ! Fix: Banknet will align the UK Maestro program with the ! standard product in two phases. The first phase is a ! partial alignment. By the second phase, the UK Maestro ! program will be supported by a standard Banknet ! interface. UKDM support is defined in the Processing ! Mode field on Screen 3 of the ICFE record. Modified ! uk^domestic^maestro^d to configure UKDM support for ! non-aligned and partially-aligned customers. Add new ! define, ukdm^part^aligned^d, to distinguish non-aligned ! from partially-aligned support. ! Define added: ukdm^part^aligned^d ! Define modified: uk^domestic^maestro^d ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Replace BNETMNWD and BNETUPDT. ! Reference: WO #PR001116 #ADD 00233z00 define uk^domestic^maestro^d = ( pct.options.processing^mde = "D" or pct.options.processing^mde = "P" )#; define ukdm^part^aligned^d = pct.options.processing^mde = "P"#; #DELETE 00233z01 #ENDSCN = SW0E309 !#CMP2.28 09/17/10 BNETLIBS61116FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61116 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61116 * ******************************************************************************** #SCN = SW0E310 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61116 #NEWVERSION = 61117 #ADD e044190R ! 17SEP2010 bensone ! Symptom: Banknet UK Domestic Maestro Technical Alignment ! Problem: None ! Fix: Banknet will align the UK Maestro program with the ! standard product in two phases. The first phase is a ! partial alignment. By the second phase, the UK Maestro ! program will be supported by a standard Banknet ! interface. UKDM support is defined in the Processing ! Mode field on Screen 3 of the ICFE record. Add support ! for partial alignment: (1) drop support for ! manually-entered Purchase with Cash Back requests; ! (2) drop support for de38 in 0110 referral response ! messages; (3) Add support for AVS Request Indicator ! (DE 48 SE 82), CVC 2 Data (DE 48 SE 92) and AVS Data ! (DE 120) in Maestro MOTO/e-commerce transactions ! outbound to the network. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Replace BNETMNWD and BNETUPDT. ! Reference: WO #PR001116 #ADD 05705|01 PSTM^FRMT^0200^TO^XRQST if manual^entry and #DELETE 05705|02 PSTM^FRMT^0200^TO^XRQST #ADD 05705N02 PSTM^FRMT^0200^TO^XRQST if ukdm^part^aligned^d or not uk^domestic^maestro^d then #DELETE 05705N03 PSTM^FRMT^0200^TO^XRQST #ADD 06266 PSTM^FRMT^0200^TO^XRQST if pstm.addr^typ = "98" then #DELETE 06267 PSTM^FRMT^0200^TO^XRQST #DELETE 06267r01/06267r02 PSTM^FRMT^0200^TO^XRQST #ADD 06601r00 PSTM^FRMT^0210^TO^XRESP if uk^domestic^maestro^d and not ukdm^part^aligned^d then #DELETE 06601r01 PSTM^FRMT^0210^TO^XRESP #ADD 08577r00 PSTM^FRMT^SEM^ADDL^DATA if pstm.addr^typ = "98" then #DELETE 08577r01/08577r03 PSTM^FRMT^SEM^ADDL^DATA #ADD 09256N00 PSTM^FRMT^SEM^ADDL^DATA $len( ps51^get^tkn.cvd^fld ) then #DELETE 09256N01 PSTM^FRMT^SEM^ADDL^DATA #DELETE 09256r01/09256r02 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0E310 !#CMP2.28 10/12/10 BNETLIBS61117FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61117 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61117 * ******************************************************************************** #SCN = SW0E337 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61117 #NEWVERSION = 61118 #ADD f044190N ! 12OCT2010 wielerk ! Symptom: AFD advices ( 0120 messages ) can be sent with invalid ! bits turned on. ! Problem: Based on the method of formatting 0120 messages, the ! bit map of a request is moved into the SEM. This can ! cause bits 52 ( PIN ) or 53 ( security info ) to be ! be set in the 0120 although the data will not be ! present. ! Fix: Modified logic to turn off bits 52 and 53 after the SEM ! advice is formatted. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fixes to BNETLIBS, BNETEMVS. Run Make. ! Reference: Case #1090645. #REPLACE E0719402/T0719400 PSTM^FRMT^0220^TO^XADV pin^bit^d := 0; ! P-52 ! sec^control^info^bit^d := 0; ! P-53 ! #ENDSCN = SW0E337 !#CMP2.28 10/15/10 BNETLIBS61118FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61118 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61118 * ******************************************************************************** #SCN = SW0E339 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61118 #NEWVERSION = 61119 #ADD g044190E ! 15OCT2010 wielerk ! Symptom: AFD advices ( 0120 messages ) are not forwarded if the ! original request was EMV. ! Problem: Based on the method of formatting 0120 messages, the ! message type of request is moved into the SEM. If ! fallback is not configured, the formatting fails. ! Fix: Modified logic to set the SEM message type to advice ! for PSTM 0220 messages before EMV formatting is invoked ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1090645. #ADD 05361 PSTM^FRMT^0200^TO^XRQST if pstm.typ = force^post^d then begin movd( sem.typ, sem^auth^advice^d ); end else #ENDSCN = SW0E339 !#CMP2.28 10/22/10 BNETS 60138FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60138 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60138 * ******************************************************************************** #SCN = SW0E351 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #000260D ! 22OCT2010 bensone ! Symptom: Customers can receive EMS message 8001 - $RECEIVE file ! error 2 (operation not allowed on this type file) ! Problem: Util^ilf^get can return false when the ILF is found ! if the ILF does not contain an internal message and the ! caller passed a parameter for it. This causes the ILF ! record to be processed without the file number. ! Fix: Modified logic to set ilf^lgth to zero when ! util^ilf^get returns false. ! Proc Modified: sem^acq^rvsl^rqst ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #01099916, #01099351. #ADD G053741M SEM^ACQ^RVSL^RQST begin ilf^lgth := 0; if ( sem^atm^d( rvsl ) or sem^ncd^txn^d( rvsl ) ) and pct.atm.present then begin rvsl^typ := atm^l; end else begin rvsl^typ := pos^l; end; end; #DELETE G053741N/G053741V SEM^ACQ^RVSL^RQST #ENDSCN = SW0E351 !#CMP2.28 11/22/10 BNETS 60139FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60139 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60139 * ******************************************************************************** #SCN = SW0E361 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $000260F ! 22NOV2010 wielerk ! Symptom: The BNET Interface is rejecting transactions with an ! invalid DE55 field, however, MasterCard stands in and ! authorizes the same transaction. ! Problem: The interface does not respond if unable to expand ! the external message. Mastercard takes the absence of ! a response the opportunity to stand-in. ! If the interface responds with a format error, no ! stand-in will occur. ! Fix: Modify the logic to return the format error response ! code when it encounters an error in field DE55 so ! a format error response can be sent to Mastercard. ! Procs modified: sem^^input^from^station ! sem^request ! Dependency: Apply fixes to BNETS and SW60IBNT.BNETEMVS. ! Run Make. ! Reference: Case #1097641. #REPLACE 05333h00 SEM^^INPUT^FROM^STATION data^elem^err^g ':=' [ $occurs( data^elem^err^g ) * [" "] ]; #ADD 05337 SEM^^INPUT^FROM^STATION if sem.typ <> sem^auth^request^d and data^elem^err^g <> [ $len( data^elem^err^g ) * [" "] ] then begin return true; end; #ADD 06612B09 SEM^REQUEST if data^elem^err^g <> [ $len( data^elem^err^g ) * [" "] ] then begin call sem^request^deny( susp, sta^x, resp^format^error^sem^l, sub^format^error^l ); return; end; #ENDSCN = SW0E361 !#CMP2.28 11/24/10 BNETS 60140FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60140 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60140 * ******************************************************************************** #SCN = SW0E363 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %000260I ! 24NOV2010 wielerk ! Symptom: The BNET Interface is not rejecting funding transactions ! when the LCONF param ( process^moneysend^txn^g ) ! indicates they are not allowed. ! Problem: The interface does not edit the funding transactions ! and the LCONF param to determine if the process should ! pass the transactions into Base24. ! Fix: Modify logic to edit the Moneysend LCONF param and ! de-18 ( merchant type ) to determine if the transactions ! are allowed. ! Proc modified: sem^advice^pos ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #1102765. #ADD u0575701 SEM^ADVICE^POS ( sem.merch^typ = funding^transaction^d and not process^moneysend^txn^g ) or #DELETE z0575700 SEM^ADVICE^POS #ENDSCN = SW0E363 !#CMP2.28 11/24/10 BNETLIBS61119FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61119 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61119 * ******************************************************************************** #SCN = SW0E364 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61119 #NEWVERSION = 61120 #ADD h044190C ! 24NOV2010 wielerk ! Symptom: The BNET Interface is not rejecting funding transactions ! when the LCONF param ( process^moneysend^txn^g ) ! indicates they are not allowed. ! Problem: The interface does not edit the funding transactions ! and the LCONF param to determine if the process should ! pass the transactions into Base24. ! Fix: Modify logic to edit the Moneysend LCONF param and ! de-18 ( merchant type ) to determine if the transactions ! are allowed. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #1102765. #ADD 15175 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.merch^typ = funding^transaction^d and not process^moneysend^txn^g then begin return resp^tran^not^supp^sem^l; end; #ENDSCN = SW0E364 !#CMP2.28 12/03/10 BNETLIBS61120FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61120 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61120 * ******************************************************************************** #SCN = SW0E369 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61120 #NEWVERSION = 61121 #ADD i044190E ! 03DEC2010 wielerk ! Symptom: The BNET Interface is not setting de-48 correctly for ! installment transactions acquired by Base24. ! The interface was considering recurring and installment ! transactions as recurring. ! Problem: The interface attempts to correct TCC settings from ! the SIC table matching based on whether the customer ! is present. ! The interface will incorrectly identify an installment ! transaction as a TCC of "T" (Phone, Mail or E-Commerce ! Order) when de-61.4 (POS cardholder presence) = "4" ! (recurring order). ! Mastercard does not consider installment transactions ! as recurring as there is an agreed end date for the ! installment period. ! Fix: Modify logic to add an edit to include de-61.4 = "4" ! and pstm.pt^srv^cond^cde = "00" to identify if a ! customer is present. ! Removed edits that included installment values as ! recurring types of transactions. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1104267. #REPLACE U0596401 PSTM^FRMT^0200^TO^XRQST if pos^data1^tkn.recur^pmnt^ind = "R" then #DELETE U0596402 PSTM^FRMT^0200^TO^XRQST #REPLACE U0596407 PSTM^FRMT^0200^TO^XRQST ps51^get^tkn.moto^flg = "2" ) then #DELETE U0596408 PSTM^FRMT^0200^TO^XRQST #ADD E0626200 PSTM^FRMT^0200^TO^XRQST if ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "0" or ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and pstm.pt^srv^cond^cde = "00" ) ) then begin if sem.addl^data.info = "T" then begin !! ! Transaction category code cannot be a T if the ! cardholder was present, default to a R. !! movd( sem.addl^data.info, "R" ); end; end else if sem.addl^data.info = "R" then begin !! ! Transaction category code cannot be a R if the ! cardholder was not present, default to a T. !! movd( sem.addl^data.info, "T" ); end; #DELETE E0626201/E062620J PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0E369 !#CMP2.28 01/25/11 BNETS 60141FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60141 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60141 * ******************************************************************************** #SCN = SW0F010 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &000260E ! 25JAN2011 saderc ! Symptom: The interface is not returning the appropriate response ! code when it denies a failed MasterCard On-behalf ! service. ! Problem: The interface is currently returning a response code ! "57" (transaction not permitted to issuer/cardholder). ! It should return a response code "05" (do not honor) ! when denying a failed MasterCard On-behalf service. ! Fix: The interface was modified to return a response code ! "05" when denying a failed MasterCard On-behalf service. ! Proc modified: sem^request ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1111289 #REPLACE p066120o SEM^REQUEST resp^do^not^honor^sem^l, #ENDSCN = SW0F010 !#CMP2.28 01/27/11 BNETS 60142FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60142 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60142 * ******************************************************************************** #SCN = SW0F011 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *000260E ! 27JAN2011 wielerk ! Symptom: The interface is sending non-AFD pre-auth completions ! to Mastercard. ! Problem: The interface should only forward AFD pre-auth ! completions otherwise cardholders can be impacted twice ! by the pre-auth and then by the erroneously sent ! pre-auth completion. ! Fix: Added logic to identify non-AFD completions and to ! log them to the ILF only. ! Proc modified: pstm^0220^force^post ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1111718. #ADD T050110H PSTM^0220^FORCE^POST if pos^preauth^comp^d( pstm ) and sem.advice^cde.reason^cde <> "191" then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! $len(sem^def) !, sub^ok^l ); end #REPLACE Y050112B PSTM^0220^FORCE^POST else #ENDSCN = SW0F011 !#CMP2.28 01/31/11 BNETLIBS61121FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61121 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61121 * ******************************************************************************** #SCN = SW0F012 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61121 #NEWVERSION = 61122 #ADD j044190O ! 31JAN2011 wielerk ! Symptom: The BNET Interface is setting pstm.rvsl^cde to a value ! that is not accepted by HISO. ! Problem: The interface formats a PSTM 0220 adjustment when a ! partial reversal is received from Mastercard. ! Subsequent logic sets pstm.rvsl^cde to values that are ! correct for a PSTM 0420, but not PSTM 0220 adjustments. ! Fix: Modify logic to set pstm.rvsl^cde for adjustments prior ! to logic for reversals. ! Proc modified: sem^frmt^xrvsl^to^pstm^rvsl^cde ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1113433. #ADD E157950O SEM^FRMT^XRVSL^TO^PSTM^RVSL^CDE if pstm.typ = force^post^d and ( pos^adjust^d( pstm ) or pos^return^adjust^d( pstm ) ) then begin ! ! Partial reversals from Mastercard are sent into RTAU ! as 0220 adjustment transactions. ! movd( pstm.rvsl^cde, pos^unkn ); end else #ENDSCN = SW0F012 !#CMP2.28 03/02/11 BNETLIBS61122FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61122 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61122 * ******************************************************************************** #SCN = SW0F046 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61122 #NEWVERSION = 61123 #ADD k044190D ! 02MAR2011 wielerk ! Symptom: The BNET Interface is setting pstm.tran.tran^cde.t to ! values other than 0 for all issuer transactions. ! Problem: The interface contains an if statement meant to apply ! to purchase with cash back transactions. The if ! contains a combination of and/or condition that allow ! all transaction codes to evaluate true. ! Fix: Modify logic to only identify purchase with cash back ! transactions for card type modification. ! Proc modified: sem^frmt^proc^cde to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1117171. #REPLACE 11576 /11577 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( pstm.tran.tran^cde.t = " " or pstm.tran.tran^cde.t = "0" ) then #ENDSCN = SW0F046 !#CMP2.28 03/14/11 BNETS 60143FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60143 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60143 * ******************************************************************************** #SCN = SW0F050 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +000260D ! 14MAR2011 saderc ! Symptom: There isn't a PTLF record being logged when a negative ! acknowledgement (0190) message is received from Banknet. ! Problem: When a negative acknowledgement (0190) message is ! received from Banknet in response to a late ! authorization (0110) response a reversal is not being ! sent to POS Router Auth for logging to the PTLF in the ! scenario where the original transaction was APCF routed. ! The BNET interface currently only sends a 0420 reversal ! message to the original authorizing process. ! Fix: The BNET interface has been modified to send a reversal ! message to POS Router Auth so a record is logged to the ! PTLF. ! Procs modified: sem^response^nack^pos ! Dependency: Apply fixes to the BNETATMS and BNETS. Run Make. ! Reference: Case #1117734 #ADD G068712d SEM^RESPONSE^NACK^POS int .auth^dest[ 0:7 ]; int err; int fatal^flg; string log^auth^dest^resp; #ADD G0687135 SEM^RESPONSE^NACK^POS if base24^rel^g >= 6 then begin ! ! Add Acquirer Routing Token to the PSTM and send the ! reversal. ! err := hiswsem_rvsl_txn_rte_pos( pstm, pct.pos.acq^txn^prfl, pct.station[ sta^x ].nam, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, icfe_name_g, auth^dest, log^auth^dest^resp, fatal^flg, emt_g[ apcfemt_idx_l ].fname ); if err then begin call util^send^pstm( pstm, ilf.orig^net^pro ); end else begin call util^send^pstm( pstm, auth^dest ); if log^auth^dest^resp = "Y" then begin call util^send^pstm( pstm, pct.pos.dest ); end; end; end ! of base24^rel^g >= 6 else begin call util^send^pstm( pstm, ilf.orig^net^pro ); end; ! of if base24^rel^g >= 6 #DELETE G0687136 SEM^RESPONSE^NACK^POS #ENDSCN = SW0F050 !#CMP2.28 04/20/11 BNETDDLS6038 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6038 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6038 * ******************************************************************************** #SCN = SW0F075 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6038 #NEWVERSION = 6039 #ADD 00262l0J * 20APR2011 swiftd * Symptom: Banknet Release 11.1 Mandates. * Problem: None * Fix: Support for the definition of DE 48 SE 23, Payment * Initiation Channel, was added. The BNET switch * token has been modified to support a new field to hold * the contents of DE 48 SE 23, pmnt-initiation-chan. * Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, * BNETLIBS and BNETS. Run Make. * Replace BNETLOGM, BNETMNWD and BNETUPDT. * Reference: WO #001164 #ADD 01157Y0J SEM 08 acct-num-lgth. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 99. #ADD 01157l0M SEM * * Payment Initiation Channel * Subfield tag = 23 * Contains the Device Type value * 06 pmnt-init-chan-sub-fld-23. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 99. #ADD 01157l0N SEM 04 user-fld pic x(56). #DELETE 01157l0O SEM #REPLACE 02760l01 SAF-BNET * Switch token version (ver-id) will be "15". #ADD 02760l0D SAF-BNET 02 pmnt-initiation-chan pic x(2). !02760k08 #DELETE 02760k08 SAF-BNET #ENDSCN = SW0F075 !#CMP2.28 04/20/11 BNETG 6070 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6070 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6070 * ******************************************************************************** #SCN = SW0F076 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00026`0J ! 20APR2011 swiftd ! Symptom: Banknet Release 11.1 Mandates. ! Problem: None ! Fix: A new define has been to identify the new POS Entry Mode ! value for mobile ecomm. A new define has been added to ! identify an electronic commerce transaction. New ! literals to increase the maximum message length that ! XPNET can send to or receive from the Interface process ! have been added to handle Global 102 - Authorization ! Message Expansion. ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS and BNETS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #001164 #ADD 00026z0H ? pan^mapping^tkn #ADD 00026z0K ? pos^data2^tkn #ADD 00026z0N ! pan^mapping^tkn #ADD 00026z0Q ! pos^data2^tkn #ADD 00348v00 #ADD 00348J05 literal max^bnet^msg^lgth^l = 4120, max^bnet^blk^lgth^l = 4128, max^bnet^output^blk^lgth^l = 16512; #ADD 01366b0A mobile^ecomm^d = "82"#, #ADD 01366b0F define sem^ecomm^d( x ) = ( x.pos^entry^mde = elec^commerce or x.pos^entry^mde = mobile^ecomm^d ) #; #ENDSCN = SW0F076 !#CMP2.28 04/20/11 BNETLIBS61123FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61123 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61123 * ******************************************************************************** #SCN = SW0F077 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61123 #NEWVERSION = 61124 #ADD l044190D ! 20APR2011 swiftd ! Symptom: Banknet Release 11.1 Mandates. ! Problem: None ! Fix: Global 501 - Account Status Inquiry Service ! Global 502 - Discontinuation of AVS Only Transactions ! (Acquirer Processing Only) ! Global 506 - Mobile Remote Payments Program ! Global 507 - New Device Type Indicator ! Global 508 - Partial Approval Processing Enhancements ! Global 510 - Revised Test Transaction Standards for ! Recurring Payment Merchants ! Global 511 - Support for MasterCard Transit Standards ! Case #01110537 - (Minor Errors in the Banknet Interface) ! Case #01122000 - Changes made to ensure that proc ! pstm^frmt^resp^cde^to^sem is invoked ! only if the transaction is not a ! pre-auth completion ! procs added: util^ilf^process^advice ! util^ilf^process^reversal ! procs modified: pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^amt^to^pstm^amt ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xresp ! util^ilf^add ! util^ilf^updt ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS and BNETS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #001164 #ADD 05708A1J PSTM^FRMT^0200^TO^XRQST if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "CP" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C06" ); end; if txn^spcf^data^tkn.related^txn^data. bus^appl^id = "C9" then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C09" ); end; #DELETE 05929 /05935 PSTM^FRMT^0200^TO^XRQST #ADD 05964 PSTM^FRMT^0200^TO^XRQST if pos^pre^auth^d( pstm ) then begin ! Pre-auth transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end else if pos^crd^vrfy^d( pstm ) then begin ! Account status inquiry transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "8" ); end; #ADD 05964v0E PSTM^FRMT^0200^TO^XRQST if tran^amt = 1f or tran^amt = 0f then #DELETE 05964v0F PSTM^FRMT^0200^TO^XRQST #ADD 05964c15 PSTM^FRMT^0200^TO^XRQST movl( sem.tran^amt, zeroes, $len( sem.tran^amt ) ); #ADD 06390 PSTM^FRMT^0210^TO^XRESP int i := 0; #ADD 06398 PSTM^FRMT^0210^TO^XRESP int .pan^mapping^tkn( pan^mapping^tkn^def ); int pan^mapping^tkn^lgth := 0; #ADD 07101 PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info. paypass^mapping^sub^fld^33.tag = " " then begin tkn^id ':=' pan^mapping^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pan^mapping^tkn, ps50^lgth ) then begin if pan^mapping^tkn.acct^num^ind = "E" then begin addl^data^bit^d := 1; movd( sem.addl^data.info. paypass^mapping^sub^fld^33.tag, "33" ); move ( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind, pan^mapping^tkn.acct^num^ind ); se^lgth := $len( pan^mapping^tkn.acct^num^ind ); i := 0; while i < $len( pan^mapping^tkn.acct^num ) and $numeric( pan^mapping^tkn.acct^num. byte[ i ] )do begin i := i + 1; end; call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^lgth.tag^data, i ); move ( sem.addl^data.info. paypass^mapping^sub^fld^33.acct^num, pan^mapping^tkn.acct^num ); se^lgth := se^lgth + i + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^lgth.tag^data ); if pan^mapping^tkn.exp^dat <> [ $len( pan^mapping^tkn.exp^dat ) * [" "] ] then begin move ( sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat, pan^mapping^tkn.exp^dat ); se^lgth := se^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat ); end; call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, se^lgth ); if sem.addl^data.lgth = " " then begin ! ! 1 byte length of TCC will be present ! movd( sem.addl^data.lgth, "001" ); end; call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of pan^mapping^tkn.acct^num^ind = "E" end; end; ! of if .... tag = "33" then #ADD 07200=0W PSTM^FRMT^0220^TO^XADV if not pos^preauth^comp^d( pstm ) then #ADD 07200=10 PSTM^FRMT^0220^TO^XADV resp^cde^bit^d := 1; if not pstm^frmt^resp^cde^to^sem( pstm, sem ) then return resp^unable^to^process^pos^l; #DELETE 07203 /07206 PSTM^FRMT^0220^TO^XADV #ADD 07883100 PSTM^FRMT^AMT^TO^SEM^AMT ( pstm.tran.resp^cde = "010" or pstm.tran.amt^1 <> pstm^.tran.amt^1 ) and #DELETE 07883101 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 08294 PSTM^FRMT^RESP^CDE^TO^SEM if pos^crd^vrfy^d( pstm ) and sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "4" then begin if pos^approved^d( pstm ) then begin movd( sem.resp^cde, "85" ); end else begin movd( sem.resp^cde, "05" ); end; return true; end; #DELETE 08295 /08300 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 08583 PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.avs^rqst.cde, "52" ); #DELETE 08584 /08601 PSTM^FRMT^SEM^ADDL^DATA #ADD 10068N00 SEM^FRMT^AMT^TO^PSTM^AMT if pos^crd^vrfy^d( pstm ) then #DELETE 10068N01 SEM^FRMT^AMT^TO^PSTM^AMT #ADD H1061302 SEM^FRMT^AMT^TO^PSTM^AMT if tran^amt = pstm.tran.amt^1 then begin movd( pstm.tran.resp^cde, "010" ); end; #ADD 11336 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM sem.pos^entry^mde = mobile^ecomm^d or #ADD 11416 SEM^FRMT^PRIKEY if $param( orig^b24 ) and not orig^b24 then begin movd ( prikey.orig^b24, "2" ); end; #ADD d1154602 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.tran^amt = [ $len( sem.tran^amt ) * [ "0" ] ] then begin ! ! Card Verification transaction. ! movd( pstm.tran.tran^cde.tc, "16" ); return true; end; #ADD d1154700 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 13707 SEM^FRMT^XRQST^TO^PSTM^0200 struct .pos^data2^tkn( pos^data2^tkn^def ); #ADD 13755 SEM^FRMT^XRQST^TO^PSTM^0200 int pos^data2^tkn^lgth := 0; #ADD 13941c0M SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C09" then begin ! ! ! Card Activation ! ! ! movd( txn^spcf^data^tkn.related^txn^data. bus^appl^id, "C9" ); end else #ADD 14676 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "6" and sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "8" then #DELETE 14677 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14681 SEM^FRMT^XRQST^TO^PSTM^0200 end; #DELETE 14682 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD d146900g SEM^FRMT^XRQST^TO^PSTM^0200 if sem^ecomm^d( sem ) then #DELETE d146900h SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14762 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^ecomm^d( sem ) then #DELETE 14763 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14787 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add the F1 E-Commerce Additional Data Token ! The ps51^tkn^id^d in tkn^id gets overlayed so ! it is restored below. ! tkn^id ':=' e^com^addl^data^tkn^id^d; e^com^addl^data^tkn ':=' blanks for $len( e^com^addl^data^tkn ); #DELETE E1480000/E1480008 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14800v1A SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if tag = "42" if sem.pos^entry^mde = mobile^ecomm^d then begin e^com^addl^data^tkn.dev^typ := "0"; end; if e^com^addl^data^tkn <> [ $len( e^com^addl^data^tkn ) * [ " " ] ] then begin #DELETE E148001I SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14802 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' ps51^tkn^id^d; #ADD E148061J SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.tran^amt = zeroes for $len( sem.tran^amt ) and sem.ntl^pos^data.cond^cde. byte[ 6 ] = "6" then begin ! ! CVD not validated ! movd( card^vrfy^flg, "N" ); end; #ADD E148061U SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "15" and sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag = "34" then begin tkn^id ':=' pos^data2^tkn^id^d; ! ! initialize pos^data2^tkn ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^data2^tkn ); call ascii^integer^( sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^val, pos^data2^tkn.atc ); if sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag^data. atc^discrp^ind = " " then begin movd( pos^data2^tkn.atc^valid^ind, "0" ); end else begin move( pos^data2^tkn.atc^valid^ind, sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind ); end; tkn^add^lgth := $offset( pos^data2^tkn.user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data2^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3258, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3260, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result end; ! of if sem.addl^data.info.on^behalf^svc^ #ADD 17023A0I UTIL^COLLAPSE^SEM if hdr.addl^data.info. pmnt^init^chan^sub^fld^23. tag = "23" then begin ! ! ! convert the length ! ! ! call ascii^integer( hdr.addl^data.info. pmnt^init^chan^sub^fld^23.lgth, 2, tag^length ); ! ! ! move tag, tag^lgth and tag^data to ptr ! ! ! movl( ptr, hdr.addl^data.info. pmnt^init^chan^sub^fld^23.tag, ( tag^length + 4 ) ); ! ! ! convert data moved to ptr to EBCDIC ! ! ! call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); ! ! ! move the pointer past the data moved in ! ! ! @ptr := @ptr[ tag^length + 4 ]; end; ! of SE 23, Payment Initiation Channel ! #ADD 18502c0B UTIL^EXPAND^SEM else if ptr[ length ] = "23" then begin movl( sem^ptr.addl^data.info. pmnt^init^chan^sub^fld^23.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 18874 UTIL^EXPAND^SEM if length <> t^length + 3 then begin ! Parsing of DE 48 has gone wrong somewhere. ! length := t^length + 3; movd( data^elem^err^g, "048" ); end; #ADD 18889c0x UTIL^EXPAND^SEM if length <> t^length + 3 then begin ! Parsing of DE 112 has gone wrong somewhere. ! length := t^length + 3; movd( data^elem^err^g, "112" ); end; #ADD 19067v0p UTIL^FRMT^ADDL^DATA^TO^XRESP ! ! SE 33—PayPass Mapping ! if sem.addl^data.info.paypass^mapping^sub^fld^33.tag = "33" then begin call ascii^integer^( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33.tag ) + $len( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth ); lgth := lgth + delta^lgth; end; #DELETE 19067v0q/19067v17 UTIL^FRMT^ADDL^DATA^TO^XRESP #DELETE 20375 /20380 UTIL^ILF^ADD #ADD 20430 UTIL^ILF^ADD if prikey.orig^b24 <> "1" then #DELETE 20431 UTIL^ILF^ADD #ADD 20534 UTIL^ILF^ADD if $param( base24^msg ) and prikey.orig^b24 <> "1" then #DELETE 20535 UTIL^ILF^ADD #ADD 21455 UTIL^ILF^OPEN ?section util^ilf^process^advice ?page " - util^ilf^process^advice" !##################################################################### !# # !# UTIL^ILF^PROCESS^ADVICE # !# # !# NARRATIVE : THIS PROCEDURE CHECKS FOR A DUPLICATE ADVICE # !# MESSAGE AND FOR AN ASSOCIATED REVERSAL MESSAGE IN THE ILF # !# RECORD. # !# # !# INPUT PARAMETERS: SEM, FNUM, ILF, ILF^LGTH and ILF^FOUND # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### int proc util^ilf^process^advice( sem, fnum, ilf, ilf^lgth, ilf^found ); int .sem( sem^def ); int fnum; int .ilf( ilf^def ); int ilf^lgth; int ilf^found; begin if ilf.sem.tran^typ = sem^auth^advice^d then begin ! drop as a duplicate return false; end else if ilf.sem.tran^typ = sem^auth^request^d or ilf.sem.tran^typ = sem^auth^response^d then begin ! attempt to locate another ILF record for the ! transaction with a different PRIKEY value. ilf^found := false; call sem^frmt^prikey( sem, ilf.prikey, false ); if fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth ) then begin if ilf.sem.tran^typ = sem^auth^advice^d then begin ! drop as a duplicate return false; end else if ilf.substate = sub^rvsl^not^found^l then begin ilf^found := true; if ilf.intrn^msg^savearea^lgth = 0 and sem^approved^d( sem ) then begin ! update the ILF record and drop the advice ! if the advice is approved and the reversal ! was also dropped. call util^ilf^updt( fnum, ilf, ilf^lgth, 0 ); return false; end; end; end; end else if ilf.substate = sub^rvsl^not^found^l then begin if ( sem.trace^num = ilf.sem.trace^num for $len( ilf.sem.trace^num ) ) then begin ! the ILF record contains an unmatched system- ! generated reversal advice, which must be reversing ! an authorization request that never reached BASE24. ! So don't update this record, but instead ! attempt to locate another ILF record for the ! transaction with a different PRIKEY value. ilf^found := false; call sem^frmt^prikey( sem, ilf.prikey, false ); if fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth ) then begin if ilf.sem.tran^typ = sem^auth^advice^d then begin ! drop as a duplicate return false; end else if ilf.substate = sub^rvsl^not^found^l then begin ilf^found := true; if ilf.intrn^msg^savearea^lgth = 0 then begin ! update the ILF record and drop the ! advice if the reversal was also dropped. call util^ilf^updt( fnum, ilf, ilf^lgth, 0 ); return false; end; end; end; end else if ilf.intrn^msg^savearea^lgth = 0 and sem^approved^d( sem ) then begin ! update the ILF record and drop the advice if the ! advice is approved and the reversal was also ! dropped. call util^ilf^updt( fnum, ilf, ilf^lgth, 0 ); return false; end; end; return true; end; ?section util^ilf^process^reversal ?page " - util^ilf^process^reversal" !##################################################################### !# # !# UTIL^ILF^PROCESS^REVERSAL # !# # !# NARRATIVE : THIS PROCEDURE CHECKS FOR A DUPLICATE REVERSAL # !# MESSAGE AND FOR A DIFFERENT ASSOCIATED REVERSAL MESSAGE # !# IN THE ILF RECORD. # !# # !# INPUT PARAMETERS: SEM, FNUM, ILF, ILF^LGTH and ILF^FOUND # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### int proc util^ilf^process^reversal( rvsl, sem, pstm, ilf, ilf^lgth, true ); int .rvsl( sem^def ); int .sem( sem^def ); int .pstm( pstm^def ); int .ilf( ilf^def ); int ilf^lgth; int true; begin int ilf^fnum; int ilf^found; int fnum; if poss^dup^d( sem ) then begin if ( rvsl.trace^num = sem.trace^num for $len( sem.trace^num ) ) then begin ! drop as a duplicate return false; end else begin ! attempt to locate another ILF record for the ! transaction with a different PRIKEY value. ilf^found := false; call sem^frmt^prikey( sem, ilf.prikey, false ); if ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, ! base24^msg !, sem ) ) then begin ilf^found := true; if poss^dup^d( sem ) then begin ! drop as a duplicate return false; end; end; end; end ! if duplicate is found else if ilf.sem.tran^typ = sem^auth^advice^d then begin if ( rvsl.trace^num = ilf.sem.trace^num for $len( ilf.sem.trace^num ) ) then begin ! This is a system-generated reversal advice, ! which must be reversing an authorization request ! that never reached BASE24. ! So don't update this record, but instead ! attempt to locate another ILF record for the ! transaction with a different PRIKEY value. ilf^found := false; call sem^frmt^prikey( sem, ilf.prikey, false ); if fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, !base24^msg!, sem ) then begin ilf^found := true; if poss^dup^d( sem ) then begin ! drop as a duplicate return false; end; end; end; end; return true; end; #ADD 21849 UTIL^ILF^UPDT if ( ilf.rec^typ = pos^l or ilf.rec^typ = atm^l ) and sem.typ = "01" then begin move ( ilf.sem.tran^typ, sem.typ ); call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, ilf.sem.swi^dat ); mov^ ( ilf.sem.swi^tim, zeroes ); movl ( ilf.sem.swi^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); move ( ilf.sem.trace^num, sem.trace^num ); move ( ilf.sem.resp^cde, sem.resp^cde ); mov^ ( ilf.sem.rvsl^cde, blanks ); move ( ilf.sem.rvsl^cde, sem.advice^cde.reason^cde ); end; #DELETE 21850 /21859 UTIL^ILF^UPDT #ADD 21909 UTIL^ILF^UPDT if orig_b24 <> "1" then #DELETE 21910 UTIL^ILF^UPDT #ADD 21984 UTIL^ILF^UPDT if $param( base24^msg ) and orig_b24 <> "1" then #DELETE 21985 UTIL^ILF^UPDT #ADD 22008 UTIL^ILF^UPDT orig_b24 = "1" and #REPLACE d2499701 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "15"; #ADD Q251340G UTIL^SWI^TKN^INIT if sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag = "23" then begin move( bnet^tkn^buf.pmnt^initiation^chan, sem.addl^data.info.pmnt^init^chan^sub^fld^23. tag^data ); end; #ADD d254040F UTIL^SWI^TKN^UPDT if bnet^tkn^buf.pmnt^initiation^chan <> blanks for $len( bnet^tkn^buf.pmnt^initiation^chan ) then begin movl( bnet^tkn.pmnt^initiation^chan, bnet^tkn^buf.pmnt^initiation^chan, $len( bnet^tkn.pmnt^initiation^chan ) ); end; ! of if bnet^tkn^buf.pmnt^initiation^chan #ENDSCN = SW0F077 !#CMP2.28 04/20/11 BNETS 60144FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60144 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60144 * ******************************************************************************** #SCN = SW0F079 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60144 #NEWVERSION = 60145 #ADD -000260H ! 20APR2011 swiftd ! Symptom: Banknet Release 11.1 Mandates. ! Problem: None ! Fix: Global 102 - Authorization Message Expansion ! Case #01090955 (Force Post Transactions Declined at the ! Terminal Level) ! Case #01096322. Log message numbers 4023 and 4024 were ! duplicated in modules BNETS and BNETEMVS. Added log ! messages 4133 and 4134 to BNETLOGM and made changes ! to use these new log messages. ! procs modified: init^snf ! main ! sem^acq^rvsl^rqst^pos ! sem^advice^pos ! sem^frmt^prikey ! sem^^input^from^station ! sem^response ! sem^response^pos ! sem^reversal^advice ! util^ilf^add ! util^ilf^updt ! Dependency: Apply fixes to BNETATMS, BNETDDLS, BNETEMVS, BNETG, ! BNETLIBS and BNETS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #001164 #ADD 00305R00 BNETS^60^144 if not netinit( max^bnet^msg^lgth^l, max^bnet^blk^lgth^l, max^bnet^msg^lgth^l, #DELETE 00305R01/00305R03 BNETS^60^144 #ADD u0030500 BNETS^60^144 max^bnet^output^blk^lgth^l, #DELETE u0030501 BNETS^60^144 #ADD G045460Z INIT^SNF log^message^( 4133, #DELETE G045460a INIT^SNF #ADD O0454608 INIT^SNF log^message^( 4134, #DELETE G0454613 INIT^SNF #ADD 05305 SEM^^INPUT^FROM^STATION int .csem( sem^def ) := wordaddr( @mtp ), #DELETE 05306 /05307 SEM^^INPUT^FROM^STATION #DELETE 05309 SEM^^INPUT^FROM^STATION #ADD 05310 SEM^^INPUT^FROM^STATION struct .sem( sem^def ); #ADD z053741n FRMT^AND^SEND^ACQ^RVSL^RESP if ilf^lgth > 0 and not util^ilf^process^reversal( rvsl, sem, pstm, ilf, ilf^lgth, true ) then #DELETE z053741o FRMT^AND^SEND^ACQ^RVSL^RESP #ADD z0574602 SEM^ADVICE^POS if sem^preauth^match^d( sem ) and sem.advice^cde.reason^cde = "191" then begin ! completion advice if pos^preauth^comp^d( ilf.pos ) then begin ! drop as a duplicate return; end; end else if not util^ilf^process^advice( sem, fnum, ilf, ilf^lgth, ilf^found ) then #DELETE 05747 SEM^ADVICE^POS #ADD 05764j0U SEM^ADVICE^POS if ilf^found then begin call util^ilf^updt( fnum, ilf, ilf^lgth, 0, pstm, sem ); return; end; #DELETE 06809 /06810 SEM^RESPONSE #ADD 07173 SEM^RESPONSE^POS struct .rvsl( sem^def ); #DELETE 07174 /07175 SEM^RESPONSE^POS #ADD q0725600 SEM^REVERSAL^ADVICE if ilf^found and not util^ilf^process^reversal( rvsl, sem, base24^msg, ilf, ilf^lgth, ilf^found ) then #DELETE q0725601 SEM^REVERSAL^ADVICE #ENDSCN = SW0F079 !#CMP2.28 04/28/11 BNETDDLS6039 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6039 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6039 * ******************************************************************************** #SCN = SW0F093 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6039 #NEWVERSION = 6040 #ADD 00262m0C * 28APR2011 swiftd * Symptom: ILF record length inconsistency after conversion. * Problem: Changes made in BNETDDLS and BNETLIBS for handling the * new S8 token were incorrect. * Fix: In BNETDDLS, lines of code added to the sub element * 33 (paypass-mapping-sub-fld-33) definition have been * removed. In BNETLIBS, code associated with the * paypass-mapping-sub-fld-33 has been modified in proc * pstm^frmt^0210^to^xresp. * Dependency: Apply fix to BNETDDLS and BNETLIBS. Run Make. * Reference: Case #01127647. #DELETE 01157m00/01157m05 SEM #ENDSCN = SW0F093 !#CMP2.28 04/28/11 BNETLIBS61124FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61124 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61124 * ******************************************************************************** #SCN = SW0F094 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61124 #NEWVERSION = 61125 #ADD m044190d ! 27APR2011 swiftd ! Symptom: Mandatory field DE39 is missing. ! Problem: The fix for case #01122000 successfully ensured that ! the values of DE 38 and DE 39 from the 0110 response ! message were not overwritten in the 0120 message. ! Unfortunately, it looks as if the code change means that ! the bits for these fields are no longer being set in the ! primary bit map. ! Fix: Made changes to set resp^cde^bit^d to 1 unconditionally, ! and to set auth^id^resp^bit^d to 1, if sem.auth^id^resp ! contains a value other than spaces. ! proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #01127602. ! 28APR2011 swiftd ! Symptom: ILF record length inconsistency after conversion. ! Problem: Changes made in BNETDDLS and BNETLIBS for handling the ! new S8 token were incorrect. ! Fix: In BNETDDLS, lines of code added to the sub element ! 33 (paypass-mapping-sub-fld-33) definition have been ! removed. In BNETLIBS, code associated with the ! paypass-mapping-sub-fld-33 has been modified in proc ! pstm^frmt^0210^to^xresp. ! Dependency: Apply fix to BNETDDLS and BNETLIBS. Run Make. ! Reference: Case #01127647. #ADD m071010J PSTM^FRMT^0210^TO^XRESP ! ! ACCOUNT NUMBER INDICATOR ! movd( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag, "01" ); movd( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.lgth, "01" ); move ( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag^data, pan^mapping^tkn.acct^num^ind); se^lgth := $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind ); ! ! ACCOUNT NUMBER ! movd( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag, "02" ); i := 0; while i < $len( pan^mapping^tkn.acct^num ) and $numeric( pan^mapping^tkn.acct^num. byte[ i ] )do begin i := i + 1; end; call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.lgth, i ); move ( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data, pan^mapping^tkn.acct^num ); se^lgth := se^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag ) + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.lgth ) + i; ! ! CARD EXPIRATION DATE ! if pan^mapping^tkn.exp^dat <> [ $len( pan^mapping^tkn.exp^dat ) * [" "] ] then begin movd( sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag, "03" ); movd( sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.lgth, "04" ); move ( sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag^data, pan^mapping^tkn.exp^dat ); #DELETE m071010K/m071010z PSTM^FRMT^0210^TO^XRESP #ADD 07200=0z PSTM^FRMT^0220^TO^XADV end else begin resp^cde^bit^d := 1; if sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * [ " " ] ] then begin auth^id^resp^bit^d := 1; end; end; #DELETE 07200=10 PSTM^FRMT^0220^TO^XADV #REPLACE m0720004 PSTM^FRMT^0220^TO^XADV resp^cde^bit^d := 1; #REPLACE m0720006/m0720007 PSTM^FRMT^0220^TO^XADV if not pstm^frmt^resp^cde^to^sem( pstm, sem ) then return resp^unable^to^process^pos^l; #ENDSCN = SW0F094 !#CMP2.28 05/05/11 BNETLIBS61125FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61125 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61125 * ******************************************************************************** #SCN = SW0F097 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61125 #NEWVERSION = 61126 #ADD n044190R ! 05MAY2011 saderc ! Symptom: Mandatory field DE-39 (response code) and conditional ! field DE-38 (auth id response) is not being sent in ! 0120 AFD completion. ! Problem: The fix for SCN #SW0F094 addressed this issue. However, ! since the new logic was put in the wrong location, DE-38 ! and DE-39 are not being sent in a 0120 AFD completion. ! Fix: The BNET interface was modified to ensure that DE-39 ! is present in a 0120 AFD completion. Also, DE-38 will ! be sent, if it was present in the original message from ! the ILF. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to SW60BNET.BNETLIBS. Run Make. ! Reference: Case #01128248 #DELETE n0720001/n0720009 PSTM^FRMT^0220^TO^XADV #ADD n072000M PSTM^FRMT^0220^TO^XADV end else begin resp^cde^bit^d := 1; if sem.auth^id^resp <> [ $len( sem.auth^id^resp ) * [ " " ] ] then begin auth^id^resp^bit^d := 1; end; end; ! UKDM else #DELETE 07200=11 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0F097 !#CMP2.28 05/10/11 BNETG 6071 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6071 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6071 * ******************************************************************************** #SCN = SW0F099 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00026~0F ! 10MAY2011 swiftd ! Symptom: Banknet Release 10.1 AFD Completion Advice. ! Problem: None ! Fix: A new define has been to identify the new log-only ! BASE24 message type. ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS, and ! PS60EXT.PTLFXS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #002006 #ADD 00087 define log^only^d = "9922"#; #ADD 00435^05 int log^only^compl^adv^g; #ADD 01366v0K int log^only^compl^adv^g; #ENDSCN = SW0F099 !#CMP2.28 05/10/11 BNETLIBS61126FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61126 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61126 * ******************************************************************************** #SCN = SW0F100 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61126 #NEWVERSION = 61127 #ADD o044190F ! 10MAY2011 swiftd ! Symptom: Banknet Release 10.1 AFD Completion Advice. ! Problem: None ! Fix: The Banknet Interface has been enhanced to provide full ! support of Release Item 502, AFD Completion Advice, as ! specified in the Authorization and Clearing Release 10.1 ! Document and Authorization and Clearing Release 10.1 ! Clarifications. ! procs modified: pstm^frmt^0220^to^xadv ! sem^frmt^xresp^to^pstm^0210 ! util^ilf^add ! util^ilf^get^pos^preauth ! util^ilf^updt ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS, and ! PS60EXT.PTLFXS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #002006 #ADD T0717501 PSTM^FRMT^0220^TO^XADV movl ( sem.typ, orig^sem.typ, $len( sem ) ); #DELETE T0717502 PSTM^FRMT^0220^TO^XADV #REPLACE 07175v0L PSTM^FRMT^0220^TO^XADV #ADD 12726c0D SEM^FRMT^XRESP^TO^PSTM^0210 if pos^pre^auth^d( pstm ) and pos^preauth^match^d( pstm ) then begin movd( compliance^get^tkn.valid^cde, "1" ); end else if pos^preauth^comp^d( pstm ) then begin movd( compliance^get^tkn.valid^cde, "2" ); end; #ADD 12750c0J SEM^FRMT^XRESP^TO^PSTM^0210 if pos^pre^auth^d( pstm ) and pos^preauth^match^d( pstm ) then begin movd( compliance^get^tkn.valid^cde, "1" ); end else if pos^preauth^comp^d( pstm ) then begin movd( compliance^get^tkn.valid^cde, "2" ); end; #ADD 20320N01 UTIL^ILF^ADD string trace^id[ 0:12 ]; #ADD 20365 UTIL^ILF^ADD trace^id ':=' sem.banknet^data.ntwk^id^cde for 3 & sem.banknet^data.ref^num for 6 & sem.setl^dat for 4; #DELETE 20366 /20367 UTIL^ILF^ADD #ADD 20373 UTIL^ILF^ADD mov^ ( ilf.sem.user^fld, trace^id ); #DELETE 20374 UTIL^ILF^ADD #DELETE 20471 /20487 UTIL^ILF^ADD #ADD 20495 UTIL^ILF^ADD trace^id ':=' admin.banknet^data.ntwk^id^cde for 3 & admin.banknet^data.ref^num for 6 & admin.setl^dat for 4; #DELETE 20496 /20497 UTIL^ILF^ADD #ADD 20499 UTIL^ILF^ADD mov^ ( ilf.sem.user^fld, trace^id ); #DELETE 20500 UTIL^ILF^ADD #ADD 21239v22 UTIL^ILF^GET^POS^PREAUTH int .compliance^get^tkn( ichg^compliance^tkn^def ); int compliance^get^lgth; int dspy := false; int ofst := 0; int pos^userdata; int .pstm^( pstm^def ); int tkn^id[ 0:1 ]; int tkn^lgth; int tkn^result; #DELETE 21239v23 UTIL^ILF^GET^POS^PREAUTH #ADD 21239v28 UTIL^ILF^GET^POS^PREAUTH if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; #ADD 21239v2E UTIL^ILF^GET^POS^PREAUTH pstm^, #DELETE 21239v2F UTIL^ILF^GET^POS^PREAUTH #ADD 21239v2T UTIL^ILF^GET^POS^PREAUTH tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm^, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, compliance^get^tkn, compliance^get^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); end; #ADD 21816 UTIL^ILF^UPDT string trace^id[ 0:12 ]; #ADD 21839 UTIL^ILF^UPDT trace^id ':=' admin.banknet^data.ntwk^id^cde for 3 & admin.banknet^data.ref^num for 6 & admin.setl^dat for 4; mov^ ( ilf.sem.user^fld, trace^id ); #DELETE 21840 /21841 UTIL^ILF^UPDT #ADD m218490G UTIL^ILF^UPDT trace^id ':=' sem.banknet^data.ntwk^id^cde for 3 & sem.banknet^data.ref^num for 6 & sem.setl^dat for 4; mov^ ( ilf.sem.user^fld, trace^id ); #DELETE m2185000/m2185002 UTIL^ILF^UPDT #ENDSCN = SW0F100 !#CMP2.28 05/10/11 BNETS 60145FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60145 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60145 * ******************************************************************************** #SCN = SW0F103 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60145 #NEWVERSION = 60146 #ADD :000260Q ! 10MAY2011 swiftd ! Symptom: Banknet Release 10.1 AFD Completion Advice. ! Problem: None ! Fix: The Banknet Interface has been enhanced to provide full ! support of Release Item 502, AFD Completion Advice, as ! specified in the Authorization and Clearing Release 10.1 ! Document and Authorization and Clearing Release 10.1 ! Clarifications. ! procs added: pstm^0200^send^compl^advc ! sem^advice^response^compl ! sem^advice^response^pos ! procs modified: cmd^warmboot^store^globals ! cmd^warmboot^close^old ! cmd^warmboot^retrieve^globals ! init^bnet^g ! init^paramproc ! pstm^0200^request ! pstm^0200^route ! sem^advice^response ! Dependency: Apply fixes to BNETG, BNETLIBS, BNETS, and ! PS60EXT.PTLFXS. Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #002006 #ADD z0259903 CMD^WARMBOOT^STORE^GLOBALS store^bnet^g^d( log^only^compl^adv^g ); #ADD z0259907 CMD^WARMBOOT^STORE^GLOBALS bnet^g.log^only^compl^adv^g := false; #ADD z025990B CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^bnet^g^d( log^only^compl^adv^g ); #ADD z0283103 INIT^BNET^G bnet^g.log^only^compl^adv^g := 0; #ADD z0394502 INIT^PARAMPROC "P", "SW-BNET-LOG-ONLY-COMPL-ADVICE ", #ADD z039960X INIT^PARAMPROC ! ! SW-BNET-LOG-ONLY-COMPL-ADVICE ! if not ferror then begin bnet^g.log^only^compl^adv^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.log^only^compl^adv^g := true; end; end; #ADD Y0471203 PSTM^0200^REQUEST struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD G0472103 PSTM^0200^REQUEST int substate := 0; #ADD Y047210P SUB^APPRV^BLIND call util^send^pstm( pstm, susp.orig^net^pro ); #DELETE Y047210Q SUB^APPRV^BLIND #ADD G0479901 SUB^APPRV^BLIND if ( pos^preauth^comp^d( pstm ) and not pos^preauth^match^d( pstm ) ) or ( pos^return^d( pstm ) and not pos^pmnt^d( pstm ) ) then #DELETE G0479902/G0479906 SUB^APPRV^BLIND #ADD 04808 SUB^APPRV^BLIND if pos^preauth^comp^d( pstm ) then begin if not pstm^0200^send^compl^advc( susp, sem, logon^acq, service, avs^typ, substate ) then begin ! request needs to be approved and logged to the ILF ! call sub^apprv^blind( pstm ); if substate = sub^rqst^down^l or substate = sub^system^error^l then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, sem, $len( sem^def ), substate ); end else begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm ); end; end; return; end else #ADD 04849 PSTM^0200^ROUTE proc pstm^0200^route( susp, response, substate, msg^sent ) extensible; #DELETE 04850 PSTM^0200^ROUTE #ADD 04853 PSTM^0200^ROUTE int msg^sent; #ADD v0488200 PSTM^0200^ROUTE if substate = sub^format^error^l or #DELETE v0488201/v0488202 PSTM^0200^ROUTE #DELETE 04882{00/04882{0P PSTM^0200^ROUTE #ADD 04884R00 PSTM^0200^ROUTE if pos^preauth^comp^d( pstm ) then begin if dest = susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ) then begin return; end else if $param( msg^sent ) then begin msg^sent := true; end; end; #ADD 04887 PSTM^0200^ROUTE ?section pstm^0200^send^compl^advc ?page " pstm^0200^send^compl^advc" !##################################################################### !# # !# PSTM^0200^SEND^COMPL^ADVC # !# # !# NARRATIVE : THE PROCEDURE WILL RETURN EITHER 'TRUE' (IF THE # !# INTERFACE IS ABLE TO SEND THE MESSAGE IMMEDIATELY # !# EITHER TO BANKNET OR TO AN ALTERNATE DESTINATION) # !# OR 'FALSE' (IF THE INTERFACE CANNOT SEND THE # !# MESSAGE IMMEDIATELY). # !# # !# INPUT PARAMETERS : # !# SUSP : SUSPENSE RECORD # !# SEM : MESSAGE TEXT POINTER # !# LOGON^ACQ : ACQUIRER LOGON # !# SERVICE : SERVICE TYPE ASSOCIATED WITH THE GROUP # !# AVS^TYP : ADDRESS VERIFICATION TYPE # !# SUBSTATE : ILF SUBSTATE # !# # !# OUTPUT PARAMETERS : # !# # !##################################################################### int proc pstm^0200^send^compl^advc( susp, sem, logon^acq, service, avs^typ, substate ); int .susp( susp^bnet^def ); int .sem( sem^def ); int logon^acq; int service; int avs^typ; int substate; begin struct .csem( sem^def ); int extlgth; int msg^sent := false; int response := 0; int .pstm( pstm^def ) := @susp.intrn^msg; int sta^x := -1; if response := pstm^frmt^0220^to^xadv( susp.intrn^msg, sem, susp.prikey, avs^typ ) then begin substate := sub^format^error^l; return false; end; ! of if response := pstm^frmt^0220^to^xadv if sem.advice^cde.reason^cde <> "191" then begin call pstm^0200^route( pstm, resp^no^error^pos^l, sub^ok^l, msg^sent ); substate := sub^not^supported^l; return msg^sent; end; if not util^^collapse( sem, csem, extlgth ) then begin substate := sub^format^error^l; return false; end; if not logon^acq then begin call util^saf^add( csem, extlgth, pos^l, service ); substate := sub^rqst^down^l ; return false; end; if not util^station^avail( sta^x, service ) then begin call util^saf^add( csem, extlgth, pos^l, service ); substate := sub^rqst^down^l ; return false; end; if not util^suspend^and^send^sem( csem, extlgth, susp, sta^x ) then begin call util^saf^add( csem, extlgth, pos^l, service ); substate := sub^system^error^l; return false; end; return true; end; #ADD w058220t SEM^ADVICE^RESPONSE if ilf.rec^typ = pos^l then begin call sem^advice^response^pos( ilf, advc, base24^msg ); end; if not util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, base24^msg, advc ) then #DELETE w058220u/w058220w SEM^ADVICE^RESPONSE #ADD w0582502 SEM^ADVICE^RESPONSE call sem^frmt^prikey( sem, susp.prikey, true ); if util^suspend^tran^delete( susp, $len( susp^bnet^def ), type^outbound^l, msg ) then begin call sem^advice^response^compl( susp, sem ); end end; ?section sem^advice^response^compl ?page "sem^advice^response^compl" !##################################################################### !# # !# sem^advice^response^compl # !# # !# This procedure formats a pre-auth completion response for an # !# AFD transaction from an external AFD completion advice response, # !# and sends the message to the POS Router/Auth process. # !# INPUT PARAMETERS: # !# susp - pointer to the suspense message. # !# sem - advice response message # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^advice^response^compl( susp, sem ); int .susp( susp^bnet^def ); int .sem( sem^def ); begin int .pstm( pstm^def ) := @susp.intrn^msg; int .xadvc( sem^def ) := @susp.extrn^msg; int extlgth; int substate; int response := 0; struct .csem( sem^def ); ?page "subproc sub^apprv^blind of sem^advice^response^compl" !################################################################# !# # !# sub^apprv^blind # !# # !# This subprocedure approves the transaction blind. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to BASE24 internal POS message. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^apprv^blind( pstm ); int .pstm( pstm^def ); begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, pos^resp^apprv^no^bal^d ); call util^generate^approval^code( pstm ); call util^send^pstm( pstm, susp.orig^net^pro ); end; ! subproc sub^apprv^blind of sem^advice^response^compl ?page "sem^advice^response^compl" !################################################################# !# # !# This is the main body of PROC sem^advice^response^compl # !# # !################################################################# if susp.rec^typ <> pos^l then begin return; end; if not pos^preauth^comp^d( pstm ) then begin return; end; if sem.resp^cde = resp^dup^detect^d then begin return; end; if not sem^approved^d( sem ) then begin call util^^collapse( sem, csem, extlgth ); call util^saf^add( csem, extlgth, pos^l, credit^l ); call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, xadvc, $len( sem^def ), substate ); return; end; if response := sem^frmt^xresp^to^pstm^0210( sem, pstm, xadvc ) then begin call util^^collapse( sem, csem, extlgth ); call util^saf^add( csem, extlgth, pos^l, credit^l ); call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, xadvc, $len( sem^def ), substate ); end; call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, xadvc, $len( sem^def ), substate ); end; ?section sem^advice^response^pos ?page "sem^advice^response^pos" !##################################################################### !# # !# sem^advice^response^pos # !# # !# This procedure handles a pos advice message going out # !# to BANKNET. # !# # !# INPUT PARAMETERS: # !# ilf - ilf record # !# sem - advice message # !# pstm - pointer to message # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc sem^advice^response^pos( ilf, sem, pstm ); int .ilf; int .sem( sem^def ); int .pstm( pstm^def ); begin wlform( noroom^pstm, "UNABLE TO ADD ICHG COMPLIANCE TOKEN TO PSTM:" ',' " PAN : \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' " REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^adtkn, "UNABLE TO ADD ICHG COMPLIANCE TOKEN TO PSTM:" ',' " PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\ " ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) struct .compliance^tkn( ichg^compliance^tkn^def ); struct .ilf^( ilf^def ); struct .pstm^( pstm^def ); int tkn^lgth; int .compliance^get^tkn( ichg^compliance^tkn^def ); int compliance^get^lgth; int dspy := false; int ofst; int pos^userdata; int tkn^result; string tkn^id[0:1]; if base24^rel^g >= 5 then begin tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin compliance^get^tkn ':=' zeroes for $len( compliance^get^tkn ); compliance^get^tkn.trace^id ':=' blanks for $len( compliance^tkn.trace^id ); compliance^get^tkn.valid^cde ':=' [ $len( compliance^get^tkn.valid^cde ) * [" "] ]; compliance^get^tkn.life^cycle^ind ':=' [ $len( compliance^get^tkn.life^cycle^ind ) * [" "] ]; ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the auth ! msg followed by DE15 of the auth msg followed by two ! spaces. ! movl( compliance^get^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^get^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); movl( compliance^get^tkn.monitoring^stat, sem.addl^data.info.cvc^sub^fld^88.tag^data, $len( compliance^get^tkn.monitoring^stat ) ); movl( compliance^get^tkn.err^ind, sem.addl^data.info.cvc^sub^fld^89.tag^data, $len( compliance^get^tkn.err^ind ) ); if pos^preauth^comp^d( pstm ) then begin movd( compliance^get^tkn.valid^cde[0], "2" ); end; end ! of token already exists ! else begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, compliance^tkn ); ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the auth ! msg followed by DE15 of the auth msg followed by two ! spaces. ! movl( compliance^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); movl( compliance^tkn.monitoring^stat, sem.addl^data.info.cvc^sub^fld^88.tag^data, $len( compliance^tkn.monitoring^stat ) ); movl( compliance^tkn.err^ind, sem.addl^data.info.cvc^sub^fld^89.tag^data, $len( compliance^tkn.err^ind ) ); if pos^preauth^comp^d( pstm ) then begin movd( compliance^get^tkn.valid^cde[0], "2" ); end; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, compliance^tkn, $len( compliance^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1873, ! routing code !, @noroom^pstm, net.myname, 2, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1874, ! routing code !, @err^adtkn, net.myname, 3, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2030 ); end; end;! of token^result ! end; ! of token did not exist ! @pstm^ := @pstm[0]; if sem^preauth^match^d( sem ) and sem.advice^cde.reason^cde = "191" and bnet^g.log^only^compl^adv^g then begin movd( pstm^.typ, log^only^d ); movd( pstm^.responder, interface^orig^d ); move( pstm^.post^dat, pct.setl.b24^pos^dat ); call util^send^pstm( pstm^, ilf^.orig^net^pro ); end; end; !of if base24^rel^g >= 5 end; #DELETE 05826 SEM^ADVICE^RESPONSE #ENDSCN = SW0F103 !#CMP2.28 05/18/11 BNETDDLS6040 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6040 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6040 * ******************************************************************************** #SCN = SW0F110 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6040 #NEWVERSION = 6041 #ADD 00262n0C * 18MAY2011 bensone * Symptom: Banknet Installment Payment Support for Greece * Problem: None * Fix: The Banknet interface is being enhanced to support an * intra-country installment service for cardholder * purchase transactions in Greece. Add a redefinition * of DE 112 (Additional Data - National Use) to support * Installment Payment Data. * Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. * Run Make. Replace BAMISCTD, LCONFBA, BNETLOGM, * BNETMNWD and BNETUPDT. * Reference: WO #091208-01 #ADD 01411b9s SEM 04 srvc redefines info. 06 sub-fld-1. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data pic x(2). 06 sub-fld-2. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data pic x(4). 06 sub-fld-6. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-plan-typ pic x(2). 10 num-instl pic x(2). 10 gratuity-prd pic x. 10 num-gratuity pic x(2). 10 tran-crncy-cde pic x(3). 06 sub-fld-8. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-amt pic x(12). 10 first-pmnt-dat pic x(6). 10 iss-crncy-cde pic x(3). 10 pmnt-plan pic x(2). 06 user-fld-aci pic x(37). #ENDSCN = SW0F110 !#CMP2.28 05/18/11 BNETG 6072 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6072 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6072 * ******************************************************************************** #SCN = SW0F111 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00026(0A ! 18MAY2011 bensone ! Symptom: Banknet Installment Payment Support for Greece ! Problem: None ! Fix: The Banknet interface is being enhanced to support an ! intra-country installment service for cardholder ! purchase transactions in Greece. Add define ! sem^dmstc^instl^txn^d to identify a domestic Greek ! installment transaction. Add global sppt^instl^txn^g ! to hold the value of the new LCONF parameter ! BNET-SPPT-INSTL-TXN. Add global instl^txn^data^ofst^g ! to hold the value of the new LCONF parameter ! and INSTL-TXN-DATA-OFST. Set DE 67 to unused in ! sem^bit^map^tbl^g. ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BAMISCTD, LCONFBA, BNETLOGM, ! BNETMNWD and BNETUPDT. ! Reference: WO #091208-01 #ADD 00026v0Z ? instl^pmnt^data^tkn #ADD 00026v0n ! instl^pmnt^data^tkn #ADD 00233z0G define sem^dmstc^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "GREECE" ) )#; #ADD 00435(02 int instl^txn^data^ofst^g; int sppt^instl^txn^g; #REPLACE 01004s01 67, -1, 0, 0, ! Not used ! #ADD 01366G0E int instl^txn^data^ofst^g; int sppt^instl^txn^g; #ENDSCN = SW0F111 !#CMP2.28 05/18/11 BNETLIBS61127FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61127 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61127 * ******************************************************************************** #SCN = SW0F112 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61127 #NEWVERSION = 61128 #ADD p044190I ! 18MAY2011 bensone ! Symptom: Banknet Installment Payment Support for Greece ! Problem: None ! Fix: The Banknet interface is being enhanced to support an ! intra-country installment service for cardholder ! purchase transactions in Greece. Add support for ! subfields 6 and 8 in DE 112. Add support for new ! Installment Payment Data Token ("F2"). Add DE48 SE95 to ! outbound request for Greek installment payment. Add DE ! 112 subfield 6 using installment data from PSTM User ! Data or POS Data1 token. Add Installment Payment Data ! Token ("F2") from DE 112 subfield 8 in approved ! response. Add the POS Data1 Token ("CH") using DE 112 ! subfield 6 for inbound request. Populate DE 112 ! subfield 8 from the Installment Payment Data token for ! approved response. Remove support for DE 67. Adapt UK ! domestic Maestro handling for DE 112. Add ! base24^rel^g >= 5 to unconditional token calls. Fix ! SecureCode Phone Order settings in DE 61. ! Proc added: pstm^frmt^instl^pmnt^to^sem ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BAMISCTD, LCONFBA, BNETLOGM, ! BNETMNWD and BNETUPDT. ! Reference: WO #091208-01 #DELETE 05964N0W/05964N0e PSTM^FRMT^0200^TO^XRQST #ADD 06332 PSTM^FRMT^0200^TO^XRQST if ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) and sem.ntl^pos^data.cntry^cde = "300" and not util^debit^crd^typ( pstm.rte.srv ) then begin ! ! Format Installment Payment for Greece ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin addl^data^bit^d := 1; adnl^data^ntl^bit^d := 1; end; end; #ADD m0639803 PSTM^FRMT^0210^TO^XRESP int .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); int instl^pmnt^data^tkn^lgth; #DELETE 06507\01 PSTM^FRMT^0210^TO^XRESP #ADD 06601r00 PSTM^FRMT^0210^TO^XRESP if uk^domestic^maestro^d then begin ! ! DE 112 must not be sent in the 0110 for UKDM transactions ! adnl^data^ntl^bit^d := 0; end; #ADD 07128 PSTM^FRMT^0210^TO^XRESP if sem^dmstc^instl^txn^d( sem ) and pos^approved^d( pstm ) then begin ! ! Installment Payment for Greece ! tkn^id ':=' instl^pmnt^data^tkn^id^d; if base24^rel^g >= 5 and hiswtkn^get^tkn( pstm, tkn^id, @instl^pmnt^data^tkn, instl^pmnt^data^tkn^lgth ) then begin ! ! populate DE 112 subfield 8 ! using Installment Payment Data token ! movd( sem.adnl^data^natl.srvc.sub^fld^8.tag, "008" ); movd( sem.adnl^data^natl.srvc.sub^fld^8.lgth, "023" ); move( sem.adnl^data^natl.srvc.sub^fld^8.tag^data. instl^amt, instl^pmnt^data^tkn.instl^amt ); move( sem.adnl^data^natl.srvc.sub^fld^8.tag^data. first^pmnt^dat, instl^pmnt^data^tkn.first^pmnt^dat ); move( sem.adnl^data^natl.srvc.sub^fld^8.tag^data. iss^crncy^cde, instl^pmnt^data^tkn.iss^crncy^cde ); mov^( sem.adnl^data^natl.srvc.sub^fld^8.tag^data. pmnt^plan, zeroes ); call ascii^integer^( sem.adnl^data^natl.lgth, de^lgth ); de^lgth := de^lgth + $len( sem.adnl^data^natl.srvc. sub^fld^8 ); call integer^ascii^( sem.adnl^data^natl.lgth, de^lgth ); end ! of get installment payment token else begin ! ! Installment Payment Data token (F2) does not exist ! therefore populate DE 112 subfield 8 with zeroes. ! movd( sem.adnl^data^natl.srvc.sub^fld^8.tag, "008" ); movd( sem.adnl^data^natl.srvc.sub^fld^8.lgth, "023" ); mov^( sem.adnl^data^natl.srvc.sub^fld^8.tag^data, zeroes ); call ascii^integer^( sem.adnl^data^natl.lgth, de^lgth ); de^lgth := de^lgth + $len( sem.adnl^data^natl.srvc. sub^fld^8 ); call integer^ascii^( sem.adnl^data^natl.lgth, de^lgth ); end; end; ! of installment payment Greece #DELETE 07355\01 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 07359 PSTM^FRMT^0420^TO^ACQ^XRVSL if ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) and sem.ntl^pos^data.cntry^cde = "300" and adnl^data^ntl^bit^d and not util^debit^crd^typ( pstm.rte.srv ) then begin ! ! Rebuild DE 112 because it is not logged to the ILF. ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin ! ! Nothing to do, yet ! end; end; if uk^domestic^maestro^d then begin ! ! DE 112 must not be sent in the 0400 for UKDM transactions ! adnl^data^ntl^bit^d := 0; end; #ADD E0799224 PSTM^FRMT^FEE^TO^SEM^FEE ?section pstm^frmt^instl^pmnt^to^sem ?page "pstm^frmt^instl^pmnt^to^sem" !##################################################################### !# # !# pstm^frmt^instl^pmnt^to^sem # !# # !# This proc formats Installment Payment data for Greece. # !# Installment payment data from either the PSTM User Data or the # !# POS Data1 token is mapped to DE 112 subfield 6. DE 48 SE 95 is # !# set to "GREECE" when required. # !# # !# INPUT PARAMETERS: # !# PSTM - Pointer to BASE24 internal POS message # !# SEM - Pointer to Banknet external message # !# # !# OUTPUT PARAMETERS: # !# SEM - Pointer to Banknet external message # !# # !# RETURN: # !# True - when installment payment data is found # !# False - when installment payment data is not found # !# # !##################################################################### int proc pstm^frmt^instl^pmnt^to^sem( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin int found^instl^data := false; int found^pos^data1^tkn := false; int lgth; int .pos^data1^tkn( pos^data1^tkn^def ); int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int .user^data^lgth; string .instl^txn^user^data; string .tkn^id[ 0:1 ]; if pstm.data^flag = "1" and bnet^g.instl^txn^data^ofst^g <> -1 then begin ! ! Check PSTM User Data for installment data ! @user^data^lgth := @pstm + wrds( $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ) ); @instl^txn^user^data := byteaddr( @user^data^lgth + 1 ) '+' 22 '+' bnet^g.instl^txn^data^ofst^g; if instl^txn^user^data = "BP" and instl^txn^user^data[ 4 ] <> "00" then begin ! ! installment data found, ! populate DE 112 subfield 6 using PSTM User Data ! movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. instl^plan^typ, "21" ); mov^( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^instl, instl^txn^user^data[ 4 ] ); movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd, "M" ); mov^( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^gratuity, instl^txn^user^data[ 2 ] ); move( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. tran^crncy^cde, pstm.orig^crncy^cde ); found^instl^data := true; end; ! of installment data in PSTM User Data end; ! ! Check POS Data1 token for installment data if necessary ! tkn^id ':=' pos^data1^tkn^id^d; if not found^instl^data and ( found^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, lgth ) ) and pos^data1^tkn.num^instl <> "00" and pos^data1^tkn.pmnt^ind = "I" then begin ! ! installment data found, ! populate DE 112 subfield 6 using POS Data1 token ! found^instl^data := true; if pos^data1^tkn.instl^plan^typ <> [ $len( pos^data1^tkn.instl^plan^typ ) * [" "] ] then begin move( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. instl^plan^typ, pos^data1^tkn.instl^plan^typ ); end else begin movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. instl^plan^typ, "21" ); end; move( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^instl, pos^data1^tkn.num^instl ); if pos^data1^tkn.num^mm^gratuity = "00" then begin movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd, "N" ); end else if pos^data1^tkn.instl^gratuity^prd = "2" then begin movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd, "D" ); end else if pos^data1^tkn.instl^gratuity^prd = "1" then begin movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd, "W" ); end else begin movd( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd, "M" ); end; move( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^gratuity, pos^data1^tkn.num^mm^gratuity ); move( sem.adnl^data^natl.srvc.sub^fld^6.tag^data. tran^crncy^cde, pstm.orig^crncy^cde ); end; ! of installment data in POS Data1 token if found^instl^data then begin ! ! Add DE 48 SE 95 ! if sem.addl^data.info.mc^prmtn^cde^sub^fld^95 <> "95" then begin movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag^data, "GREECE" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! ! Add DE 112 subfield 6 ! movd( sem.adnl^data^natl.srvc.sub^fld^6.tag, "006" ); movd( sem.adnl^data^natl.srvc.sub^fld^6.lgth, "010" ); call integer^ascii^( sem.adnl^data^natl.lgth, $len( sem.adnl^data^natl.srvc. sub^fld^6 ) ); end; return found^instl^data; end; ! of pstm^frmt^instl^pmnt^to^sem #ADD 12050 SEM^FRMT^XRESP^TO^PSTM^0210 wlform( noroom^instl^pmnt, "NO ROOM TO ADD INSTALLMENT PAYMENT TOKEN TO PSTM: " ','"SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\," ','" SETL DATE: \\\\ " ) wlform( err^instl^pmnt, "UNABLE TO ADD INSTALLMENT PAYMENT TOKEN TO PSTM:" ','" SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ ERR: #" ) struct .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); #ADD 12098 SEM^FRMT^XRESP^TO^PSTM^0210 int instl^pmnt^data^tkn^lgth := 0; #ADD 13368 SEM^FRMT^XRESP^TO^PSTM^0210 if sem^dmstc^instl^txn^d( sem ) then begin ! ! Installment Payment for Greece ! if auth^inst^bit^d and sem.auth^inst.cde = "000000" then begin ! ! Reverse if authorized by Banknet X-Code, not the Issuer ! return resp^format^error^sem^l; end; if adnl^data^ntl^bit^d and sem.adnl^data^natl.srvc.sub^fld^8.tag = "008" and base24^rel^g >= 5 then begin ! ! Add the Installment Payment Data Token ("F2") ! tkn^id ':=' instl^pmnt^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^pmnt^data^tkn ); mov^( instl^pmnt^data^tkn.total^amt, zeroes ); move( instl^pmnt^data^tkn.instl^amt, sem.adnl^data^natl.srvc.sub^fld^8.tag^data. instl^amt ); move( instl^pmnt^data^tkn.first^pmnt^dat, sem.adnl^data^natl.srvc.sub^fld^8.tag^data. first^pmnt^dat ); move( instl^pmnt^data^tkn.iss^crncy^cde, sem.adnl^data^natl.srvc.sub^fld^8.tag^data. iss^crncy^cde ); mov^( instl^pmnt^data^tkn.intrst^rat, zeroes ); tkn^lgth := 0; instl^pmnt^data^tkn^lgth := $len( instl^pmnt^data^tkn ); ! ! Length must be even to add a token. ! if instl^pmnt^data^tkn^lgth.<15> then begin increment^d( instl^pmnt^data^tkn^lgth ); end; if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^pmnt^data^tkn, instl^pmnt^data^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! dspy !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result and tkn^result <> tkn^exist^l then begin if tkn^result = over^max^limit^l then begin call log^message^( 2994,! routing code !, @noroom^instl^pmnt, net.myname, evt_msg_severity_err_l, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 2995, ! routing code !, @err^instl^pmnt, net.myname, evt_msg_severity_crit_l, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2995 ); end; end; ! of tkn^result end; ! of adnl^data^ntl^bit^d end; ! of sem^dmstc^instl^txn^d #DELETE 14239 /14242 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14246o06 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^dmstc^instl^txn^d( sem ) then begin ! ! Installment Payment for Greece ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.srvc.sub^fld^6.tag = "006" and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) then begin ! ! Add the POS Data1 Token ("CH") ! movd( pos^data1^tkn.pmnt^ind, "I" ); move( pos^data1^tkn.instl^plan^typ, sem.adnl^data^natl.srvc.sub^fld^6.tag^data. instl^plan^typ ); move( pos^data1^tkn.num^instl, sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^instl ); if sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd = "D" then begin movd( pos^data1^tkn.instl^gratuity^prd, "2" ); end else if sem.adnl^data^natl.srvc.sub^fld^6.tag^data. gratuity^prd = "W" then begin movd( pos^data1^tkn.instl^gratuity^prd, "1" ); end else begin movd( pos^data1^tkn.instl^gratuity^prd, "0" ); end; move( pos^data1^tkn.num^mm^gratuity, sem.adnl^data^natl.srvc.sub^fld^6.tag^data. num^gratuity ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end; end; ! of installment payment #ADD 15578\00 SEM^FRMT^XRQST^TO^SEM^XRESP if uk^domestic^maestro^d then begin ! ! DE 112 must not be sent in the 0110 for UKDM transactions ! adnl^data^ntl^bit^d := 0; end; #DELETE 15578\01 SEM^FRMT^XRQST^TO^SEM^XRESP #DELETE 15618\01 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 15618v0m SEM^FRMT^XRQST^TO^SEM^XRVSL if uk^domestic^maestro^d then begin ! ! DE 112 must not be sent in the 0400 for UKDM transactions ! adnl^data^ntl^bit^d := 0; end; #ADD 17724c0v UTIL^COLLAPSE^SEM if hdr.adnl^data^natl.srvc. sub^fld^6.tag = "006" then begin call ascii^integer( hdr.adnl^data^natl.srvc. sub^fld^6.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc.sub^fld^6.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.srvc. sub^fld^8.tag = "008" then begin call ascii^integer( hdr.adnl^data^natl.srvc. sub^fld^8.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc.sub^fld^8.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; #ADD 18889c0n UTIL^EXPAND^SEM if ptr[ length ] = "006" then begin movl( sem^ptr.adnl^data^natl.srvc. sub^fld^6.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "008" then begin movl( sem^ptr.adnl^data^natl.srvc. sub^fld^8.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ENDSCN = SW0F112 !#CMP2.28 05/18/11 BNETS 60146FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60146 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60146 * ******************************************************************************** #SCN = SW0F115 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60146 #NEWVERSION = 60147 #ADD ;000260O ! 18MAY2011 bensone ! Symptom: Banknet Installment Payment Support for Greece ! Problem: None ! Fix: The Banknet interface is being enhanced to support an ! intra-country installment service for cardholder ! purchase transactions in Greece. Add support for LCONF ! parameters SW-BNET-SPPT-INSTL-TXN and ! INSTL-TXN-DATA-OFST. Reject advices of installment ! payments for Greek issuers received from Banknet. ! Procs modified: cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^bnet^g ! init^paramproc ! sem^advice^pos ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BAMISCTD, LCONFBA, BNETLOGM, ! BNETMNWD and BNETUPDT. ! Reference: WO #091208-01 #ADD ;0259902 CMD^WARMBOOT^STORE^GLOBALS store^bnet^g^d( instl^txn^data^ofst^g ); store^bnet^g^d( sppt^instl^txn^g ); #ADD ;0259905 CMD^WARMBOOT^STORE^GLOBALS bnet^g.instl^txn^data^ofst^g := -1; bnet^g.sppt^instl^txn^g := 0; #ADD ;0259908 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^bnet^g^d( instl^txn^data^ofst^g ); retrieve^bnet^g^d( sppt^instl^txn^g ); #ADD ;0283102 INIT^BNET^G bnet^g.instl^txn^data^ofst^g := -1; bnet^g.sppt^instl^txn^g := 0; #ADD z0394102 INIT^PARAMPROC wlform( inv^instl, "\? param contains invalid data. " ',' "Installment Payments will not be supported." ) wlform( err^instl, "\? param = #, is out of range." ',' " Installment Payments will not be supported." ) wlform( inv^instl^ofst, "\? param contains invalid data. " ',' "PSTM User Data will not be checked for" ',' " Installment Payment data." ) wlform( err^instl^ofst, "\? param = #, is out of range." ',' " PSTM User Data will not be checked for " ',' "Installment Payment data." ) #DELETE z0394103/z0394104 INIT^PARAMPROC #ADD ;0394502 INIT^PARAMPROC "P", "SW-BNET-SPPT-INSTL-TXN ", "P", "INSTL-TXN-DATA-OFST ", #ADD ;039960C INIT^PARAMPROC ! ! ! SW-BNET-SPPT-INSTL-TXN ! ! ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.sppt^instl^txn^g ) then begin bnet^g.sppt^instl^txn^g := 0; call log^message^( 2990, ! routing code !, @inv^instl, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l ); end else if bnet^g.sppt^instl^txn^g < 0 or bnet^g.sppt^instl^txn^g > 3 then begin bnet^g.sppt^instl^txn^g := 0; call log^message^( 2991, ! routing code !, @err^instl, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.sppt^instl^txn^g ); end; end; ! ! ! INSTL-TXN-DATA-OFST - acquirer only ! ! ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.instl^txn^data^ofst^g ) and ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) then begin bnet^g.instl^txn^data^ofst^g := -1; call log^message^( 2992, ! routing code !, @inv^instl^ofst, net.myname, evt^msg^severity^err^l, @lconf^key.item^name, item^name^len^l ); end else if ( bnet^g.instl^txn^data^ofst^g < 0 or bnet^g.instl^txn^data^ofst^g > 74 ) and ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) then begin bnet^g.instl^txn^data^ofst^g := -1; call log^message^( 2993, ! routing code !, @inv^instl^ofst, net.myname, evt^msg^severity^err^l, @lconf^key.item^name, item^name^len^l, bnet^g.instl^txn^data^ofst^g ); end; end; #ADD &0575705 SEM^ADVICE^POS sem^dmstc^instl^txn^d( sem ) or #ENDSCN = SW0F115 !#CMP2.28 06/02/11 BNETS 60147FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60147 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60147 * ******************************************************************************** #SCN = SW0F127 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60147 #NEWVERSION = 60148 #ADD <000260J ! 02JUN2011 wielerk ! Symptom: Process fails to correctly deliver 9922 Log only ! message to RTAU causing EMS message #6131. ! Problem: The call to util^send^pstm used an uninitialized ILF ! pointer to assign the message destination. ! Fix: Modified the passed ILF param to allow it to be used ! for the message destination and deleted an unused ILF ! struct. ! Proc modified: sem^advice^response^pos ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1132630. #REPLACE ;058252j SEM^ADVICE^RESPONSE^POS int .ilf( ilf^def ); #REPLACE ;058252z SEM^ADVICE^RESPONSE^POS -- struct .ilf^( ilf^def ); #REPLACE ;058255P SEM^ADVICE^RESPONSE^POS call util^send^pstm( pstm^, ilf.orig^net^pro ); #ENDSCN = SW0F127 !#CMP2.28 06/02/11 BNETLIBS61128FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61128 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61128 * ******************************************************************************** #SCN = SW0F128 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61128 #NEWVERSION = 61129 #ADD q044190Y ! 02JUN2011 wielerk ! Symptom: When Moneysend transactions are sent into Base24, they ! are declined as expiration date errors. ! Problem: Moneysend transactions do not present an expiration date ! and this can conflict with CPF settings for other types ! of transactions. ! Fix: Added logic to set PS51 CVD present flag to "3" for ! Moneysend transactions which will suppress expiration ! date checking in RTAU. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1132195. #REPLACE 14762 /14762 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^d( sem ) and pstm.tran.exp^dat = [ $len( pstm.tran.exp^dat ) * ["0"] ] then ! ! Set the CV present flag to "3", to indicate expiration ! date is absent. ! begin ps51^tkn^data.cvd^fld^present ':=' "3"; end; #ENDSCN = SW0F128 !#CMP2.28 06/03/11 BNETLIBS61129FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61129 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61129 * ******************************************************************************** #SCN = SW0F129 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61129 #NEWVERSION = 61130 #ADD r044190D ! 03JUN2011 wielerk ! Symptom: When E-commerce balance inquiries are sent, they are ! presented as purchases which can prevent balances from ! being returned. ! Problem: The PSTM tran code is changed to "13" mail/phone order ! based solely on the value in de-48 ( tran cat code ). ! Fix: Added logic to the edit for mail/phone order to add ! an edit on de-3 ( proce code ) that will allow balance ! inquiries with de-48 = "T". ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1132954. #REPLACE 11542 /11543 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.addl^data.info.tran^cat^cde = "T" and sem.proc^cde = sem^purchase^d then #ENDSCN = SW0F129 !#CMP2.28 06/09/11 BNETS 60148FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60148 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60148 * ******************************************************************************** #SCN = SW0F130 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60148 #NEWVERSION = 60149 #ADD =000260C ! 09JUN2011 wielerk ! Symptom: PSTM 0420 messages with reversal code = "10" ( hardware ! error ) or "20" ( suspect reversal ) are not forwarded ! Mastercard as 0400 reversals. ! Problem: There is an edit to exclude the 2 reversal reason code ! values that may have been a result of a mis-reading of ! Mastercard specifications for sending 0400 reversals. ! Fix: Removed the reversal reason codes from the edit for ! 0400 reversal processing. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1132134. #REPLACE 05222}01 PSTM^0420^REVERSAL if sem.typ = sem^auth^response^d then #DELETE 05222}02/05222}03 PSTM^0420^REVERSAL #ENDSCN = SW0F130 !#CMP2.28 06/09/11 BNETG 6073 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6073 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6073 * ******************************************************************************** #SCN = SW0F131 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00026)0I ! 09JUN2011 saderc ! Symptom: The customer is unable to determine the reason for a ! failure when the utility is called to format the ! internal pin to the external pin. ! Problem: The only return error value checked is a "sanity check ! error". If the return error is a "sanity check error, ! then the err-flg field in the PS50 token (04) is set to ! a value of "S" (Sanity Check Error). There are no other ! possible return errors being checked. ! Fix: Added the following literals: ! sec^resp^valid^fail^l ! sec^resp^invalid^param^l ! sec^resp^pin^lgth^err^l ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Reference: Case #1130533 #ADD 00348~02 literal sec^resp^valid^fail^l = 1; #ADD 00348v01 literal sec^resp^invalid^param^l = 4; literal sec^resp^pin^lgth^err^l = 8; #ENDSCN = SW0F131 !#CMP2.28 06/09/11 BNETLIBS61130FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61130 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61130 * ******************************************************************************** #SCN = SW0F132 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61130 #NEWVERSION = 61131 #ADD s044190D ! 09JUN2011 saderc ! Symptom: The customer is unable to determine the reason for a ! failure when the utility is called to format the ! internal pin to the external pin. ! Problem: The only return error value checked is a "sanity check ! error". If the error return is a "sanity check error, ! then the err-flg field in the PS50 token (04) is set to ! a value of "S" (Sanity Check Error). There are no other ! possible errors being checked. ! Fix: The BNET interface was modified to set the err-flg field ! of the PS50 token to a value of "L" when the error ! returned is a value "8" (Invalid PIN Length). Also, ! the err-flg field of the PS50 token to a value of "P" ! when one of the following errors are returned: "1" ! (No Error; Invalid PIN), "3" (Invalid Data), "4" ! (Invalid Param). ! Proc modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Reference: Case #1130533 #ADD 05993 PSTM^FRMT^0200^TO^XRQST if base24^rel^g >= 5 then begin movd( err^flg, " " ); if security^dev^resp = sanity^chk^err^l then begin movd( err^flg, "S" ); end else if security^dev^resp = sec^resp^pin^lgth^err^l then begin movd( err^flg, "L" ); end else if security^dev^resp = sec^resp^valid^fail^l or security^dev^resp = sec^resp^invalid^pin^l or security^dev^resp = sec^resp^invalid^param^l then begin movd( err^flg, "P" ); end; if err^flg <> " " then begin pstm^lgth := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, pstm^lgth, false, ! tkn^lgth !, pstm.data^flag, err^flg ); end; end; ! of if base24^rel^g >= 5 #DELETE 05994 /06009 PSTM^FRMT^0200^TO^XRQST #ADD 14419 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 then begin movd( err^flg, " " ); if security^dev^resp = sanity^chk^err^l then begin movd( err^flg, "S" ); end else if security^dev^resp = sec^resp^pin^lgth^err^l then begin movd( err^flg, "L" ); end else if security^dev^resp = sec^resp^valid^fail^l or security^dev^resp = sec^resp^invalid^pin^l or security^dev^resp = sec^resp^invalid^param^l then begin movd( err^flg, "P" ); end; if err^flg <> " " then begin lgth1 := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, lgth1, false, ! tkn^lgth !, pstm.data^flag, err^flg ); end; end; ! of if base24^rel^g >= 5 #DELETE 14420 /14434 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0F132 !#CMP2.28 06/10/11 BNETS 60149FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60149 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60149 * ******************************************************************************** #SCN = SW0F133 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60149 #NEWVERSION = 60150 #ADD >000260D ! 10JUN2011 wielerk ! Symptom: ILF substate is logged with unpredictable values. ! Problem: When processing a 0130 an ILF record is added without ! assigning a value to the local variable used to set ILF ! substate. ! Fix: Modified the definition of the local variable used to ! set ILF substate to be initialized to zero. ! Proc modified: sem^advice^response^compl ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1134050. #REPLACE ;058250a SEM^ADVICE^RESPONSE^COMPL int substate := 0; #ENDSCN = SW0F133 !#CMP2.28 06/10/11 BNETLIBS61131FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61131 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61131 * ******************************************************************************** #SCN = SW0F135 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61131 #NEWVERSION = 61132 #ADD t044190L ! 10JUN2011 bensone ! Symptom: During an ILF update, if the length of the ILF record ! is less than the calculated minimum, the process abends. ! Problem: The ILF update procedures adjust the SEM length to an ! even number. The ILF add procedures do not. ! Also an ILF add, not an update, should have been ! performed. ! Fix: When adding an ILF record that contains a SEM, adjust ! the SEM length to an even number. Change parameters ! fnum, ilf^lgth and ilf^found in util^ilf^process^advice ! to reference to allow calling procedure to use modified ! values. ! Procs modified: util^ilf^add ! util^ilf^process^advice ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1133876. #ADD 20465N0B UTIL^ILF^ADD if sem^adj^lgth.<15> then begin sem^adj^lgth := sem^adj^lgth + 1; end; #REPLACE m214550M UTIL^ILF^PROCESS^ADVICE int .fnum; #REPLACE m214550O/m214550P UTIL^ILF^PROCESS^ADVICE int .ilf^lgth; int .ilf^found; #ENDSCN = SW0F135 !#CMP2.28 06/17/11 BNETLIBS61132FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61132 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61132 * ******************************************************************************** #SCN = SW0F136 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61132 #NEWVERSION = 61133 #ADD u044190H ! 17JUN2011 bensone ! Symptom: Reversal handling for multiple message flows was not ! functioning properly. ! Problem: Procedure util^ilf^process^reversal is not returning ! ilf data correctly. Reversal did not locate the advice ! record in the ILF. Advice did not save reversal data ! in the ILF. ! Fix: Change parameters ilf^lgth and ilf^found in ! util^ilf^process^reversal to reference to allow calling ! procedure to use modified values. Modified ILF lookup ! to use key data from the reversal rather than the first ! ILF. Modified ILF update by an advice to save the ! external message if it is a reversal. ! Procs modified: util^ilf^process^reversal ! util^ilf^updt ! Dependency: Apply fixes to BNETATMS, BNETLIBS and BNETS. Run Make. ! Reference: Case #1133876. #ADD m214550y UTIL^ILF^PROCESS^ADVICE call util^ilf^updt( fnum, ilf, ilf^lgth, 0, ! base24^msg !, sem ); #DELETE m214550z UTIL^ILF^PROCESS^ADVICE #ADD m214551a UTIL^ILF^PROCESS^ADVICE call util^ilf^updt( fnum, ilf, ilf^lgth, 0, ! base24^msg !, sem ); #DELETE m214551b UTIL^ILF^PROCESS^ADVICE #ADD m214551n UTIL^ILF^PROCESS^ADVICE call util^ilf^updt( fnum, ilf, ilf^lgth, 0, ! base24^msg !, sem ); #DELETE m214551o UTIL^ILF^PROCESS^ADVICE #ADD m214552A UTIL^ILF^PROCESS^REVERSAL base24^msg, #DELETE m214552B UTIL^ILF^PROCESS^REVERSAL #ADD m214552D UTIL^ILF^PROCESS^REVERSAL ilf^found ); #DELETE m214552E UTIL^ILF^PROCESS^REVERSAL #ADD m214552H UTIL^ILF^PROCESS^REVERSAL int .base24^msg; #DELETE m214552I UTIL^ILF^PROCESS^REVERSAL #ADD m214552J UTIL^ILF^PROCESS^REVERSAL int .ilf^lgth; int .ilf^found; #DELETE m214552K/m214552L UTIL^ILF^PROCESS^REVERSAL #DELETE m214552P/m214552Q UTIL^ILF^PROCESS^REVERSAL #ADD m214552f UTIL^ILF^PROCESS^REVERSAL call sem^frmt^prikey( rvsl, ilf.prikey, false ); if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, sem ) ) then #DELETE m214552g/m214552m UTIL^ILF^PROCESS^REVERSAL #ADD m214553E UTIL^ILF^PROCESS^REVERSAL base24^msg, #DELETE m214553F UTIL^ILF^PROCESS^REVERSAL #ADD 21958N03 UTIL^ILF^UPDT if ( ilf.rec^typ = pos^l or ilf.rec^typ = atm^l ) and sem.typ = sem^auth^advice^d then begin if not hiswilf^updt^tkn( ilf, ilf^lgth, $optional( $param ( base24^msg ), base24^msg ), ! sem !, ! sem^lgth !, max^sem^size^g, base24^rel^g ) then begin call abend^( 2015 ); end; end else #REPLACE 21958N0a/21958N0b UTIL^ILF^UPDT ! sem !, ! sem^lgth !, #ENDSCN = SW0F136 !#CMP2.28 06/17/11 BNETS 60150FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60150 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60150 * ******************************************************************************** #SCN = SW0F137 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60150 #NEWVERSION = 60151 #ADD |000260B ! 17JUN2011 bensone ! Symptom: Reversal handling for multiple message flows was not ! functioning properly. ! Problem: The interface attempted to process an ILF record after ! it was determined that the alternate record that should ! be processed did not exist. 0400 Reversals were being ! denied when the record found in the ILF was an advice. ! ILF record added with invalid type when ILF not found ! for reversals. ! Fix: Receive parameters ilf^lgth and ilf^found from ! util^ilf^process^reversal. Do not deny the 0400 reversal ! when the ILF contains an advice. Set ILF type to pos^l ! from POS procedure when ILF not found. ! Proc modified: sem^acq^rvsl^rqst^pos ! Dependency: Apply fixes to BNETATMS, BNETLIBS and BNETS. Run Make. ! Reference: Case #1133876. #ADD 05374}2Y SEM^ACQ^RVSL^RQST^POS int ilf^found := false; #ADD z053741n FRMT^AND^SEND^ACQ^RVSL^RESP if ilf^lgth > 0 then begin ilf^found := true; end else begin ilf^found := false; end; #ADD :0537400 FRMT^AND^SEND^ACQ^RVSL^RESP if ilf^found and #DELETE :0537401 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD :0537406 FRMT^AND^SEND^ACQ^RVSL^RESP ilf^found ) then #DELETE :0537407 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD z053741y FRMT^AND^SEND^ACQ^RVSL^RESP if not ilf^found then #DELETE z053741z FRMT^AND^SEND^ACQ^RVSL^RESP #ADD z053742A FRMT^AND^SEND^ACQ^RVSL^RESP ilf.rec^typ := pos^l; #ADD 05374}7P FRMT^AND^SEND^ACQ^RVSL^RESP ( sem.typ <> sem^auth^response^d and sem.typ <> sem^auth^advice^d ) or #DELETE 05374}7Q FRMT^AND^SEND^ACQ^RVSL^RESP #ENDSCN = SW0F137 !#CMP2.28 06/20/11 BNETS 60151FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 60151 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 60151 * ******************************************************************************** #SCN = SW0F140 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60151 #NEWVERSION = 60152 #ADD @000260H ! 21JUN2011 wielerk ! Symptom: ILF record type value is not logged correctly for an ! unmatched 0400. Also, ILF external message area ! contains 0410, not the 0400. ! Problem: When a 0400 is unmatched, ILF.REC^TYP is not set so the ! subsequent add is not correct. ! The calls to update or add ILF records passed the ack ! ( 0410 ) instead of the rvsl ( 0400 ). ! Fix: Modified logic to set ILF.REC^TYP correctly. ! Modified ILF proc calls to pass RVSL instead of ACK. ! Procs modified: sem^acq^rvsl^rqst ! sem^acq^rvsl^rqst^pos ! Dependency: Apply fixes to BNETS and SW60ABNT.BNETATMS. Run Make. ! Reference: Case #1132896. #ADD $0537406 SEM^ACQ^RVSL^RQST ilf.rec^typ := atm^l; #ADD $053740A SEM^ACQ^RVSL^RQST ilf.rec^typ := pos^l; #REPLACE 05374}46/05374}4A FRMT^AND^SEND^ACQ^RVSL^RESP ! the ILF consisting of an external 0400 Acquirer ! ! Reversal Request with substate SUB^RVSL^NOT^FOUND^L, ! ! and drop the 0400 Acquirer Reversal Request message. ! ! ! #REPLACE 05374}4L FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}4m FRMT^AND^SEND^ACQ^RVSL^RESP ! external 0400 Acquirer Reversal Request, ! #REPLACE 05374}50 FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}5l/05374}5n FRMT^AND^SEND^ACQ^RVSL^RESP ! external 0400 Acquirer Reversal Request, ! ! and drop the 0400 Acquirer Reversal Request ! ! message. ! #REPLACE 05374}5z FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}6U FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}74 FRMT^AND^SEND^ACQ^RVSL^RESP rvsl ) then #REPLACE 05374}7C FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}7Z FRMT^AND^SEND^ACQ^RVSL^RESP ! of an external 0400 Acquirer Reversal Request, and ! #REPLACE 05374}7l FRMT^AND^SEND^ACQ^RVSL^RESP rvsl ) then #REPLACE 05374}7t FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 0537490f FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #REPLACE 05374}9f FRMT^AND^SEND^ACQ^RVSL^RESP rvsl ) then #REPLACE 05374}9n FRMT^AND^SEND^ACQ^RVSL^RESP rvsl, #ENDSCN = SW0F140 !#CMP2.28 06/22/11 BNETLIBS61133FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61133 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61133 * ******************************************************************************** #SCN = SW0F142 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61133 #NEWVERSION = 61134 #ADD v044190I ! 22JUN2011 wielerk ! Symptom: Recurring test transactions are not processed correctly. ! Problem: Mastercard defines a recurring test transaction as one ! with de-61.4 ( POS cardholder presence ind ) = "4", ! with de-61.7 ( transaction status ind ) = "4", and ! with de-4 ( tran amount ) = zeroes. If the value in ! de-4 is greater than zero, the transaction needs to be ! declined. ! Fix: Modified logic to include recurring test transactions as ! PSTM Card Verification transactions, amount formatting ! denies the tran if de-4 is not zero. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1134932. #ADD m1154602 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( sem.ntl^pos^data.cond^cde.byte[ 6 ] = "8" or sem.ntl^pos^data.cond^cde.byte[ 6 ] = "6" or ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) ) then #DELETE m1154603 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0F142 !#CMP2.28 07/19/11 BNETLIBS61134FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61134 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61134 * ******************************************************************************** #SCN = SW0F150 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61134 #NEWVERSION = 61135 #ADD w044190F ! 19JUL2011 saderc ! Symptom: DE-121 (Authorizing Agent ID Code) is not provided in ! the 0120 completion advice message which is sent to ! indicate the final sale amount, if it is present in the ! associated AFD Fuel authorization 0110 response. ! Problem: The interface does not check currently check whether ! DE-121 is in the response. So it isn't sent in the ! 0120 completion advice message. ! Fix: The BNET interface modified to add a check to determine ! whether DE-121 was present in the 0110 response. If so, ! then send it in the 0120 completion advice message to ! MasterCard. ! Procs modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1151477 #ADD o072000E PSTM^FRMT^0220^TO^XADV if sem.auth^inst.lgth <> [ $len( sem.auth^inst.lgth ) * [" "]] and sem.auth^inst.lgth <> [ $len( sem.auth^inst.lgth ) * ["0"]] then begin auth^inst^bit^d := 1; sbit^map^bit^d := 1; end; #ENDSCN = SW0F150 !#CMP2.28 07/21/11 BNETLIBS61135FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61135 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61135 * ******************************************************************************** #SCN = SW0F152 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61135 #NEWVERSION = 61136 #ADD x044190G ! 21JUL2011 saderc ! Symptom: The interface is sending an invalid DE-112 (additional ! data, national use) in the response message. ! Problem: Currently, the DE-112 field in the response message is ! being echoed back to MasterCard for all response ! messages except U.K. Domestic Maestro response messages. ! After discussions with the product group, it was ! determined that the logic should have turned off the ! bit for DE-112 in ALL response messages, except for ! those for Greek Installments. This is because Greek ! Installment transactions comply with CIS formatting ! requirements. ! Fix: The BNET interface was modified to turn off the bit ! for DE-112 in all response messages, except Greek ! Installments response messages. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1151677 #REPLACE q0660101 PSTM^FRMT^0210^TO^XRESP if not sem^dmstc^instl^txn^d( sem ) then #ADD q0660103 PSTM^FRMT^0210^TO^XRESP ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece #DELETE q0660104 PSTM^FRMT^0210^TO^XRESP #REPLACE q1557801 SEM^FRMT^XRQST^TO^SEM^XRESP if not sem^dmstc^instl^txn^d( sem ) then #ADD q1557803 SEM^FRMT^XRQST^TO^SEM^XRESP ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece #DELETE q1557804 SEM^FRMT^XRQST^TO^SEM^XRESP #ENDSCN = SW0F152 !#CMP2.28 08/01/11 BNETS 6100 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6100 * ******************************************************************************** #SCN = SW0F154 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6100 #NEWVERSION = 6101 #ADD 03821 ! 01AUG2011 wielerk ! Symptom: PSTM log only message does not contain the value for ! de-18 ( merchant type ) from the original advice. ! Problem: The value from de-18 is mapped to PSTM.RETL^SIC^CDE. ! This field is not saved to the ILF so is not available ! for the log only message. ! Fix: Modified logic to set PSTM.RETL^SIC^CDE from de-18 of ! the original 0120 advice. ! Procs modified: sem^advice^response^pos ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1152204. #ADD 19201 SEM^ADVICE^RESPONSE^POS if sem.merch^typ <> [ $len( sem.merch^typ ) * [ " " ] ] then begin move( pstm.retl^sic^cde, sem.merch^typ ); end; #ENDSCN = SW0F154 !#CMP2.28 08/04/11 BNETS 6101 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6101 * ******************************************************************************** #SCN = SW0F155 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6101 #NEWVERSION = 6102 #ADD 03821A0C ! 04AUG2011 wielerk ! Symptom: Reversals from Commerce Gateway do not match ILF ! originals and are not forwarded to Mastercard. ! Problem: Commerce Gateway was expecting to provide matching ! information in original data fields and was modifying ! transaction time for reversals. BNET does not use ! original data to match Base24 acquired reversals so ! these reversals did not pass the interface. ! Fix: Modified logic to attempt to use original data time ! if the first read of the ILF fails. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1153107. #ADD 16764 PSTM^0420^REVERSAL ! ! if first read fails, use info from orig^data and try again ! if not ( pos^pre^auth^d( pstm ) and pos^preauth^match^d( pstm ) ) and pstm.orig^data.trn^tim <> [ $len( pstm.orig^data.trn^tim ) * [" "] ] and pstm.orig^data.trn^tim <> [ $len( pstm.orig^data.trn^tim ) * ["0"] ] then begin movl ( prikey.tran^dat^tim.byte[ 0 ], pstm.orig^data.trn^dat, 4 ); movl ( prikey.tran^dat^tim.byte[ 4 ], pstm.orig^data.trn^tim, 6 ); if not ( fnum := util^ilf^get( ilf.prikey, $len(ilf.prikey), ilf, ilf^lgth, ! base24^msg !, sem ) ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len(ilf.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^rvsl^not^found^l ); return; end ! of 2nd read fails else begin ! ! do nothing, 2nd read matched ! end; end ! of 2nd ILF read else begin ! ! 1st read failed, or 2nd read not attempted ! call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len(ilf.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^rvsl^not^found^l ); return; end; end; ! of 1st call to util^ilf^get #DELETE 16765 /16769 PSTM^0420^REVERSAL #ENDSCN = SW0F155 !#CMP2.28 08/10/11 BNETD 6004 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6004 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6004 * ******************************************************************************** #SCN = SW0F158 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6004 #NEWVERSION = 6005 #ADD 00043D0F ! 10AUG2011 bensone ! Symptom: Banknet Release 11.Q4 Mandates. ! Problem: None ! Fix: Case #01152109 (Duplicate 0120 Message Does Not Have ! Response Code '94') ! proc modified: sem^advice^atm ! Dependency: Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETEMVS, ! BNETG, BNETLIBS, BNETS, DDLPSTKN and PSTKNCVS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #003253 #ADD 00254A1A SEM^ADVICE^ATM proc sem^advice^atm( sem, msg, sta^x, resp^cde ); #DELETE 00254A1B SEM^ADVICE^ATM #ADD 00254A1E SEM^ADVICE^ATM string .resp^cde; #ENDSCN = SW0F158 !#CMP2.28 08/10/11 BNETDDLS6041 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6041 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6041 * ******************************************************************************** #SCN = SW0F159 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6041 #NEWVERSION = 6042 #ADD 00262o0D * 10AUG2011 bensone * Symptom: Banknet Release 11.Q4 Mandates. * Problem: None * Fix: The UK Domestic Maestro (UKDM) redefinition in DE 112 * was removed. Removed old, off screen SCN number from * pmnt-initiation-chan in the switch token. * Dependency: Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETEMVS, * BNETG, BNETLIBS, BNETS, DDLPSTKN and PSTKNCVS. * Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. * Reference: WO #003253 #DELETE 01411e00/01411e0B SEM #REPLACE 02760m03 OFFSET 1 SAF-BNET 02 pmnt-initiation-chan pic x(2). #ENDSCN = SW0F159 !#CMP2.28 08/10/11 BNETG 6074 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6074 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6074 * ******************************************************************************** #SCN = SW0F160 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00026{0G ! 10AUG2011 bensone ! Symptom: Banknet Release 11.Q4 Mandates. ! Problem: None ! Fix: Global 105: Visa Gateway Credit Enhancements ! Global 502: E-commerce Fraud Alerts for Issuers ! Removal of Redundant Checks on the Processing Mode field ! on Screen 3 of the ICF(E) ! Define added: crdhldr^prsn^d ! Source in julian^date from the utilities. ! Defines deleted: ukdm^part^aligned^d ! uk^domestic^maestro^d ! Dependency: Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETEMVS, ! BNETG, BNETLIBS, BNETS, DDLPSTKN and PSTKNCVS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #003253 #DELETE 00233`00/00233`08 #ADD 00233)05 define crdhldr^prsn^d( x ) = ( x.ntl^pos^data.cond^cde. byte[ 3 ] = "0" or ( x.ntl^pos^data.cond^cde. byte[ 3 ] = "4" and x.ntl^pos^data.cond^cde. byte[ 4 ] = "0" ) )#; #ADD 01366M0I ? julian^date, #ADD 01366L3R ! julian^date, #ENDSCN = SW0F160 !#CMP2.28 08/10/11 BNETLIBS61136FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61136 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61136 * ******************************************************************************** #SCN = SW0F161 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61136 #NEWVERSION = 61137 #ADD y044190K ! 10AUG2011 bensone ! Symptom: Banknet Release 11.Q4 Mandates. ! Problem: None ! Fix: Global 105: Visa Gateway Credit Enhancements ! Global 502: E-commerce Fraud Alerts for Issuers ! Release 11.1 Global 502 - Discontinuation of AVS Only ! Removal of Redundant Checks on the Processing Mode field ! on Screen 3 of the ICF(E) ! Case #01125378 and Case #01125439 (Setting of DE 61.10 ! to Comply with Data Integrity Edits) ! Case #01131238 (Incorrect Comments in PSTKNCVS and ! BNETLIBS) ! Case #01136225 (ILF Processing Issues) ! Case #01152109 (Duplicate 0120 Message Does Not Have ! Response Code '94') ! Case #01133172 (Minor Errors in the Banknet Interface) ! procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! util^get^bniif ! util^ilf^add ! util^ilf^get ! util^ilf^get^pos^preauth ! util^ilf^process^advice ! util^ilf^updt ! Dependency: Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETEMVS, ! BNETG, BNETLIBS, BNETS, DDLPSTKN and PSTKNCVS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #003253 #ADD 05360A03 PSTM^FRMT^0200^TO^XRQST string .yyyddd[ 0:5 ] := [ 6 * [" "] ]; #ADD 05655r00 PSTM^FRMT^0200^TO^XRQST if track2^bit^d then #DELETE 05655r01/05655r03 PSTM^FRMT^0200^TO^XRQST #ADD D0565705 PSTM^FRMT^0200^TO^XRQST call julian^date( yyyddd ); movl( sem.ref^num.byte[ 0 ], yyyddd[ 2 ], 4 ); movl( sem.ref^num.byte[ 4 ], sem.tran^dat^tim.byte[4], 2 ); ! ! Set visa_tran_g to indicate if this tran was initiated by a ! Visa card ! visa_tran_g := false; if pstm.rte.srv = visa_card_d or ( sem.pan.num = "4" and ( sem.pan.lgth = "13" or sem.pan.lgth = "16" ) ) then begin visa_tran_g := true; end; if visa_tran_g then begin mov^( sem.ref^num.byte[ 6 ], sem.trace^num ); end; #DELETE D0565706/D0565707 PSTM^FRMT^0200^TO^XRQST #ADD 05705N02 PSTM^FRMT^0200^TO^XRQST return resp^format^error^pos^l; #DELETE f0570505/05705N06 PSTM^FRMT^0200^TO^XRQST #ADD 05964N0f PSTM^FRMT^0200^TO^XRQST if pstm.pt^srv^cond^cde = "00" and ! normal presentment ! not pos^mail^phone^d( pstm ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 4 ], "0" ); end else #ADD S0596409 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 0 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "0" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); end; if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "0" and sem.ntl^pos^data.cond^cde.byte[ 4 ] = "1" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^7^transponder^txn^d ); end; #ADD j0626200 PSTM^FRMT^0200^TO^XRQST if crdhldr^prsn^d( sem ) then #DELETE j0626201/j0626203 PSTM^FRMT^0200^TO^XRQST #ADD 06302 PSTM^FRMT^0200^TO^XRQST if visa_tran_g then #DELETE 06303 /06305 PSTM^FRMT^0200^TO^XRQST #DELETE 06331r01/06331r1l PSTM^FRMT^0200^TO^XRQST #DELETE f0660101/06601r0J PSTM^FRMT^0210^TO^XRESP #ADD 06832900 PSTM^FRMT^0210^TO^XRESP "N", "0", "P", "O", "S" -> #DELETE 06832901 PSTM^FRMT^0210^TO^XRESP #DELETE 06837 /06842 PSTM^FRMT^0210^TO^XRESP #ADD 07065r00 PSTM^FRMT^0210^TO^XRESP mrch^advc^cde^sub^fld^84.tag^data <> " " then #DELETE 07065r01/07065r02 PSTM^FRMT^0210^TO^XRESP #DELETE 07200=01/07200=0W PSTM^FRMT^0220^TO^XADV #DELETE 07200=0Y/07200=0a PSTM^FRMT^0220^TO^XADV #ADD x0720009 PSTM^FRMT^0220^TO^XADV end; #DELETE o072000F PSTM^FRMT^0220^TO^XADV #ADD 07342 PSTM^FRMT^0420^TO^ACQ^XRVSL int .pos^data1^tkn( pos^data1^tkn^def ); int pos^data1^tkn^lgth; int pos^data1^tkn^found := false; #DELETE 07342A00/07342A03 PSTM^FRMT^0420^TO^ACQ^XRVSL #DELETE q073590I/q073590O PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 07377A02 PSTM^FRMT^0420^TO^ACQ^XRVSL tkn^id ':=' pos^data1^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, pos^data1^tkn^lgth ) then begin pos^data1^tkn^found := true; #DELETE 07377A03/07377A09 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 07448 PSTM^FRMT^0420^TO^ACQ^XRVSL if pos^data1^tkn^found and not crdhldr^prsn^d( sem ) and pos^data1^tkn.rvsl^rsn^ind = "1" then begin ! ! Suspect Fraud ! movd( sem.resp^cde, "34" ); end; #DELETE J0780801/J0780806 PSTM^FRMT^AMT^TO^SEM^AMT #DELETE 08291r01/08291r0C PSTM^FRMT^RESP^CDE^TO^SEM #DELETE 08497 /08506 PSTM^FRMT^SEM^ADDL^DATA #ADD 08631 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g and #DELETE 08632 /08632 OFFSET 1 PSTM^FRMT^SEM^ADDL^DATA #ADD 09206 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g then #DELETE 09207 /09208 PSTM^FRMT^SEM^ADDL^DATA #ADD 09588*01 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^credit^card^d then #DELETE 09588*02/09588*03 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 09592*00 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^checking^d then #DELETE 09592*01/09592*02 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 09597*00 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE if pstm.tran.tran^cde.aa = b24^savings^d then #DELETE 09597*01/09597*02 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 11814 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM call util^gmt^adjust( ! year !, rvsl.orig.dat^tim, rvsl.orig.dat^tim.byte[ 4 ], pct.gmt^ofst, pstm.tran^dat, pstm.tran^dat.mm, pstm.tran^tim ); move( pstm.seq^num, rvsl.orig.trace ); #ADD 12267 SEM^FRMT^XRESP^TO^PSTM^0210 ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; #DELETE 12268 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12407 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.visa^cvv2^sub^fld^92. lgth = "06" then #DELETE 12408 /12409 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12432 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if tag = "87" #DELETE 12433 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12500 /12501 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12528 /12535 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12537 SEM^FRMT^XRESP^TO^PSTM^0210 ofst, #DELETE 12538 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12593 /12594 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12598 /12605 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12659 SEM^FRMT^XRESP^TO^PSTM^0210 ofst, #DELETE 12660 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12685 SEM^FRMT^XRESP^TO^PSTM^0210 ofst, #DELETE 12686 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12699 SEM^FRMT^XRESP^TO^PSTM^0210 ofst, #DELETE 12700 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD p1275003 SEM^FRMT^XRESP^TO^PSTM^0210 movd( compliance^tkn.valid^cde, "1" ); #DELETE p1275004 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD p1275008 SEM^FRMT^XRESP^TO^PSTM^0210 movd( compliance^tkn.valid^cde, "2" ); #DELETE p1275009 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12780 /12785 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12890 /12891 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12932 /12933 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12937 /12944 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13051 SEM^FRMT^XRESP^TO^PSTM^0210 idx := complnc^acq^data^loc^g; #DELETE 13052 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13061 SEM^FRMT^XRESP^TO^PSTM^0210 movl( user^data.info.byte[ idx ], #DELETE 13062 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13063 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + lgth; #DELETE 13064 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13065 SEM^FRMT^XRESP^TO^PSTM^0210 movl( user^data.info.byte[ idx ], sem.setl^dat, #DELETE 13066 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13067 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + $len( sem.setl^dat ); movl( user^data.info.byte[ idx ], #DELETE 13068 /13069 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13071 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + $len( sem.addl^data.info.cvc^sub^fld^88. #DELETE 13072 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13074 SEM^FRMT^XRESP^TO^PSTM^0210 movl( user^data.info.byte[ idx ], #DELETE 13075 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13077 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + $len( sem.addl^data.info.cvc^sub^fld^89. #DELETE 13078 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13080 SEM^FRMT^XRESP^TO^PSTM^0210 ! If the length field is less than the index, set it ! #DELETE 13081 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13084 SEM^FRMT^XRESP^TO^PSTM^0210 if user^data.len < idx then begin user^data.len := idx; end; #DELETE 13085 /13086 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 13279 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, #DELETE 13280 /13285 OFFSET 1 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 13347 /13352 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE q133680u/q1336813 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 14246c03/14246o05 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 14540N00/14540N0D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14801v00 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if e^com^addl^data^tkn <> spaces #DELETE 14801v01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15361 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.avs^rqst.cde = "52" then ! AVS and AUTH! #DELETE 15362 /15363 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE q1561803/q1561809 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 15639 SEM^FRMT^XRVSL^TO^PSTM^0420 wlform( noroom^tkn, "NO ROOM TO ADD POS DATA1 TOKEN, " ',' "SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\," ',' " SETL DATE: \\\\ " ) wlform( erradd^tkn, "UNABLE TO ADD POS DATA1 TOKEN," ',' " SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ',' "SETL DATE: \\\\, ERR: #" ) #ADD P1564502 SEM^FRMT^XRVSL^TO^PSTM^0420 int .pos^data1^get^tkn( pos^data1^tkn^def ); int pos^data1^tkn^lgth; #ADD 15649 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .pos^data1^tkn( pos^data1^tkn^def ); #ADD 15688 SEM^FRMT^XRVSL^TO^PSTM^0420 if base24^rel^g >= 5 and resp^cde^bit^d and rvsl.resp^cde = "34" then begin ! ! Suspect Fraud ! tkn^id ':=' pos^data1^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^get^tkn, pos^data1^tkn^lgth ) then begin movd( pos^data1^get^tkn.rvsl^rsn^ind, "1" ); end else begin ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^data1^tkn ); movd( pos^data1^tkn.rvsl^rsn^ind, "1" ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data1^tkn, $len( pos^data1^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 2996, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 2997, ! routing code ! , @erradd^tkn, net.myname, evt^msg^severity^crit^l, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2997 ); end; end;! of token^result ! end; ! of token did not exist ! end; ! end of Suspect Fraud #DELETE 17724c0N/17724c0v UTIL^COLLAPSE^SEM #DELETE 18889c0W/18889c0n UTIL^EXPAND^SEM #ADD 19919 SUB^GROUP^GET if $param( group ) and bniif^tbl.fiid = pct.swi^id for $len( bniif^tbl.fiid ) then begin movl( group, bniif^tbl.mci^id, 6 ); end else #ADD p2037300 UTIL^ILF^ADD movl( ilf.sem.user^fld, trace^id, $occurs( trace^id ) ); #DELETE p2037301 UTIL^ILF^ADD #DELETE 20405 /20428 UTIL^ILF^ADD #DELETE 20447 /20463 UTIL^ILF^ADD #ADD p2049900 UTIL^ILF^ADD movl( ilf.sem.user^fld, trace^id, $occurs( trace^id ) ); #DELETE p2049901 UTIL^ILF^ADD #ADD 21229 SUB^ILF^GET end; #DELETE 21230 /21234 SUB^ILF^GET #ADD p2123905 UTIL^ILF^GET^POS^PREAUTH int .base24^msg[ 0:wlen( msg^def ) - 1 ]; int .pstm^( pstm^def ) = base24^msg; #DELETE p2123906 UTIL^ILF^GET^POS^PREAUTH #ADD m214550F UTIL^ILF^PROCESS^ADVICE int proc util^ilf^process^advice( sem, fnum, ilf, ilf^lgth, ilf^found, resp^cde ); int .sem( sem^def ); int .fnum; int .ilf( ilf^def ); int .ilf^lgth; int .ilf^found; string .resp^cde; #DELETE m214550G/u2145506 UTIL^ILF^PROCESS^ADVICE #ADD m214550U UTIL^ILF^PROCESS^ADVICE movd( resp^cde, resp^dup^detect^d ); #ADD m214550m UTIL^ILF^PROCESS^ADVICE movd( resp^cde, resp^dup^detect^d ); #ADD m214551Q UTIL^ILF^PROCESS^ADVICE movd( resp^cde, resp^dup^detect^d ); #ADD p2183903 UTIL^ILF^UPDT movl( ilf.sem.user^fld, trace^id, $occurs( trace^id ) ); #DELETE p2183904 UTIL^ILF^UPDT #ADD p2184903 UTIL^ILF^UPDT movl( ilf.sem.user^fld, trace^id, $occurs( trace^id ) ); #DELETE p2184904 UTIL^ILF^UPDT #DELETE 21884 /21907 UTIL^ILF^UPDT #DELETE 21931 /21953 UTIL^ILF^UPDT #ENDSCN = SW0F161 !#CMP2.28 08/10/11 BNETS 6102 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6102 * ******************************************************************************** #SCN = SW0F164 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6102 #NEWVERSION = 6103 #ADD 03821B0E ! 10AUG2011 bensone ! Symptom: Banknet Release 11.Q4 Mandates. ! Problem: None ! Fix: Removal of Redundant Checks on the Processing Mode field ! on Screen 3 of the ICF(E) ! Case #01136225 (ILF Processing Issues) ! Case #01152109 (Duplicate 0120 Message Does Not Have ! Response Code '94') ! Case #01133172 (Minor Errors in the Banknet Interface) ! procs modified: pstm^0200^request ! pstm^0200^route ! sem^^input^from^station ! sem^acq^rvsl^rqst^pos ! sem^advice ! sem^advice^pos ! sem^advice^response^pos ! sem^reversal^advice ! sem^reversal^advice^pos ! Dependency: Apply fixes to BNETATMS, BNETD, BNETDDLS, BNETEMVS, ! BNETG, BNETLIBS, BNETS, DDLPSTKN and PSTKNCVS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #003253 #REPLACE 03862 BNETS^61^02 PROC BNETS^60^152 MAIN; #DELETE 15252 /15255 SUB^APPRV^BLIND #ADD 15705 PSTM^0200^ROUTE !################################################################# !# # !# sub^pstm^route # !# # !# This subprocedure performs additional formatting on a # !# response denial to the local AUTH to replicate HISO # !# processing. This allows acquirers to perform stand-in # !# authorization when Banknet is unavailable. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: false # !# # !################################################################# int subproc sub^pstm^route; begin if dest <> susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ) then begin return false; end; pstm.compl^req ':=' offline^completion^d; if substate = sub^timeout^l then begin movd( pstm.rte^stat, sta^dest^not^avail^d ); end else begin movd( pstm.rte^stat, sta^line^down^d ); end; if pstm.auth^ind2 = "9" then begin movd( pstm.auth^ind2, "P" ); movd( pstm.rte.pri, "AUTHH " ); end else if pstm.rte.auth^ind = "9" then begin movd( pstm.rte.auth^ind, "P" ); movd( pstm.rte.pri, "AUTHH " ); end; return false; end; ! of subproc sub^pstm^route ?page "pstm^0200^route" !################################################################# !# # !# This is the main body of PROC pstm^0200^route # !# # !################################################################# #ADD 15761 PSTM^0200^ROUTE if pct.options.processing^mde = "H" then #DELETE 15762 PSTM^0200^ROUTE #ADD 15763 PSTM^0200^ROUTE call sub^pstm^route; #DELETE 15764 PSTM^0200^ROUTE #REPLACE 17166 SEM^^INPUT^FROM^STATION init ( sem, " ", wlen( sem^def ) ); #ADD 17850 FRMT^AND^SEND^ACQ^RVSL^RESP if ilf.intrn^msg^savearea^lgth = 0 or ilf.substate <> 0 then begin ack^resp^cde ':=' resp^frmt^err^sem^d; call frmt^and^send^acq^rvsl^resp; if not util^ilf^updt( ilf^fnum, ilf, ilf^lgth, sub^format^error^l, ! pstm !, rvsl ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! pstm !, rvsl, $len( sem^def ), sub^format^error^l ); end; ! of if error updating the ILF ! return; end; #ADD 17856 FRMT^AND^SEND^ACQ^RVSL^RESP if poss^dup^d( pstm ) or #DELETE 17857 /17858 FRMT^AND^SEND^ACQ^RVSL^RESP #DELETE 17863 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 17881 FRMT^AND^SEND^ACQ^RVSL^RESP if not pos^approved^d( pstm ) then #DELETE 17882 /17884 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 18060 FRMT^AND^SEND^ACQ^RVSL^RESP ! pstm !, #DELETE 18061 FRMT^AND^SEND^ACQ^RVSL^RESP #DELETE 18502 /18504 SEM^ADVICE #ADD 18508 SEM^ADVICE call sem^advice^atm( sem, msg, sta^x, ack.resp^cde ); #DELETE 18509 SEM^ADVICE #ADD 18512 SEM^ADVICE call sem^advice^pos( sem, msg, sta^x, ack.resp^cde ); #DELETE 18513 SEM^ADVICE #ADD 18515 SEM^ADVICE if util^^collapse( ack, csem, extlgth ) then begin call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam ); end; #ADD 18534 SEM^ADVICE^POS proc sem^advice^pos( sem, msg, sta^x, resp^cde ); #DELETE 18535 SEM^ADVICE^POS #ADD 18538 SEM^ADVICE^POS string .resp^cde; #ADD 18590 SEM^ADVICE^POS movd( resp^cde, resp^dup^detect^d ); #ADD 18598 SEM^ADVICE^POS ilf^found, resp^cde ) then #DELETE 18599 SEM^ADVICE^POS #ADD 18615 SEM^ADVICE^POS if ( not sem^approved^d( sem ) and not frwd^dcln^advc^g ) or #DELETE 18616 SEM^ADVICE^POS #ADD 18624 SEM^ADVICE^POS sem.merch^typ = atm^funding^txn^d then #DELETE 18625 /18627 SEM^ADVICE^POS #ADD 18648 SEM^ADVICE^POS movd( resp^cde, resp^system^error^sem^d ); #ADD 18656 SEM^ADVICE^POS movd( resp^cde, resp^frmt^err^sem^d ); #ADD 18701 SEM^ADVICE^POS if not util^ilf^updt( fnum, ilf, ilf^lgth, 0, ! pstm !, sem ) then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), pos^l, pct.pos.dest, pstm, sem, $len( sem^def ), sub^format^error^l ); end; ! of if error updating the ILF ! #DELETE 18702 SEM^ADVICE^POS #ADD 19059 SEM^ADVICE^RESPONSE^POS int .base24^msg[ 0:wlen( msg^def ) - 1 ]; struct .pstm^( pstm^def ) = base24^msg; #DELETE 19060 /19062 SEM^ADVICE^RESPONSE^POS #ADD 19149 SEM^ADVICE^RESPONSE^POS movd( compliance^tkn.valid^cde, "2" ); #DELETE 19150 SEM^ADVICE^RESPONSE^POS #DELETE 19202 SEM^ADVICE^RESPONSE^POS #ADD 19207 SEM^ADVICE^RESPONSE^POS movl( pstm^, pstm, wlen( msg^def ) ); #REPLACE 22419 /22419 OFFSET 0 SEM^REVERSAL^ADVICE if not util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, ! base24^msg !, rvsl ) then #DELETE 22420 SEM^REVERSAL^ADVICE #ADD 22421 SEM^REVERSAL^ADVICE if ilf.intrn^msg^savearea^lgth = 0 or ilf.substate <> 0 then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, ! base24^msg !, rvsl, $len( sem^def ), sub^format^error^l ); end else begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, rvsl, $len( sem^def ), sub^format^error^l ); end; #DELETE 22422 /22425 SEM^REVERSAL^ADVICE #ADD 22617 SUB^PROCESS^UNMATCHD^POS^RVSL ilf.substate <> 0 then begin return true; end; if poss^dup^d( pstm ) or #DELETE 22618 /22620 SUB^PROCESS^UNMATCHD^POS^RVSL #DELETE 23906 /23966 UKDM^PSTM^0200^ROUTE #ENDSCN = SW0F164 !#CMP2.28 08/12/11 BNETS 6103 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6103 * ******************************************************************************** #SCN = SW0F188 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6103 #NEWVERSION = 6104 #ADD 03821C0N ! 12AUG2011 wielerk ! Symptom: Installations that are issuer only do not send 0800 ! messages when attempting to use NETWK CONN STAT ! command. ! Problem: The proc init^echotest is not invoked correctly which ! prevents issuer commands from working. ! Fix: Modified logic to invoke init^echotest using traffic ! literals based on ICF configuration. ! Proc modified: cmd^netwk^conn^stat ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1155644. #REPLACE 07301 /07301 OFFSET 0 CMD^NETWK^CONN^STAT if pct.options.acq then begin call init^echotest( j, acq^l ); end; if pct.options.iss then begin call init^echotest( j, iss^l ); end; #DELETE 07302 /07303 CMD^NETWK^CONN^STAT #ENDSCN = SW0F188 !#CMP2.28 08/23/11 BNETS 6104 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6104 * ******************************************************************************** #SCN = SW0F203 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6104 #NEWVERSION = 6105 #ADD 03821D0C ! 23AUG2011 bensone ! Symptom: The interface can abend when the pstm 0200 preauth ! completion request cannot locate the original preauth ! request in the ILF. ! Problem: The proc pstm^0200^send^compl^advc incorrectly passes ! the PSTM to proc pstm^0200^route when it should be ! passing the suspense record (SUSP). Msg^sent in proc ! pstm^0200^route should be a reference parameter. ! Fix: Modified the call to pstm^0200^route to pass SUSP. ! Made msg^sent a reference parameter. ! Procs modified: pstm^0200^route ! pstm^0200^send^compl^advc ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1160218. #REPLACE 15696 PSTM^0200^ROUTE int .msg^sent; #REPLACE 15837 PSTM^0200^SEND^COMPL^ADVC call pstm^0200^route( susp, #ENDSCN = SW0F203 !#CMP2.28 09/06/11 BNETLIBS61137FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61137 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61137 * ******************************************************************************** #SCN = SW0F210 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61137 #NEWVERSION = 61138 #ADD z044190g ! 07SEP2011 bensone ! Symptom: After it has been determined that a transaction is not ! a valid preauthorization, the PSTM point of service ! condition code is still being set to indicate a ! preauthorization. ! Problem: The point of service condition code was being set to ! '06' based solely on the value of de-61.7 (POS ! Transaction Status ) being a '4'. ! Fix: Remove the logic that sets the condition code solely on ! the value of de-61.7. Add logic to ensure the condition ! code is not overridden using de-61 (POS Data) if it has ! already been set to a non-zero value. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1161415. #ADD 14600 SEM^FRMT^XRQST^TO^PSTM^0200 if pstm.pt^srv^cond^cde <> "00" then begin ! ! do not override a non-zero value ! end else #DELETE 14632 /14638 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0F210 !#CMP2.28 10/05/11 BNETS 6105 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6105 * ******************************************************************************** #SCN = SW0F221 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6105 #NEWVERSION = 6106 #ADD 03821E0F ! 05OCT2011 wielerk ! Symptom: The interface does not identify a duplicate 0120. ! Problem: The first advice is updating the original response in ! the ILF, not adding a new ILF. ! Fix: Modified the advice logic to add a new ILF for a 0120. ! Proc modified: sem^advice^pos ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1164699. #ADD 18587 SEM^ADVICE^POS if pos^pre^auth^d( ilf.pos ) then begin ! ! force the advice to add a new ILF not update the ! original response ! ilf^found := false; end; #ENDSCN = SW0F221 !#CMP2.28 11/11/11 BNETS 6106 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6106 * ******************************************************************************** #SCN = SW0F237 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6106 #NEWVERSION = 6107 #ADD 03821F09 ! 11NOV2011 bensone ! Symptom: The interface does not return the Interchange Compliance ! token (20) when a pre-auth completion is approved blind. ! Problem: The wrong copy of the PSTM is being passed to the ! blind approval logic. ! Fix: Modify references to use the copy of the PSTM that ! includes the Interchange Compliance token (20). ! Proc modified: pstm^0200^request ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1172152. #REPLACE 15468 SUB^APPRV^BLIND call sub^apprv^blind( susp.intrn^msg ); #REPLACE 15477 SUB^APPRV^BLIND susp.intrn^msg, #REPLACE 15489 SUB^APPRV^BLIND susp.intrn^msg ); #ENDSCN = SW0F237 !#CMP2.28 11/21/11 BNETDDLS6042 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6042 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6042 * ******************************************************************************** #SCN = SW0F238 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6042 #NEWVERSION = 6043 #ADD 00262p0B * 21NOV2011 bensone * Symptom: BASE24 Banknet CNP Reversal Support. * Problem: None * Fix: The interface has been enhanced to search four ILFs * (current and 3 previous) to match 'card not present' * reversals. Increased the PCT-BNET definition to * support 5 occurrences of the ILF structure. * Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. * Run Make. * Replace BAMISCTD, LCONFBA, BNETMNWD, and BNETUPDT. * Reference: WO #PR004133 #ADD 02113 PCT-BNET 02 ilf occurs 5 times. #DELETE 02114 PCT-BNET #ENDSCN = SW0F238 !#CMP2.28 11/21/11 BNETG 6075 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6075 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6075 * ******************************************************************************** #SCN = SW0F239 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00026}0G ! 21NOV2011 bensone ! Symptom: BASE24 Banknet CNP Reversal Support. ! Problem: None ! Fix: The interface has been enhanced to search four ILFs ! (current and 3 previous) to match 'card not present' ! reversals. Add the literals two^days^prev^l and ! three^days^prev^l to reference the additional ILF ! entries in the BNET-PCT. Add new globals ! enhncd^ilf^match^acq^g and enhncd^ilf^match^iss^g to ! the bnet^glbl^def definition to hold values for the new ! LCONF parameters SWI-ENHNCD-ILF-MATCH-ACQ and ! SWI-ENHNCD-ILF-MATCH-ISS. Add new global oldest^ilf^g ! to the bnet^glbl^def definition to control how many ! ILFs to search. Add structure bnet^g to the globals^def ! definition for temporary storage of variables during a ! warmboot. Remove variables sppt^non^emv^pin^chng^g, ! ilf^create^g, tran^tim^set^g,log^only^compl^adv^g, ! instl^txn^data^ofst^g and sppt^instl^txn^g from the ! globals^def definition as they are contained in the ! bnet^g structure. This allows all the variables in ! bnet^g to be moved in a block rather than separately. ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETMNWD, and BNETUPDT. ! Reference: WO #PR004133 #ADD 00352 ! ! ILF index literals ! literal three^days^prev^l = 0; literal two^days^prev^l = 1; literal prev^l = 2; literal cur^l = 3; literal next^l = 4; #DELETE 00353 /00355 #ADD 00435)03 int enhncd^ilf^match^acq^g; int enhncd^ilf^match^iss^g; int oldest^ilf^g; #DELETE 01366^01/01366^02 #DELETE 01366(01 #DELETE 01366\01 #DELETE 01366)01/01366)02 #ADD 01366;0J struct bnet^g( bnet^glbl^def ); #ENDSCN = SW0F239 !#CMP2.28 11/21/11 BNETLIBS61138FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61138 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61138 * ******************************************************************************** #SCN = SW0F240 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61138 #NEWVERSION = 61139 #ADD #044190G ! 21NOV2011 bensone ! Symptom: BASE24 Banknet CNP Reversal Support. ! Problem: None ! Fix: The interface has been enhanced to search four ILFs ! (current and 3 previous) to match 'card not present' ! reversals. ! Procs modified: util^ilf^cutover ! util^ilf^get ! util^ilf^process^reversal ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETMNWD, and BNETUPDT. ! Reference: WO #PR004133 #ADD d2083701 UTIL^ILF^CUTOVER if pct.ilf[ bnet^g.oldest^ilf^g ].fcb.filenum > 0 then begin call hiswfile^close( pct.ilf[ bnet^g.oldest^ilf^g ].fcb. filenum ); end; for i := bnet^g.oldest^ilf^g to prev^l do begin ! ! Move a previous ILF to the previous - 1 day ILF ! move( pct.ilf[ i ], pct.ilf[ i + 1 ] ); end; #DELETE 20838 /20841 UTIL^ILF^CUTOVER #ADD 21128 UTIL^ILF^EXPAND^BASE24 !##################################################################### !# # !# util^ilf^get # !# # !# This procedure finds an ilf record according to the primary key. # !# # !# INPUT PARAMETERS : # !# key - the ilf primary key # !# key^lgth - the ilf primary key length # !# enhncd^ilf^match - flag to indicated if additional ILFs # !# should be searched # !# pstm - adjustment message used to locate original# !# transaction using a reduced prikey. # !# # !# OUTPUT PARAMETERS: # !# ilf - ilf record # !# ilf^lgth - ilf record length # !# base24^msg - base24 internal message from the ILF # !# sem - banknet external message from the ILF # !# # !# RETURN: # !# filenumber - If record is found # !# FALSE - If record is not found # !# # !##################################################################### int proc util^ilf^get( key, key^lgth, ilf, ilf^lgth, base24^msg, sem, pstm, enhncd^ilf^match) variable; string .key; int key^lgth; int .ilf( ilf^def ); int .ilf^lgth; int .base24^msg; int .sem; int .pstm( pstm^def ); int enhncd^ilf^match; #DELETE 21129 /21157v02 UTIL^ILF^GET #ADD 21161 UTIL^ILF^GET int enhanced^ilf^match := false; int found := false; int indx; int lgth; int oldest^ilf; #DELETE 21162 /21163 UTIL^ILF^GET #ADD 21197 SUB^ILF^GET if $param(enhncd^ilf^match) and enhncd^ilf^match then begin enhanced^ilf^match := true; end; if enhanced^ilf^match then begin oldest^ilf := three^days^prev^l; end else begin oldest^ilf := prev^l; end; #ADD 21197v0E SUB^ILF^GET while not found and ( indx := indx - 1 ) >= oldest^ilf do #DELETE 21198 SUB^ILF^GET #ADD m214552M UTIL^ILF^PROCESS^REVERSAL begin int enhncd^ilf^match := false; int fnum; int .pbit^map := wordaddr( @sem.pbit^map ); if bnet^g.enhncd^ilf^match^iss^g then begin if rvsl.addl^data.info.tran^cat^cde = "T" or rvsl.addl^data.info.tran^cat^cde = "U" or ( ntl^pos^data^bit^d and not crdhldr^prsn^d( rvsl ) ) then begin ! ! CNP Card not present ! enhncd^ilf^match := true; end; end; ! of enhncd^ilf^match^iss^g #DELETE m214552N/m214552R UTIL^ILF^PROCESS^REVERSAL #ADD v214550i UTIL^ILF^PROCESS^REVERSAL if ( fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, base24^msg, sem, ! pstm !, enhncd^ilf^match ) ) then #DELETE v214550j/v214550o UTIL^ILF^PROCESS^REVERSAL #ADD v214550x UTIL^ILF^PROCESS^REVERSAL sem, ! pstm !, enhncd^ilf^match ) then #DELETE m214553G UTIL^ILF^PROCESS^REVERSAL #ENDSCN = SW0F240 !#CMP2.28 11/21/11 BNETS 6107 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6107 * ******************************************************************************** #SCN = SW0F242 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6107 #NEWVERSION = 6108 #ADD 03821G0B ! 21NOV2011 bensone ! Symptom: BASE24 Banknet CNP Reversal Support. ! Problem: None ! Fix: The interface has been enhanced to search four ILFs ! (current and 3 previous) to match 'card not present' ! reversals. Add support for LCONF parameters ! SWI-ENHNCD-ILF-MATCH-ACQ and SWI-ENHNCD-ILF-MATCH-ISS. ! Procs modified: cmd^warmboot^close^old ! cmd^warmboot^retrieve^globals ! cmd^warmboot^store^globals ! init^bnet^g ! init^ilf ! init^paramproc ! pstm^0420^reversal ! sem^acq^rvsl^resp ! sem^acq^rvsl^rqst ! sem^reversal^advice ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETMNWD, and BNETUPDT. ! Reference: WO #PR004133 #REPLACE 03916 BNETS^61^07 call init^bnet^g( false ); #DELETE 09042 CMD^WARMBOOT^STORE^GLOBALS #ADD 09189 CMD^WARMBOOT^STORE^GLOBALS store^wrds^d( bnet^g ); #DELETE 09190 /09198 CMD^WARMBOOT^STORE^GLOBALS #ADD 09347 CMD^WARMBOOT^STORE^GLOBALS call init^bnet^g( true ); #DELETE 09348 /09356 CMD^WARMBOOT^STORE^GLOBALS #ADD 09418 CMD^WARMBOOT^CLOSE^OLD close^file^d( pcpl.ilf[ two^days^prev^l ].fcb.filenum ); close^file^d( pcpl.ilf[ three^days^prev^l ].fcb.filenum ); #DELETE 09623 CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD 09647 CMD^WARMBOOT^RETRIEVE^GLOBALS close^file^d( pct.ilf[ two^days^prev^l ].fcb.filenum ); close^file^d( pct.ilf[ three^days^prev^l ].fcb.filenum ); #ADD 09801 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^wrds^d( bnet^g ); #DELETE 09802 /09810 CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD 10410 INIT^BNET^G proc init^bnet^g( warmboot ); int warmboot; #DELETE 10411 INIT^BNET^G #ADD 10413 INIT^BNET^G if not warmboot then begin bnet^g.bniif^sav^ctr^g := 0; bnet^g.bniif^sav^seg^id^g := -1; bnet^g.bniif^sav^tbl^g := -1d; bnet^g.bniif^ext^mem^bytes^g := 0f; end; #DELETE 10414 /10418 INIT^BNET^G #ADD 10428 INIT^BNET^G bnet^g.enhncd^ilf^match^acq^g := false; bnet^g.enhncd^ilf^match^iss^g := false; bnet^g.oldest^ilf^g := prev^l; #ADD 11479 INIT^ILF int(32) ilf^dat; #ADD 11485 INIT^ILF int indx; #ADD 11497 INIT^ILF for indx := bnet^g.oldest^ilf^g to prev^l do begin ! ! Open the Previous ILF Files if they exist ! ilf^dat := date + $dbl( indx ) - 3d; call julian^to^yymmdd( ilf^dat, pct.ilf[ indx ].dat ); if pct.ilf[ indx ].fcb.filenum > 0 then begin call hiswfile^close( pct.ilf[ indx ].fcb.filenum ); set ( pct.ilf[ indx ].fcb.filenum, -2 ); end; create^it := false; if util^ilf^open( pct.ilf[ indx ].fcb.filenum, pct.ilf[ indx ].dat, create^it, icf, pct.ilf[ indx ].fcb.file^frmt ) then begin if pct.ilf[ indx ].fcb.filenum > 0 then begin set( pct.ilf[ indx ].fcb.init^flag, false ); call fileinfo( pct.ilf[ indx ].fcb.filenum,, fname ); call util^percent^full( pct.ilf[ indx ].fcb, fname, ilf^notify^interval^g, ilf^notify^percent^g ); if indx = prev^l and not init^ilf^review( pct.ilf[ indx ].fcb.filenum, pct.trace^num ) then begin ! ! Search for last trace number in the previous ! and current ILF only. ! return false; end; end; end; end; #DELETE 11498 /11534 INIT^ILF #ADD 12676 INIT^PARAMPROC "P", "SWI-ENHNCD-ILF-MATCH-ACQ ", "P", "SWI-ENHNCD-ILF-MATCH-ISS ", #ADD 13500 INIT^PARAMPROC ! ! SWI-ENHNCD-ILF-MATCH-ACQ ! if not ferror then begin bnet^g.enhncd^ilf^match^acq^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.enhncd^ilf^match^acq^g := true; bnet^g.oldest^ilf^g := three^days^prev^l; end; end; ! ! SWI-ENHNCD-ILF-MATCH-ISS ! if not ferror then begin bnet^g.enhncd^ilf^match^iss^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.enhncd^ilf^match^iss^g := true; bnet^g.oldest^ilf^g := three^days^prev^l; end; end; #ADD 16676 PSTM^0420^REVERSAL int enhncd^ilf^match := false; #ADD 16687 PSTM^0420^REVERSAL int ps51^tkn^found := false; int .ps51^get^tkn( ps51^tkn^def ); #ADD 16761 PSTM^0420^REVERSAL if bnet^g.enhncd^ilf^match^acq^g then begin tkn^id ':=' ps51^tkn^id^d; if hiswtkn^get^tkn ( pstm, tkn^id, @ps51^get^tkn, tkn^lgth ) then begin ps51^tkn^found := true; end; if pos^mail^phone^d( pstm ) or pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "05" or pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" or ( ps51^tkn^found and ( ps51^get^tkn.e^com^flg > "0" and ps51^get^tkn.e^com^flg <= "9" ) ) then begin ! ! CNP Card not present ! enhncd^ilf^match := true; end; end; ! of enhncd^ilf^match^acq^g if not ( fnum := util^ilf^get( ilf.prikey, $len(ilf.prikey), ilf, ilf^lgth, ! base24^msg !, sem, ! pstm !, enhncd^ilf^match ) ) then #DELETE 16762 /16763 PSTM^0420^REVERSAL #ADD 16764B0J PSTM^0420^REVERSAL sem, ! pstm !, enhncd^ilf^match ) ) then #DELETE 16764B0K PSTM^0420^REVERSAL #ADD 17259 SEM^ACQ^RVSL^RESP int enhncd^ilf^match := false; #ADD 17291 SEM^ACQ^RVSL^RESP if bnet^g.enhncd^ilf^match^acq^g then begin if sem.addl^data.info.tran^cat^cde = "T" or sem.addl^data.info.tran^cat^cde = "U" then begin ! ! CNP Card not present ! enhncd^ilf^match := true; end; end; ! of enhncd^ilf^match^iss^g #ADD 17301 SEM^ACQ^RVSL^RESP base24^msg, ! sem !, ! pstm !, enhncd^ilf^match ) then #DELETE 17302 SEM^ACQ^RVSL^RESP #ADD 17435 SEM^ACQ^RVSL^RQST int enhncd^ilf^match := false; #ADD 17449 SEM^ACQ^RVSL^RQST if bnet^g.enhncd^ilf^match^iss^g then begin if not crdhldr^prsn^d( rvsl ) then begin ! ! CNP Card not present ! enhncd^ilf^match := true; end; end; ! of enhncd^ilf^match^iss^g #ADD 17456 SEM^ACQ^RVSL^RQST sem, ! pstm !, enhncd^ilf^match ) ) then #DELETE 17457 SEM^ACQ^RVSL^RQST #ADD 22336 SEM^REVERSAL^ADVICE int enhncd^ilf^match := false; #ADD 22358 SEM^REVERSAL^ADVICE if bnet^g.enhncd^ilf^match^iss^g then begin if rvsl.addl^data.info.tran^cat^cde = "T" or rvsl.addl^data.info.tran^cat^cde = "U" or ( ntl^pos^data^bit^d and not crdhldr^prsn^d( rvsl ) ) then begin ! ! CNP Card not present ! enhncd^ilf^match := true; end; end; ! of enhncd^ilf^match^iss^g #ADD 22365 SEM^REVERSAL^ADVICE sem, ! pstm !, enhncd^ilf^match ) ) then #DELETE 22366 SEM^REVERSAL^ADVICE #ENDSCN = SW0F242 !#CMP2.28 12/05/11 BNETLIBS61139FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61139 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61139 * ******************************************************************************** #SCN = SW0F257 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61139 #NEWVERSION = 61140 #ADD $044190E ! 05DEC2011 wielerk ! Symptom: Advice messages do not pass de-48.71 results code in ! the C0 token. ! Problem: Module is using an outdated value of "21" for On Behalf ! service and not the value for Dynamic AAV Verification ! in Stand-in ( "06" ). ! Fix: Modified logic to replace the outdated value of "21" ! with "06". ! Also replaced OB edit of "02" to "16" and removed ! unused results value "F", "G" and "T" for OB services ! "15"/"16". ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1175029. #REPLACE E148060A SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "06" then #REPLACE E148060i SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "16" or #REPLACE E148060r SEM^FRMT^XRQST^TO^PSTM^0200 "A", "E", "I", "N" -> #ENDSCN = SW0F257 !#CMP2.28 12/06/11 BNETS 6108 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6108 * ******************************************************************************** #SCN = SW0F258 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6108 #NEWVERSION = 6109 #ADD 03821H0M ! 06DEC2011 wielerk ! Symptom: The interface returns de-39 ( resp cde ) with a value ! of "96" if an unmatched reversal is sent to Base24. ! Problem: Initial design set de-39 to "96" for unmatched reversals ! while Mastercard simply sends these back as advices. ! Fix: Removed the setting of de-39 if ILF is not found. ! Proc modified: sem^acq^rvsl^rqst^pos ! Dependency: Apply fixes to BNETS and BNETATMS. Run Make. ! Reference: Case #1175922. #DELETE 17664 FRMT^AND^SEND^ACQ^RVSL^RESP #ENDSCN = SW0F258 !#CMP2.28 12/12/11 BNETLIBS61140FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61140 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61140 * ******************************************************************************** #SCN = SW0F267 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61140 #NEWVERSION = 61141 #ADD %044190F ! 09DEC2011 bensone ! Symptom: The interface abends with trap 2030 when a SEM 0410 ! is received. ! Problem: When the interface processed an external advice response ! (0130), it could not distinguish whether the original ! advice was in the SAF or on the suspense queue. A record ! was deleted from the SAF when it should have been ! deleted from the suspense queue. ! Fix: Advices that are on the suspense queue will be flagged ! by placing the value '0200' at offset 22-25 of DE 127. ! Overlay the flag if the record is subsequently added ! to the SAF. ! Procs modified: util^saf^add ! Dependency: Apply fix to BNETLIBS and BNETS. Run Make. ! Reference: Case #1174504. #ADD 22990N0g UTIL^POS^STANDIN^RCS ?section util^saf^add ?page "util^saf^add" !##################################################################### !# # !# util^saf^add # !# # !# This procedure adds a record to the saf file. # !# # !# INPUT PARAMETERS : # !# rec^data - Compressed SEM to be added to the SAF # !# rec^lgth - length of compressed SEM # !# rec^typ - record type (e.g. pos^l, atm^l) # !# rec^sys - service type (e.g. credit^l, debit^l) # !# sem - Corresponding Expanded version of rec^data (opt.) # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc util^saf^add( rec^data, rec^lgth, rec^typ, rec^sys, sem ) extensible; int .rec^data; int rec^lgth; int rec^typ; int rec^sys; int .sem( sem^def ); begin wlform( error1, "FAILURE on ADD, SAF File \f, Error \e" ) struct .saf( saf^bnet^def ); string .srec^data( sem^def ) := byteaddr( @rec^data ); if $param( sem ) then begin ! ! Advices that are on the suspense queue are flagged by ! placing the value '0200' at offset 22-25 of DE 127. ! Overlay the flag if the record is subsequently added to ! the SAF. ! movd( sem.private^data.info.byte[ 22 ], force^post^d ); call util^^collapse( sem, rec^data, rec^lgth ); end; #DELETE 22991 /23014 UTIL^SAF^ADD #ENDSCN = SW0F267 !#CMP2.28 12/12/11 BNETS 6109 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6109 * ******************************************************************************** #SCN = SW0F268 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6109 #NEWVERSION = 6110 #ADD 03821I0A ! 09DEC2011 bensone ! Symptom: The interface abends with trap 2030 when a SEM 0410 ! is received. ! Problem: When the interface processed an external advice response ! (0130), it could not distinguish whether the original ! advice was in the SAF or on the suspense queue. A record ! was deleted from the SAF when it should have been ! deleted from the suspense queue. ! Fix: Flag advices that are on the suspense queue by placing ! the value '0200' at offset 22-25 of DE 127. The value ! will be echoed in the advice response and the correct ! record can be deleted. ! Procs modified: bnet^sem^xadv^failed ! pstm^0200^route ! pstm^0200^send^compl^advc ! sem^advice^response ! sem^advice^response^compl ! tim^out^00^outbound ! Dependency: Apply fix to BNETLIBS and BNETS. Run Make. ! Reference: Case #1174504. #ADD 04471 BNET^SEM^XADV^FAILED if sem.private^data.info.byte[ 22 ] = request^d then begin ! ! PSTM 0200 pre-auth completion is on the suspense queue ! call bnet^sem^xrqst^failed ( sem, msg ); return; end; #ADD 15702 PSTM^0200^ROUTE struct .csem( sem^def ); int extlgth := 0; #ADD 15703 PSTM^0200^ROUTE int .sem( sem^def ) := @susp.extrn^msg; #ADD 15717 SUB^PSTM^ROUTE if sem.advice^cde.reason^cde = "191" then begin ! ! Pre-auth completion needs to be approved blind ! and logged to the ILF. For this case util^saf^add will ! collapse the SEM. ! call util^saf^add( csem, extlgth, pos^l, credit^l, sem ); movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, pos^resp^apprv^no^bal^d ); call util^generate^approval^code( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, sem, susp.extrn^msg^lgth, substate ); call util^send^pstm( pstm, dest ); return; end; ! pre-auth completion approved blind #ADD 15844 PSTM^0200^SEND^COMPL^ADVC ! ! Advices that are on the suspense queue are flagged by ! placing the value '0200' at offset 22-25 of DE 127. ! movd( sem.private^data.lgth, "026" ); movd( sem.private^data.info.byte[ 22 ], request^d ); #ADD 15855 PSTM^0200^SEND^COMPL^ADVC service, sem ); #DELETE 15856 PSTM^0200^SEND^COMPL^ADVC #ADD 15866 PSTM^0200^SEND^COMPL^ADVC service, sem ); #DELETE 15867 PSTM^0200^SEND^COMPL^ADVC #ADD 15879 PSTM^0200^SEND^COMPL^ADVC service, sem ); #DELETE 15880 PSTM^0200^SEND^COMPL^ADVC #ADD 18781 SEM^ADVICE^RESPONSE if sem.private^data.info.byte[ 22 ] = request^d then begin ! ! PSTM 0200 pre-auth completion on the suspense queue ! call sem^frmt^prikey( sem, susp.prikey, true ); if util^suspend^tran^delete( susp, $len( susp^bnet^def ), type^outbound^l, msg ) then begin call sem^advice^response^compl( susp, sem ); end; return; end; #ADD 18860 SEM^ADVICE^RESPONSE if ( sem^atm^d( sem ) or sem^ncd^txn^d( sem ) ) and pct.atm.present then begin set ( ilf.rec^typ, atm^l ); end else begin set ( ilf.rec^typ, pos^l ); end; #REPLACE 18863 SEM^ADVICE^RESPONSE ! base24^msg !, sem, $len( sem^def ), #DELETE 18871 /18881 SEM^ADVICE^RESPONSE #REPLACE 18905 SEM^ADVICE^RESPONSE^COMPL int extlgth := 0; #ADD 18959 SUB^APPRV^BLIND ! ! For this case util^saf^add will collapse the SEM ! #DELETE 18960 /18963 SUB^APPRV^BLIND #ADD 18966 SUB^APPRV^BLIND credit^l, xadvc ); #DELETE 18967 SUB^APPRV^BLIND #DELETE 18987 /18994 SUB^APPRV^BLIND #ADD 19006 SUB^APPRV^BLIND return; #ADD 22902 TIM^OUT^00^OUTBOUND sem.proc^cde = sem^pin^chng^d ) and sem.typ = sem^auth^request^d then #DELETE 22903 TIM^OUT^00^OUTBOUND #ENDSCN = SW0F268 !#CMP2.28 01/16/12 BNETLIBS61141FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61141 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61141 * ******************************************************************************** #SCN = SW0G008 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61141 #NEWVERSION = 61142 #ADD &044190G ! 17JAN2012 saderc ! Symptom: DE 48 SE 42 (e-commerce indicator) is not present in ! all e-commerce auth request (0100) messages. ! Problem: The interface does not currently decline an e-commerce ! 0100 request message that does not contain DE 48 SE 42, ! even though it is required. ! Fix: The interface was modified to decline the tran, if ! DE 48 SE 42 in not present in a 0100 e-commerce request. ! In addition, if the tran is a 0120 advice message and DE ! 48 SE 42 is not present, then the e-com-flg field in the ! PS51 token (C0) will be set to "8" (non-secure) and ! processing is continued. Also, removed logic related to ! Visa SET trans since it is obsolete. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1181933 #ADD 14771J0o SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^advice^d then begin ! ! Non-secure transaction ! movd( ps51^tkn^data.e^com^flg, "8" ); end else begin ! ! Tran declined because DE 48 SE 42 must be present ! in an e-commerce auth request. ! movd( data^elem^err^g, "048" ); return resp^format^error^sem^l; end; #DELETE 14771J0p/14786 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0G008 !#CMP2.28 01/26/12 BNETLIBS61142FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61142 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61142 * ******************************************************************************** #SCN = SW0G026 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61142 #NEWVERSION = 61143 #ADD *044190H ! 26JAN2012 saderc ! Symptom: POS eCommerce transactions that are fully authenticated ! (where UCAF is present) are being mapped to a ! tran-code "13" (Mail or Telephone order) in the PSTM. ! Problem: The interface currently maps all transactions with ! tran-cat-cde in DE 48 equals "T" (Phone, Mail, or ! eCommerce order) to a tran-code "13". It has been ! determined that eCommerce transactions that are fully ! authenticated can be mapped to a normal purchase ! tran-code since they are a fully secured CNP (Cardholder ! Not Present) transaction. ! Fix: The interface was modified to map eCommerce transactions ! with UCAF present to a normal purchase tran-code. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1179387 #ADD s1154201 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if ( sem.addl^data.info.tran^cat^cde = "T" and ( not sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" and not sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "3" ) ) and #DELETE s1154202 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0G026 !#CMP2.28 01/27/12 BNETLIBS61143FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61143 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61143 * ******************************************************************************** #SCN = SW0G030 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61143 #NEWVERSION = 61144 #ADD +044190H ! 27JAN2012 wielerk ! Symptom: External 0120 messages can contain invalid subelements ! in de-48 ( addl data ). ! Problem: If a completion matches a pre-auth, the ILF is used to ! populate the 0120. Some fields need to reflect values ! from the completion and not the pre-auth. ! Fix: Modified logic to populate de-48 from the completion ! and not from the original pre-auth. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1182474 #REPLACE T0717500 PSTM^FRMT^0220^TO^XADV move ( orig^sem.addl^data, sem.addl^data ); #ENDSCN = SW0G030 !#CMP2.28 02/15/12 BNETG 6076 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6076 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6076 * ******************************************************************************** #SCN = SW0G052 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0002600Q ! 15FEB2012 bensone ! Symptom: Banknet Release 12.Q2 Mandates - Phase 1. ! Problem: None ! Fix: 1. Global 501: Authorization Precision Initiative ! Travel and Entertainment Processing. ! Add new define, sem^t^and^e^d, to identify a T&E ! transaction. ! 2. Global 504: DE 61, Subfield 11 Description Update. ! Modify define, emv^capable^terminal^d, to ensure an ! EMV-capable terminal can be detected correctly. ! 3. Case #01171561 - Deficiency in Account Status Inquiry ! Modify define, pos^crd^vrfy^d, to include an Account ! Status Inquiry transaction. ! Add new define, acct^stat^inq^sub^d, to specify a ! transaction subtype for an Account Status Inquiry. ! Add new define, sem^acct^stat^inq^d, to identify a ! Banknet Account Status Inquiry transaction. ! 4. Miscellaneous Cases #01174527. ! Modify define, sem^ncd^txn^d, to ensure that it ! identifies an ATM transaction. ! Dependency: Apply fixes to APACSDHS, ASPDHG, ASPDHS, BNETATMS, ! BNETG, BNETLIBS, BNETS, COBTKN, DDLPSTKN, HPDHS, ! PSTKNCVS, PSTKNID, RTAUEMVG, RTAUEMVS and SUBTPTBL. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #004134 #ADD 00166v00 define pos^crd^vrfy^d( x ) = ( x.tran.tran^cde = "16" or ( ( x.tran.tran^cde = "10" or x.tran.tran^cde = "13" ) and x.tran.amt^1 = 0F ) ) #; #DELETE 00166v01 #ADD 00176n03 define acct^stat^inq^sub^d = "C009"#; #ADD 00233%01 x.merch^typ = "4814" ) and x.ntl^pos^data.cond^cde.byte[ 0 ] = "1" and ( x.ntl^pos^data.cond^cde.byte[ 9 ] = "0" or x.ntl^pos^data.cond^cde.byte[ 9 ] = "1" ) )#; #DELETE 00233]00/00233&02 #ADD 00233&05 define sem^t^and^e^d( x ) = ( ( x.merch^typ >= "3351" and x.merch^typ <= "3441" ) or ( x.merch^typ >= "3501" and x.merch^typ <= "3999" ) or x.merch^typ = "4411" or x.merch^typ = "7011" or x.merch^typ = "7512" )#; #ADD 00233z00 define sem^acct^stat^inq^d( x ) = ( x.proc^cde.byte[ 0 ] = sem^purchase^d and x.ntl^pos^data.cond^cde.byte[ 6 ] = "8" )#; #ADD 01366r0m ( sem.pos^entry^mde = chip^read or sem.pos^entry^mde = pan^auto^cntctlss^m^chip or sem.pos^entry^mde = chip^read^paypass^mapped or sem.pos^entry^mde = paypass^mapped^cntctlss^chip or sem.pos^entry^mde = bad^mag^and^chip or sem.pos^entry^mde = full^mag^stripe ) or ( sem.pos^entry^mde = elec^commerce and emv^data^bit^d ) )#; #DELETE 01366r0n/01366r0t #ENDSCN = SW0G052 !#CMP2.28 02/15/12 BNETLIBS61144FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61144 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61144 * ******************************************************************************** #SCN = SW0G053 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61144 #NEWVERSION = 61145 #ADD -044190C ! 15FEB2012 bensone ! Symptom: Banknet Release 12.Q2 Mandates - Phase 1. ! Problem: None ! Fix: 1. Global 501: Authorization Precision Initiative ! Travel and Entertainment Processing. ! Added support for de48 se63, Trace ID, using the ! Interchange Compliance token (Id = '20'). ! 2. Global 504: DE 61, Subfield 11 Description Update. ! Added support to indicate the contactless capability ! of a terminal. ! 3. Global 544: Revised Standards for Unique Transactions ! and New Card Acceptor Business Code. ! Added MCC 6540, deleted MCC 6535. ! 4. Europe Region Operations Bulletin No. 9, dated ! 1 September 2011, Revised Standards for Authorization ! Processing Requirements at Unattended Petrol ! Terminals in the Europe Region. ! Allow PIN-based credit card AFD transactions. ! 5. Global Operations Bulletin No. 11, dated ! 1 November 2011, Automated Fuel Dispenser ! Transactions - Summary Reminder of Critical ! Processing Requirements. ! Turn off the bits for DE 35 and DE 45 when sending an ! AFD completion advice message outbound to the network ! 6. Case 1165168 - DE 48 TCC Mismatch for Balance Inquiry ! Allow sending a POS balance inquiry transaction to ! Banknet with a TCC other then 'C'. Ensure the MCC is ! '6010' and the TCC is 'C' for a cash advance trans. ! 7. Case #01171561 - Deficiency in Account Status Inquiry ! Map an account status inquiry request inbound from ! the network to a normal purchase transaction with a ! transaction amount of zero instead of to a BASE24-pos ! card verify transaction. ! The modified define, pos^crd^vrfy^d, could not ! expand properly due to a missing "drop" statement in ! procedure sem^frmt^xrqst^to^pstm^0200. The "use" ! statement was removed and the index register ! identifier was replaced with a local variable. ! 8. Miscellaneous Cases #01169678, #01171136, #01174527. ! Modify data integrity edits on de61 subfield 0 and 10 ! Change format of de 37 for MasterCard transactions. ! Identify only transactions that are performed at ATMs ! as Non-Currency Dispense (NCD). ! procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to APACSDHS, ASPDHG, ASPDHS, BNETATMS, ! BNETG, BNETLIBS, BNETS, COBTKN, DDLPSTKN, HPDHS, ! PSTKNCVS, PSTKNID, RTAUEMVG, RTAUEMVS and SUBTPTBL. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #004134 #ADD z0565700 PSTM^FRMT^0200^TO^XRQST movl( sem.ref^num.byte[ 0 ], pstm.tran^dat.mm, 4 ); #DELETE z0565701/z0565703 PSTM^FRMT^0200^TO^XRQST #ADD z056570J PSTM^FRMT^0200^TO^XRQST call julian^date( yyyddd ); movl( sem.ref^num.byte[ 0 ], yyyddd[ 2 ], 4 ); movl( sem.ref^num.byte[ 4 ], sem.tran^dat^tim.byte[4], 2 ); #ADD 05708N0O PSTM^FRMT^0200^TO^XRQST if pos^cash^adv^d( pstm ) and sem.merch^typ <> manual^cash^disbursement^d then begin return resp^format^error^pos^l; end; #DELETE d0570800/05708N0X PSTM^FRMT^0200^TO^XRQST #DELETE 05964v0f/05964v0r PSTM^FRMT^0200^TO^XRQST #ADD z0596408 PSTM^FRMT^0200^TO^XRQST if sem.merch^typ = "4111" and ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe ) then begin end else #ADD z059640B PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^purchase^d and not manual^entry then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); end else begin movd( sem.ntl^pos^data.cond^cde.byte[ 0 ], "0" ); end #DELETE z059640C/z059640D PSTM^FRMT^0200^TO^XRQST #DELETE 07175v0J/07175v0K PSTM^FRMT^0220^TO^XADV #ADD x0720009 PSTM^FRMT^0220^TO^XADV track2^bit^d := 0; track1^bit^d := 0; #ADD E0840700 PSTM^FRMT^SEM^ADDL^DATA "6540" , "6540" , "R" , #DELETE E0840701 PSTM^FRMT^SEM^ADDL^DATA #ADD 08493c02 PSTM^FRMT^SEM^ADDL^DATA int .compliance^tkn^ptr( ichg^compliance^tkn^def ); #ADD 08493c07 PSTM^FRMT^SEM^ADDL^DATA int tkn^lgth; #ADD 08687v0m PSTM^FRMT^SEM^ADDL^DATA if sem^t^and^e^d( sem ) then begin ! ! travel and entertainment (T&E) transaction ! tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @compliance^tkn^ptr, tkn^lgth ) then begin ! ! Compliance token ('20') found. ! Use it to populate DE 48 SE 63 ! movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movl( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num, compliance^tkn^ptr.trace^id, $len( compliance^tkn^ptr.trace^id ) ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. trc^id^sub^fld^63 ); call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of Compliance token ('20') found end; ! of travel and entertainment (T&E) transaction #DELETE d0945900/d0945909 PSTM^FRMT^SEM^ADDL^DATA #ADD m1006800 SEM^FRMT^AMT^TO^PSTM^AMT if sem.proc^cde.byte[ 0 ] = sem^purchase^d and ( sem.ntl^pos^data.cond^cde.byte[ 6 ] = "8" or sem.ntl^pos^data.cond^cde.byte[ 6 ] = "6" or ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) ) then #DELETE m1006801 SEM^FRMT^AMT^TO^PSTM^AMT #DELETE w1154601 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #REPLACE w1154602 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( sem.ntl^pos^data.cond^cde.byte[ 6 ] = "6" or #ADD d1159400 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" and #DELETE d1159401/d1159402 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #DELETE 12715 /12719 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 12724 /12726c0D SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 12750c0J SEM^FRMT^XRESP^TO^PSTM^0210 if sem^t^and^e^d( sem )then begin movd( compliance^tkn.life^cycle^ind, "O" ); end; #ADD 13739 SEM^FRMT^XRQST^TO^PSTM^0200 int i := 0; #DELETE 13816 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Q1388102 SEM^FRMT^XRQST^TO^PSTM^0200 sem^acct^stat^inq^d( sem ) or #DELETE d1388100 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Q1389300 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^acct^stat^inq^d( sem ) then begin movd( txn^subtyp^tkn.txn^subtyp, acct^stat^inq^sub^d ); end else #ADD 13962c02 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^t^and^e^d( sem )then begin movd( compliance^tkn.life^cycle^ind, "O" ); end; #DELETE 13999 /14000 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 14001 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^t^and^e^d( sem ) and sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin movl( compliance^tkn.trace^id, sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, $len( compliance^tkn.trace^id ) ); movd( compliance^tkn.life^cycle^ind, "I" ); end; #DELETE 14082 /14089 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 15732r00 SEM^FRMT^XRVSL^TO^PSTM^0420 if pos^pre^auth^d( pstm ) then #DELETE Q1573200/d1573209 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0G053 !#CMP2.28 02/15/12 BNETS 6110 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6110 * ******************************************************************************** #SCN = SW0G055 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6110 #NEWVERSION = 6111 #ADD 03821J0L ! 15FEB2012 bensone ! Symptom: Banknet Release 12.Q2 Mandates - Phase 1. ! Problem: None ! Fix: 1. Global 501: Authorization Precision Initiative ! Travel and Entertainment Processing. ! While adding support for de48 se63, Trace ID, using ! the Interchange Compliance Token (Id = '20'), an ! unused structure for the token was found and removed ! in procedure pstm^0200^request. ! 2. Case #01171561 - Deficiency in Account Status Inquiry ! The modified define, pos^crd^vrfy^d, could not ! expand properly due to a missing "drop" statement in ! procedure sem^frmt^xrqst^to^pstm^0200. The "use" ! statement was removed and the index register ! identifier was replaced with a local variable. ! A similar problem was addressed in procedure ! sem^^input^from^station. ! procs modified: pstm^0200^request ! sem^^input^from^station ! Dependency: Apply fixes to APACSDHS, ASPDHG, ASPDHS, BNETATMS, ! BNETG, BNETLIBS, BNETS, COBTKN, DDLPSTKN, HPDHS, ! PSTKNCVS, PSTKNID, RTAUEMVG, RTAUEMVS and SUBTPTBL. ! Run Make. Replace BNETMNWD and BNETUPDT. ! Reference: WO #004134 #DELETE 15181 PSTM^0200^REQUEST #ADD 17127 SEM^^INPUT^FROM^STATION int i; #REPLACE 17184 SEM^^INPUT^FROM^STATION i := -1; #ENDSCN = SW0G055 !#CMP2.28 02/22/12 BNETLIBS61145FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61145 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61145 * ******************************************************************************** #SCN = SW0G079 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61145 #NEWVERSION = 61146 #ADD :044190v ! 22FEB2012 bensone ! Symptom: The PSTM's retl^sic^cde is not being populated on ! receipt of 0420 reversal advices from Banknet. ! Problem: The fix for Case #441250 was incomplete. It worked for ! 0400 reversal requests, but not 0420 reversal advices. ! Fix: Use the value in rvsl.merch^typ to populate the PSTM as ! this field is always set correctly. For a reversal ! request rvsl.merch^typ is populated from the 0400 ! message. For a reversal advice rvsl.merch^typ is ! populate from the 0100 request message in the ILF. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1186510 #ADD 15762C00 SEM^FRMT^XRVSL^TO^PSTM^0420 if rvsl.merch^typ <> [ $len( rvsl.merch^typ ) * [" "]] and rvsl.merch^typ <> [ $len( rvsl.merch^typ ) * ["0"]] then begin move( pstm.retl^sic^cde, rvsl.merch^typ ); end; #DELETE 15762C01/15762C04 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0G079 !#CMP2.28 02/24/12 BNETS 6111 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6111 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6111 * ******************************************************************************** #SCN = SW0G081 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6111 #NEWVERSION = 6112 #ADD 03821K0P ! 24FEB2012 wielerk ! Symptom: PSTM is not reflecting a 0420 message type after an ! external reversal ( 0400 ) or reversal advice ( 0420 ). ! Problem: The internal message was not passed as a parameter to ! the proc that updates the ILF. ! Fix: Modified logic to pass the internal message to the ILF ! update proc if a 0420 is sent into Base24. ! Procs modified: sem^acq^rvsl^rqst^pos ! sem^reversal^advice ! Dependency: Apply fix BNETS and BNETATMS. Run Make. ! Reference: Case #1186133. #REPLACE 18060C01 FRMT^AND^SEND^ACQ^RVSL^RESP pstm, #REPLACE 22341 SEM^REVERSAL^ADVICE int result := 0; #ADD 22418 SEM^REVERSAL^ADVICE if ilf.substate = 0 and ilf.intrn^msg^savearea^lgth > 0 then begin result := util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, base24^msg, rvsl ); end else begin result := util^ilf^updt( fnum, ilf, ilf^lgth, !substate!, ! base24^msg !, rvsl ); #DELETE 22419C00/22419C02 SEM^REVERSAL^ADVICE #ADD 22420C01 SEM^REVERSAL^ADVICE end; if not result then #ENDSCN = SW0G081 !#CMP2.28 03/16/12 BNETS 6112 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6112 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6112 * ******************************************************************************** #SCN = SW0G104 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6112 #NEWVERSION = 6113 #ADD 03821L0C ! 16MAR2012 wielerk ! Symptom: Process does not send 0800 Activate message to second ! station. ! Problem: The code was trying to determine if a type 16 timer was ! already pending. The match was on timer type only which ! did not allow for pending timers from more than 1 ! station. ! Fix: Modified logic to match pending type 16 timers using ! timer type and station index. ! Procs modified: init^actvt ! sem^actvt^response ! Dependency: Apply fix BNETS. Run Make. ! Reference: Case #1190071. #ADD 10098 INIT^ACTVT init( userbuf, " ", wlen( timer^userbuf^def ) ); set( userbuf.sta^x, sta^idx ); #REPLACE 10099 /10099 OFFSET 0 INIT^ACTVT if find^specific^timer( tcb^g, typ^16^actvt^intrvl^l, nmm^actvt^l, userbuf, woffset( userbuf.sta^x ) ) then #ADD 18146 SEM^ACTVT^RESPONSE typ^16^actvt^intrvl^l, nmm^actvt^l, userbuf, woffset( userbuf.nmm.mci^id ) ) ) then #DELETE 18147 SEM^ACTVT^RESPONSE #ENDSCN = SW0G104 !#CMP2.28 04/18/12 BNETDDLS6043 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6043 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6043 * ******************************************************************************** #SCN = SW0G134 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6043 #NEWVERSION = 6044 #ADD 00262q0C * 18APR2012 bensone * Symptom: Banknet Release 12.Q2 Phase 2. * Problem: None * Fix: Add fields to DE 48 addl-data of the SEM from user data * - add two bytes to visa-rsn-cde of ps2000-resp-data * - add new SE 64, transit-pgm-sub-fld-64 * - add new SE 97, visa-prest-prop-ind-sub-fld-97 * Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. * Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. * Reference: WO #004348 #ADD 01147 SEM * or '06' (downgraded) or '15' (incremental auth ! * or reversal) in response. ! * lgth will be '15' in incremental auth request. ! #REPLACE 01156H01 SEM 10 visa-rsn-cde pic x(4). #REPLACE 01157H01 SEM 10 fillrcde pic x(13). #ADD 01157k0b SEM * * Transit Program * Subfield tag = 64 * Contains information about a transit transaction * 06 transit-pgm-sub-fld-64. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 txn-typ-ind pic 99. 10 trnsprt-mde-ind pic 99. * * Prestigious Properties Indicator (Visa only) * Subfield tag = 97 * Contains the Visa prestigious property indicator * 06 visa-prest-prop-ind-sub-fld-97. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9. #REPLACE 01157m0I SEM 04 user-fld pic x(43). #ENDSCN = SW0G134 !#CMP2.28 04/18/12 BNETG 6077 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6077 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6077 * ******************************************************************************** #SCN = SW0G135 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0002610Q ! 18APR2012 bensone ! Symptom: Banknet Release 12.Q2 Phase 2. ! Problem: None ! Fix: 1. Global 101: Visa Credit Gateway Enhancements ! Add values "F", "K", "M", "S", "U" and "W" to define ! ps2000^valid^d. ! 2. Global 535: Transit Transaction Enhancements ! Source in transit^txn^tkn for the Transit ! Transaction token (Id = 'F3'). ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #004348 #ADD 00026O3D ?nolist, source =basrc_baddltal( ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? e^com^addl^data^tkn ? ichg^compliance^atm^tkn ? instl^pmnt^data^tkn ? ncdicf ? ncd^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? ) ?list ! at^flg1^tkn ! ! atm ! ! atmicf ! ! atmicfe_ ! ! at50^tkn ! ! blk^size^constants ! ! e^com^addl^data^tkn ! ! ichg^compliance^atm^tkn ! ! instl^pmnt^data^tkn ! ! ncdicf ! ! ncd^tkn ! ! p2p^txn2^tkn ! ! pan^mapping^tkn ! ! pinc^tkn ! ! pos^bal^tkn ! ! pos^data2^tkn ! ! stm ! ! stm_ ! ! surcharge^data^tkn ! ! transit^txn^tkn ! ! ) ! #DELETE 00026v0S/00026v0v #ADD 00185K05 x.addl^data.info.ps2000^rqst^data.ind = "F" or x.addl^data.info.ps2000^rqst^data.ind = "K" or x.addl^data.info.ps2000^rqst^data.ind = "M" or x.addl^data.info.ps2000^rqst^data.ind = "S" or x.addl^data.info.ps2000^rqst^data.ind = "U" or x.addl^data.info.ps2000^rqst^data.ind = "W" or #DELETE 00185K06 #ENDSCN = SW0G135 !#CMP2.28 04/18/12 BNETLIBS61146FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61146 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61146 * ******************************************************************************** #SCN = SW0G136 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61146 #NEWVERSION = 61147 #ADD ;044190E ! 18APR2012 bensone ! Symptom: Banknet Release 12.Q2 Phase 2. ! Problem: None ! Fix: 1. Global 101: Visa Credit Gateway Enhancements ! Add the ability to send DE 48 SE 90, SE 91, SE 96 ! and SE 97 from the Visa Payment Service 2000 token ! (Id = "17") when sending a Visa request message to ! Banknet. ! Add the ability to receive 2, 6 and 15 bytes in ! DE 48 SE 91 of 0110 response messages and populate ! the Visa Payment Service 2000 token (Id = "17"). ! 2. Global 520: Enhancement to Support Zero Amount for ! AFD Transactions in Europe ! Allow for a zero transaction amount when processing ! AFD completion advice messages received from Banknet. ! 3. Global 535: Transit Transaction Enhancements ! Map data from the Transit Transaction token ! (Id = 'F3') to DE 48 SE 64 in 0100 and 0120 messages ! sent to Banknet. ! Map DE 48 SE 64 in 0100 and 0120 messages from ! Banknet to the Transit Transaction token (Id = 'F3'). ! Procs modified: pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #004348 #DELETE 08332 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08333 PSTM^FRMT^SEM^ADDL^DATA #ADD 08457 PSTM^FRMT^SEM^ADDL^DATA tkn^id[0:1]; #DELETE 08458 PSTM^FRMT^SEM^ADDL^DATA #ADD 08495 PSTM^FRMT^SEM^ADDL^DATA int found^ps2000^tkn := false; int .ps2000^tkn( ps2000^tkn^def ); int ps2000^tkn^lgth; int .transit^txn^tkn( transit^txn^tkn^def ); int transit^txn^tkn^lgth; #ADD z0863100 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g then #DELETE z0863101 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08635 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08637 /08663 PSTM^FRMT^SEM^ADDL^DATA #ADD 08714 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g and sem.typ = sem^auth^request^d then #DELETE 08715 PSTM^FRMT^SEM^ADDL^DATA #ADD d0871600 PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 then begin ! ! Visa Payment Service 2000 token (Id = '17') ! tkn^id ':=' ps2000^tkn^id^d; found^ps2000^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps2000^tkn, ps2000^tkn^lgth ); end; ! ! Process DE 48 SE 90, initialize the length to spaces ! movd( sem.addl^data.info.ps2000^rqst^data.lgth, " " ); if found^ps2000^tkn and ( ps2000^tkn.srv^ind = "Y" or ps2000^tkn.srv^ind = "R" or ps2000^tkn.srv^ind = "I" or ps2000^tkn.srv^ind = "P" ) then begin movd( sem.addl^data.info.ps2000^rqst^data.tag, "90" ); movd( sem.addl^data.info.ps2000^rqst^data.lgth, "01" ); move( sem.addl^data.info.ps2000^rqst^data.ind, ps2000^tkn.srv^ind ); end; if not found^ps2000^tkn and complete^flg then begin movd( sem.addl^data.info.ps2000^rqst^data.tag, "90" ); movd( sem.addl^data.info.ps2000^rqst^data.lgth, "01" ); movd( sem.addl^data.info.ps2000^rqst^data.ind, "Y" ); end; if ascii^integer^( sem.addl^data.info.ps2000^rqst^data.lgth, sub^lgth ) then begin ! ! If data has been added to DE 48 SE 90, ! then adjust the length of DE 48 ! call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! ! Process DE 48 SE 91, initialize the length to spaces ! movd( sem.addl^data.info.ps2000^resp^data.lgth, " " ); if found^ps2000^tkn and ps2000^tkn.srv^ind = "I" and ps2000^tkn.tran^id <> blanks for $len( ps2000^tkn.tran^id ) then begin movd( sem.addl^data.info.ps2000^resp^data.tag, "91" ); movd( sem.addl^data.info.ps2000^resp^data.lgth, "15" ); move( sem.addl^data.info.ps2000^resp^data.resp^data. tran^id, ps2000^tkn.tran^id ); end; if ascii^integer^( sem.addl^data.info.ps2000^resp^data.lgth, sub^lgth ) then begin ! ! If data has been added to DE 48 SE 91, ! then adjust the length of DE 48 ! call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! ! Process DE 48 SE 96, initialize the length to spaces ! movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. lgth, " " ); if found^ps2000^tkn and $alpha( ps2000^tkn.mkt^spfc^data^id ) then begin movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. tag, "96" ); movd( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. lgth, "01" ); move( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. tag^data, ps2000^tkn.mkt^spfc^data^id ); end; if not found^ps2000^tkn and #REPLACE d0871601 PSTM^FRMT^SEM^ADDL^DATA found^txn^sub^tkn and #DELETE 08737 /08749 PSTM^FRMT^SEM^ADDL^DATA #ADD 08751 PSTM^FRMT^SEM^ADDL^DATA if ascii^integer^( sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96.lgth, sub^lgth ) then begin ! ! If data has been added to DE 48 SE 96, ! then adjust the length of DE 48 ! call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! ! Process DE 48 SE 97, initialize the length to spaces ! movd( sem.addl^data.info.visa^prest^prop^ind^sub^fld^97. lgth, " " ); if found^ps2000^tkn and ps2000^tkn.mkt^spfc^data^id = "H" and ps2000^tkn.prstgs^prop^ind <> " " then begin movd( sem.addl^data.info.visa^prest^prop^ind^sub^fld^97. tag, "97" ); movd( sem.addl^data.info.visa^prest^prop^ind^sub^fld^97. lgth, "01" ); move( sem.addl^data.info.visa^prest^prop^ind^sub^fld^97. tag^data, ps2000^tkn.prstgs^prop^ind ); end; if ascii^integer^( sem.addl^data.info. visa^prest^prop^ind^sub^fld^97.lgth, sub^lgth ) then begin ! ! If data has been added to DE 48 SE 97, ! then adjust the length of DE 48 ! call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; #REPLACE 08753 PSTM^FRMT^SEM^ADDL^DATA end; ! of if visa_tran_g and sem.typ = 0100 ! #ADD 09459I00 PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 then begin ! ! Transit Transaction token (Id = 'F3') ! tkn^id ':=' transit^txn^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @transit^txn^tkn, transit^txn^tkn^lgth ) then begin ! ! Process DE 48 SE 64 ! movd( sem.addl^data.info.transit^pgm^sub^fld^64.tag, "64" ); movd( sem.addl^data.info.transit^pgm^sub^fld^64.lgth, "04" ); if transit^txn^tkn.txn^typ^ind >= "01" and transit^txn^tkn.txn^typ^ind <= "04" then begin move( sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.txn^typ^ind, transit^txn^tkn.txn^typ^ind ); end else begin movd( sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.txn^typ^ind, "05" ); end; if transit^txn^tkn.trnsprt^mde^ind >= "01" and transit^txn^tkn.trnsprt^mde^ind <= "22" then begin move( sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.trnsprt^mde^ind, transit^txn^tkn.trnsprt^mde^ind ); end else begin movd( sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.trnsprt^mde^ind, "00" ); end; ! ! Adjust the length of DE 48 ! for the data added to DE 48 SE 94 ! call ascii^integer^( sem.addl^data.info. transit^pgm^sub^fld^64. lgth, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of get Transit Transaction token end; ! of base24^rel^g >= 5 #ADD 10068N0D SEM^FRMT^AMT^TO^PSTM^AMT if sem.typ = sem^auth^advice^d and sem^preauth^match^d( sem ) and not sem^fncl^txn^d( sem ) then begin set ( pstm.tran.amt^1, 0f ); return true; end; #ADD d115940A SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( sem.advice^cde.reason^cde = "191" or ( sem.advice^cde.reason^cde = "190" and util^maestro( sem.banknet^data.ntwk^id^cde ) ) ) then #DELETE d115940B SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #REPLACE 12026 SEM^FRMT^XRESP^TO^PSTM^0210 ','" SEQ NUM: \\\\\\\\\\\\, ERR: # ") #REPLACE 12581 SEM^FRMT^XRESP^TO^PSTM^0210 call abend^( 3170 ); #REPLACE 12808 SEM^FRMT^XRESP^TO^PSTM^0210 call abend^( 1863 ); #ADD 13248 SEM^FRMT^XRESP^TO^PSTM^0210 else if sem.addl^data.info.ps2000^rqst^data.ind = "I" then begin movl( ps2000^get^tkn.tran^id, sem.addl^data.info. ps2000^resp^data.resp^data.tran^id, 15 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "06" then begin movl( ps2000^get^tkn.tran^id, sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); movl( ps2000^get^tkn.valid^cde, sem.addl^data.info.ps2000^resp^data. reas^code.visa^rsn^cde, 4 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "02" then begin movl( ps2000^get^tkn.tran^id, sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); end #ADD 13273 SEM^FRMT^XRESP^TO^PSTM^0210 else if sem.addl^data.info.ps2000^rqst^data.ind = "I" then begin movl( ps2000^tkn.tran^id, sem.addl^data.info. ps2000^resp^data.resp^data.tran^id, 15 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "06" then begin movl( ps2000^tkn.tran^id, sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); movl( ps2000^tkn.valid^cde, sem.addl^data.info.ps2000^resp^data. reas^code.visa^rsn^cde, 4 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "02" then begin movl( ps2000^tkn.tran^id, sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); end #REPLACE 13304 SEM^FRMT^XRESP^TO^PSTM^0210 call abend^( 0167 ); #ADD 13327 SEM^FRMT^XRESP^TO^PSTM^0210 else if sem.addl^data.info.ps2000^rqst^data.ind = "I" then begin movl( pstm.addr^flds.addr.byte[1], sem.addl^data.info. ps2000^resp^data.resp^data.tran^id, 15 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "06" then begin movl( pstm.addr^flds.addr.byte[1], sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); movl( pstm.addr^flds.addr.byte[16], sem.addl^data.info.ps2000^resp^data. reas^code.visa^rsn^cde, 4 ); end else if sem.addl^data.info.ps2000^resp^data. lgth = "02" then begin movl( pstm.addr^flds.addr.byte[1], sem.addl^data.info.ps2000^resp^data. reas^code.reason^cde, 2 ); end #ADD 13709 SEM^FRMT^XRQST^TO^PSTM^0200 struct .transit^txn^tkn( transit^txn^tkn^def ); #ADD 14229 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.transit^pgm^sub^fld^64.tag= "64" then begin ! ! Add Transit Transaction token (Id = 'F3') ! tkn^id ':=' transit^txn^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, transit^txn^tkn ); move( transit^txn^tkn.txn^typ^ind, sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.txn^typ^ind ); move( transit^txn^tkn.trnsprt^mde^ind, sem.addl^data.info.transit^pgm^sub^fld^64. tag^data.trnsprt^mde^ind ); tkn^add^lgth := $len( transit^txn^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, transit^txn^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1749, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1751, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1751 ); end; end; ! of if tkn^result end; ! of DE 48 SE 64 #ADD 15406N00 SEM^FRMT^XRQST^TO^PSTM^0200 if not sem^fncl^txn^d( sem ) then #DELETE 15406N01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 17231 UTIL^COLLAPSE^SEM ! ! ! Transit Program ! ! ! if hdr.addl^data.info. transit^pgm^sub^fld^64.tag = "64" then begin call ascii^integer( hdr.addl^data.info. transit^pgm^sub^fld^64.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. transit^pgm^sub^fld^64.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 17615 UTIL^COLLAPSE^SEM if hdr.addl^data.info. visa^prest^prop^ind^sub^fld^97. tag = "97" then begin call ascii^integer( hdr.addl^data.info. visa^prest^prop^ind^sub^fld^97.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. visa^prest^prop^ind^sub^fld^97.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if hdr...tag = "97" #ADD 18560 UTIL^EXPAND^SEM if ptr[ length ] = "64" then begin ! ! ! Transit Program ! ! ! movl( sem^ptr.addl^data.info. transit^pgm^sub^fld^64.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 18781 UTIL^EXPAND^SEM if ptr[ length ] = "97" then begin movl( sem^ptr.addl^data.info. visa^prest^prop^ind^sub^fld^97. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ENDSCN = SW0G136 !#CMP2.28 04/18/12 BNETS 6113 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6113 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6113 * ******************************************************************************** #SCN = SW0G139 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6113 #NEWVERSION = 6114 #ADD 03821M0E ! 18APR2012 bensone ! Symptom: Banknet Release 12.Q2 Phase 2. ! Problem: None ! Fix: 1. Global 520: Enhancement to Support Zero Amount for ! AFD Transactions in Europe ! Allow for a zero transaction amount when processing ! AFD completion advice messages received from Banknet. ! Proc modified: sem^advice^pos ! Dependency: Apply fixes to BNETDDLS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETLOGM, BNETMNWD, and BNETUPDT. ! Reference: WO #004348 #ADD 18584 SEM^ADVICE^POS ( pos^pre^auth^d( ilf.pos ) or pos^preauth^comp^d( ilf.pos ) ) then #DELETE 18585 SEM^ADVICE^POS #ADD 18587F06 SEM^ADVICE^POS if sem^fncl^txn^d( sem ) then begin ilf^found := false; end; #DELETE 18587F07 SEM^ADVICE^POS #ADD 18617 SEM^ADVICE^POS ( not sem^preauth^match^d( sem ) and not sem^fncl^txn^d( sem ) ) or #DELETE 18618 SEM^ADVICE^POS #ENDSCN = SW0G139 !#CMP2.28 04/30/12 BNETS 6114 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6114 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6114 * ******************************************************************************** #SCN = SW0G150 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6114 #NEWVERSION = 6115 #ADD 03821N0C ! 30APR2012 wielerk ! Symptom: Process configured as Acquirer only is logged off after ! warmboot. ! Problem: The code saves BNIIF data from BNET Globals in a ! temporary structure. When determining if the saved data ! needs to be restored, some fields from the Temp ! structure need be interrogated as Global fields have ! been reset. ! Fix: Modified logic to restore certain fields from the Temp ! structure to allow comparison between new BNIIF and ! previous BNIIF. ! Proc modified: cmd^warmboot ! Dependency: Apply fix BNETS. Run Make. ! Reference: Case #1197605. #REPLACE 08423 CMD^WARMBOOT bnet^g.bniif^sav^ctr^g := temp.bnet^g.bniif^sav^ctr^g; #ADD 08425 CMD^WARMBOOT bnet^g.bniif^sav^seg^id^g := temp.bnet^g.bniif^sav^seg^id^g; bnet^g.bniif^sav^tbl^g := temp.bnet^g.bniif^sav^tbl^g; #ENDSCN = SW0G150 !#CMP2.28 06/08/12 BNETLIBS61147FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61147 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61147 * ******************************************************************************** #SCN = SW0G189 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61147 #NEWVERSION = 61148 #ADD <044190V ! 08JUN2012 wielerk ! Symptom: When a 0410 is received for an AFD transaction, the ILF ! search fails. ! Problem: The format of the ILF key has been modified for the AFD ! enhancement and de-127 ( private data ) was not sent in ! the 0400 to allow the match using the new format. ! Fix: Modified logic to send de-127 with ILF key content in ! the 0400 for AFD reversals. ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1203577. #ADD 07606 PSTM^FRMT^0420^TO^ACQ^XRVSL if ( ( pos^pre^auth^d( pstm ) or pos^preauth^comp^d( pstm ) ) and pos^preauth^match^d( pstm ) ) then begin init( sem.private^data.info, " ", $len( sem.private^data.info ) ); move( sem.private^data.info, pstm.term^fiid ); mov^( sem.private^data.info.byte[ 4 ], pstm.retl^sic^cde ); mov^( sem.private^data.info.byte[ 8 ], pstm.tran.tran^cde.tc ); mov^( sem.private^data.info.byte[ 10 ], pstm.pre^auth^seq^num ); end; #ENDSCN = SW0G189 !#CMP2.28 06/18/12 BNETS 6115 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6115 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6115 * ******************************************************************************** #SCN = SW0G192 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6115 #NEWVERSION = 6116 #ADD 03821O0F ! 18JUN2012 wielerk ! Symptom: When a 0130 is received for an AFD transaction that was ! suspended and not sent from the SAF and de-39 ( resp ! code ) = "94" ( duplicate detected ) the 0130 is dropped ! and no 0210 is returned to the device. ! Problem: The original intent was to not return a duplicate 0210 ! to Base24. However, since the logic in question can ! only be executed when a suspended message has been ! located it has been determined to allow the 0130 to ! format a PSTM 0210 and send the message to Base24. ! Fix: Modified logic to remove the edit that dropped a 0130 ! with de-39 = "94". Also modified logic to force such a ! 0130 to format a 0210 and not approve blind or add a ! SAF record. ! Proc modified: sem^advice^response^compl ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1206789. #DELETE 18953 /18956 SUB^APPRV^BLIND #REPLACE 18958 /18958 OFFSET 0 SUB^APPRV^BLIND if not sem^approved^d( sem ) and sem.resp^cde <> resp^dup^detect^d then #REPLACE 18966J03 SUB^APPRV^BLIND end; #DELETE 18969 SUB^APPRV^BLIND #DELETE 18971 /18981 SUB^APPRV^BLIND #ADD 19007 SUB^APPRV^BLIND if not sem^approved^d( sem ) then begin call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, xadvc, $len( sem^def ), substate ); return; end; #ENDSCN = SW0G192 !#CMP2.28 07/11/12 BNETLIBS61148FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61148 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61148 * ******************************************************************************** #SCN = SW0G211 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61148 #NEWVERSION = 61149 #ADD =044190C ! 11JUL2012 wielerk ! Symptom: When a 0220 is processed for an AFD transaction, the ! contents of de-61 ( POS data ) is incorrect. ! Problem: The value of de-61 is formatted correctly when the PSTM ! 0220 is received, but is overlaid with the value from ! the request logged to the ILF. ! Fix: Modified logic to save the value from de-61 prior to ! using the ILF image for the SEM. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1212587. #REPLACE :0717500 PSTM^FRMT^0220^TO^XADV move( orig^sem.ntl^pos^data, sem.ntl^pos^data ); #ENDSCN = SW0G211 !#CMP2.28 07/25/12 BNETLIBS61149FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61149 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61149 * ******************************************************************************** #SCN = SW0G218 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61149 #NEWVERSION = 61150 #ADD >044190C ! 25JUL2012 wielerk ! Symptom: The interface only assigns a pre-auth tran code for ! AFD transactions. ! Problem: The interface only sets PSTM tran code = "11" if de-18 ! ( merch typ ) = "5542". It is possible for other SICs ! to send transactions that need to be pre-auth. ! Fix: Modified logic to identify pre-auth transactions that ! are not AFD. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1215168. #REPLACE Q1159401 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if ( sem^preauth^match^d( sem ) and #REPLACE d1159405/d1159408 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) ) or ( sem.proc^cde = sem^purchase^d and ( sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" or sem.ntl^pos^data.days^hld <> "00" ) ) then #ENDSCN = SW0G218 !#CMP2.28 08/07/12 BNETLIBS61150FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61150 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61150 * ******************************************************************************** #SCN = SW0G226 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61150 #NEWVERSION = 61151 #ADD |044190C ! 07AUG2012 wielerk ! Symptom: The interface sets de-48.63 ( addl data.trace id ) ! using SEM components when formatting a 0400. ! Problem: The interface was using de-63.1( banknet data.ntwk id ) ! de-63.2( banknet data.ref num ) and de-15 ( setl dat ) ! from the SEM logged to the ILF to format de-48.63 in ! the SEM 0400 and not using de-48.63 from the ILF. ! Fix: Modified logic to use de-48.63 from the ILF. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! sem^frmt^xrqst^to^sem^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1217230. #ADD 07474 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info.trc^id^sub^fld^63.tag <> [ $len( sem.addl^data.info.trc^id^sub^fld^63.tag ) * [" "] ] then begin ! ! use contents of ILF de-48.63 if available ! move( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, orig^sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num ); move( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, orig^sem.addl^data.info.trc^id^sub^fld^63.dat^setl ); end else begin movl( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, sem.banknet^data.ntwk^id^cde, $len( sem.banknet^data.ntwk^id^cde ) ); movl( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num.byte[ 3 ], sem.banknet^data.ref^num, 6 ); movl( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.setl^dat, $len( sem.setl^dat ) ); end; #DELETE 07475 /07485 PSTM^FRMT^0420^TO^ACQ^XRVSL #REPLACE 15618v1m SEM^FRMT^XRQST^TO^SEM^XRVSL ! Set Subelement 63-Trace ID ! #ADD 15618v1q SEM^FRMT^XRQST^TO^SEM^XRVSL if sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin move( rvsl.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num ); move( rvsl.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.addl^data.info.trc^id^sub^fld^63.dat^setl ); end else begin movl( rvsl.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, sem.banknet^data.ntwk^id^cde, $len( sem.banknet^data.ntwk^id^cde ) ); movl( rvsl.addl^data.info.trc^id^sub^fld^63. bnet^ref^num.byte[ 3 ], sem.banknet^data.ref^num, 6 ); movl( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.setl^dat, $len( sem.setl^dat ) ); end; #REPLACE 15618v1w SEM^FRMT^XRQST^TO^SEM^XRVSL ! Subelement 77-Payment Transaction Type Indicator ! #REPLACE 15618v29 SEM^FRMT^XRQST^TO^SEM^XRVSL ! Subelement 95-MasterCard Promotion Code ! #REPLACE 15618v2O SEM^FRMT^XRQST^TO^SEM^XRVSL ! Set DE 90-Original Data Elements ! #ENDSCN = SW0G226 !#CMP2.28 08/15/12 BNETDDLS6044 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6044 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6044 * ******************************************************************************** #SCN = SW0G228 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6044 #NEWVERSION = 6045 #ADD 00262r0B * 15AUG2012 bensone * Symptom: Banknet Release 12.Q4 Mandates * Problem: None * Fix: Add fields to DE 48 addl-data of the SEM using the * space available in user-fld. * - add new SE 26, ppol-pgm-sub-fld-26 * - add new SE 18, srvc-params-sub-fld-18 * Dependency: Apply fixes to AUTHLIBS, BAUTILS, BNETDDLS, BNETG, * BNETLIBS, BNETS, COBTKN, DDLFCPF, DDLIDF, DDLPSTKN, * OKLIBTS, PSTKNCVS, PSTKNID, RQCPFS, RQIDFS, RTAUEMVG, * RTAUEMVS, RTAUG, SCRNCPF, SCRNIDF, SUBTPTBL, SVCPFS * and SVIDFS. * Run Make. * Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD, and * BNETUPDT. * Reference: WO #004536 #ADD 01157r0P SEM * * PPOL Program Data * Subfield tag = 26 * Contains PayPass Online program information * 06 ppol-pgm-sub-fld-26. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 ppol-id pic x. 10 user-fld-aci pic x(4). * * Service Parameters * Subfield tag = 18 * Contains the service parameters of the transaction * 06 srvc-params-sub-fld-18. 08 tag pic 99. 08 lgth pic 99. 08 canada-dmstc-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. 08 user-fld-aci pic x(10). #REPLACE 01157r0R SEM 04 user-fld pic x(15). #ENDSCN = SW0G228 !#CMP2.28 08/15/12 BNETG 6078 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6078 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6078 * ******************************************************************************** #SCN = SW0G229 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0002620D ! 15AUG2012 bensone ! Symptom: Banknet Release 12.Q4 Mandates ! Problem: None ! Fix: Source in dgtl^wallet^tkn for the Digital Wallet token ! (Id = 'F4'). Add new define, moneysend^pmnt^sub^d, for ! MoneySend Payment. Add a new referential structure, ! bnet^array^def, to hold the values of global string ! arrays. Add string canada^dmc^card^type^g and structure ! failed^cvm^lmt^tbl^g to bnet^array^def to hold values ! for the new LCONF parameters ! SW-BNET-CANADA-DMC-CARD-TYPE and ! SW-BNET-FAILED-CVM-LIMIT-999 respectively. Declare a ! global structure bnet^array^g using bnet^array^def. ! Add a structure using bnet^array^def to the referential ! structure GLOBAL^DEF. ! Dependency: Apply fixes to AUTHLIBS, BAUTILS, BNETDDLS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLFCPF, DDLIDF, DDLPSTKN, ! OKLIBTS, PSTKNCVS, PSTKNID, RQCPFS, RQIDFS, RTAUEMVG, ! RTAUEMVS, RTAUG, SCRNCPF, SCRNIDF, SUBTPTBL, SVCPFS ! and SVIDFS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD, and ! BNETUPDT. ! Reference: WO #004536 #ADD 00026\0H !# ALL NEW STRING ARRAYS MUST BE ADDED TO THE BNET^ARRAY^DEF # !# STRUCTURE. ALL OTHER NEW GLOBALS MUST BE ADDED TO THE # !# BNET^GLBL^DEF STRUCTURE. # #DELETE 00026\0I/00026\0J #ADD 0002620L ? dgtl^wallet^tkn #ADD 0002620h ! dgtl^wallet^tkn #ADD 00176102 define moneysend^pmnt^sub^d = "C010"#; #ADD 00435\07 !# ALL NEW STRING ARRAYS MUST BE ADDED TO THE BNET^ARRAY^DEF #! !# STRUCTURE. ALL OTHER NEW GLOBALS MUST BE ADDED TO THE #! !# BNET^GLBL^DEF STRUCTURE. #! #DELETE 00435\08 #ADD 00435:0H ! ! ! Note: The init^bnet^g proc in BNETS will also need to be ! ! updated with any new string array added to BNET^ARRAY^DEF ! ! to initialize it to the default value. ! ! ! struct bnet^array^def( * ); begin string canada^dmc^card^type^g[0:1]; struct failed^cvm^lmt^tbl^g[ 0:9 ]; begin struct crncy^cde; begin string byte [0:2]; end; struct crncy^amt; begin string byte [0:11]; end; end; end; #ADD 00471N03 struct .bnet^array^g( bnet^array^def ); #ADD 0136600C struct bnet^array^g( bnet^array^def ); #ENDSCN = SW0G229 !#CMP2.28 08/15/12 BNETLIBS61151FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61151 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61151 * ******************************************************************************** #SCN = SW0G230 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61151 #NEWVERSION = 61152 #ADD @044190D ! 15AUG2012 bensone ! Symptom: Banknet Release 12.Q4 Mandates ! Problem: None ! Fix: 1. Global 510: Elimination and Revision of Certain MCCs. ! Remove code that processed MCC 4829, 6529, 6530, ! 6534 and 7511. ! 2. Global 550: Identification of PayPass Online ! Transactions. ! Map the PPOL Identifier from the Digital Wallet token ! (Id = 'F4') to DE 48 SE 26 in messages sent to ! Banknet. ! Map the PPOL Identifier from DE 48 SE 26 in messages ! sent from Banknet to the Digital Wallet token ! (Id = 'F4'). ! 3. Canada 101: Debit MasterCard Merchant Acceptance. ! Set the Canada Domestic Indicator to 'Y' in DE 48 ! SE 18 subfield 1 in messages sent to Banknet when ! processing a request message from a Canadian merchant ! (card acceptor country code = '124') and the card ! type in the message matches the card type in the new ! LCONF parameter SW-BNET-CANADA-DMC-CARD-TYPE. ! The interface will map a MasterCard response code of ! '81' (domestic debit transaction not allowed) to a ! BASE24-pos response code of '105' (card not ! supported). ! 4. Revised Standards for Maestro Parking and Tollway ! Chip Transactions. ! Set the new FAILED-CVM-ALWD field in the POS Data1 ! token to '1' when processing a Maestro chip request ! from MasterCard with MCC (DE 18) value "4784". ! Set the new FAILED-CVM-ALWD field in the POS Data1 ! token to '1' when processing a Maestro chip request ! from MasterCard with MCC (DE 18) value "7523" and ! the transaction amount (DE 6) does not exceed the ! failed CVM limit (as configured in the new LCONF ! parameter SW-BNET-FAILED-CVM-LIMIT-999) for the ! cardholder billing currency code (DE 51). ! The POS Router/Auth EMV extension module will ! retrieve the POS Data1 token. If the new ! FAILED-CVM-ALWD field is set to '1', then the value ! of byte 3 bit 8 (cardholder verification was/was not ! successful) in the Terminal Verification Results ! (TVR) will be ignored, i.e. the transaction will not ! be declined if the bit is set. ! 5. MoneySend Processing Review. ! Support MasterCard MoneySend Funding Transactions, ! regardless of the value in LCONF parameter ! PROCESS-MONEYSEND-TXN. Set a new Transaction Subtype ! value ('C010') in the Transaction Subtype token ! (Id = 'BM') when processing a MasterCard MoneySend ! Payment transaction. ! 6. Case 1194721 - the interface will decline a ! request transaction if an acquirer BNIIF record can ! not be found. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to AUTHLIBS, BAUTILS, BNETDDLS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLFCPF, DDLIDF, DDLPSTKN, ! OKLIBTS, PSTKNCVS, PSTKNID, RQCPFS, RQIDFS, RTAUEMVG, ! RTAUEMVS, RTAUG, SCRNCPF, SCRNIDF, SUBTPTBL, SVCPFS ! and SVIDFS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD, and ! BNETUPDT. ! Reference: WO #004536 #ADD 05708x0I PSTM^FRMT^0200^TO^XRQST sem.merch^typ = "6533" then #DELETE 05708x0J/05708x0L PSTM^FRMT^0200^TO^XRQST #DELETE 08403 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08407 PSTM^FRMT^SEM^ADDL^DATA #DELETE 08415 PSTM^FRMT^SEM^ADDL^DATA #ADD 08493A04 PSTM^FRMT^SEM^ADDL^DATA int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #REPLACE <094590o PSTM^FRMT^SEM^ADDL^DATA ! for the data added to DE 48 SE 64 ! #ADD <094590z PSTM^FRMT^SEM^ADDL^DATA ! ! Digital Wallet token (Id = 'F4') ! tkn^id ':=' dgtl^wallet^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, tkn^lgth ) then begin ! ! Process DE 48 SE 26 ! movd( sem.addl^data.info.ppol^pgm^sub^fld^26.tag, "26" ); movd( sem.addl^data.info.ppol^pgm^sub^fld^26.lgth, "01" ); move( sem.addl^data.info.ppol^pgm^sub^fld^26. tag^data.ppol^id, dgtl^wallet^tkn.ppol.id ); ! ! Adjust the length of DE 48 ! for the data added to DE 48 SE 26 ! call ascii^integer^( sem.addl^data.info. ppol^pgm^sub^fld^26. lgth, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of Digital Wallet token (Id = 'F4') #ADD <0945911 PSTM^FRMT^SEM^ADDL^DATA if pstm.term^cntry^cde = "CA" and pstm.rte.srv = bnet^array^g.canada^dmc^card^type^g for $len( pstm.rte.srv ) then begin movd( sem.addl^data.info.srvc^params^sub^fld^18.tag, "18" ); movd( sem.addl^data.info.srvc^params^sub^fld^18.lgth, "05" ); movd( sem.addl^data.info.srvc^params^sub^fld^18. canada^dmstc^ind.tag, "01" ); movd( sem.addl^data.info.srvc^params^sub^fld^18. canada^dmstc^ind.lgth, "01" ); movd( sem.addl^data.info.srvc^params^sub^fld^18. canada^dmstc^ind.tag^data, "Y" ); lgth := lgth + 9; end; #REPLACE 11620N01 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 37, #ADD 11662 SEM^FRMT^RESP^CDE^TO^PSTM "81",! Domestic dbt tran not allwd ! "105",! Card not supported ! #ADD 13704 SEM^FRMT^XRQST^TO^PSTM^0200 struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD Q1389305 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^d( sem ) then begin movd( txn^subtyp^tkn.txn^subtyp, moneysend^pmnt^sub^d ); end else #ADD <142291D SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ppol^pgm^sub^fld^26.tag= "26" then begin ! ! Add Digital Wallet token (Id = 'F4') ! tkn^id ':=' dgtl^wallet^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, dgtl^wallet^tkn ); ! !Set Wallet Flag = 01 - MasterCard PayPass Online ! movd( dgtl^wallet^tkn.wallet^ind^flg, "01" ); move( dgtl^wallet^tkn.ppol.id, sem.addl^data.info.ppol^pgm^sub^fld^26. tag^data.ppol^id ); tkn^add^lgth := $len( dgtl^wallet^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dgtl^wallet^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1752, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1753, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1753 ); end; end; ! of if tkn^result end; ! of DE 48 SE 26 #ADD 14246o06 SEM^FRMT^XRQST^TO^PSTM^0200 if util^maestro( sem.banknet^data.ntwk^id^cde ) and emv^data^bit^d and ( sem.merch^typ = "4784" or sem.merch^typ = "7523" ) then begin ! ! Maestro Parking and Tollway Chip Transaction ! Do not decline these transactions for the sole reason ! that auth message indicates "CVM not successful". ! if sem.merch^typ = "4784" then begin movd( pos^data1^tkn.failed^cvm^alwd, "1" ); add^pos^data1 := true; end else begin i := 0; while ( i < $occurs( bnet^array^g. failed^cvm^lmt^tbl^g ) and bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^cde <> [ " " ] ) do begin if bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^cde = sem.iss^crncy^cde for 3 and bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^amt >= sem.crd^iss^amt for 12 then begin ! ! does not exceed the failed CVM limit ! movd( pos^data1^tkn.failed^cvm^alwd, "1" ); add^pos^data1 := true; set( i, $occurs( bnet^array^g. failed^cvm^lmt^tbl^g ) ); end; increment^d( i ); end; end; end; #DELETE i1517500/i1517506 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD R170230T UTIL^COLLAPSE^SEM ! ! ! Service Parameters ! ! ! if hdr.addl^data.info. srvc^params^sub^fld^18.tag = "18" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. srvc^params^sub^fld^18.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Canada Domestic Indicator ! ! ! if hdr.addl^data.info. srvc^params^sub^fld^18. canada^dmstc^ind.tag = "01" then begin call ascii^integer( hdr.addl^data.info. srvc^params^sub^fld^18. canada^dmstc^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. srvc^params^sub^fld^18. canada^dmstc^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! end; ! of if hdr...tag = "18" #ADD m170230U UTIL^COLLAPSE^SEM ! ! ! Digital Wallet ! ! ! if hdr.addl^data.info. ppol^pgm^sub^fld^26.tag = "26" then begin call ascii^integer( hdr.addl^data.info. ppol^pgm^sub^fld^26.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. ppol^pgm^sub^fld^26.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD Q1850209 UTIL^EXPAND^SEM else if ptr[ length ] = "18" then begin ! ! ! Service Parameters ! ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. srvc^params^sub^fld^18.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! ! Move Subfield 1-Account Number Indicator! ! ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. srvc^params^sub^fld^18. canada^dmstc^ind.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; length := length + tag^length + 4; end #ADD m1850209 UTIL^EXPAND^SEM else if ptr[ length ] = "26" then begin ! ! ! Transit Program ! ! ! movl( sem^ptr.addl^data.info. ppol^pgm^sub^fld^26.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ENDSCN = SW0G230 !#CMP2.28 08/15/12 BNETS 6116 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6116 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6116 * ******************************************************************************** #SCN = SW0G233 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6116 #NEWVERSION = 6117 #ADD 03821P0I ! 15AUG2012 bensone ! Symptom: Banknet Release 12.Q4 Mandates ! Problem: None ! Fix: Check for a pending activation interval timer on the ! station, when sending a deactivate message to the ! station. Add warmboot support for a new structure, ! bnet^array^g, to hold global string arrays. Add support ! for the new LCONF parameters ! SW-BNET-CANADA-DMC-CARD-TYPE and ! SW-BNET-FAILED-CVM-LIMIT-999. Check the source of an ! inbound request message from BASE24-pos. If the name of ! the Banknet Interface process is the same as the name ! of the process that sent the message, decline the ! transaction with a response code of '071'. A ! transaction advice is logged to the ILF and dropped if ! a BNIIF record cannot be found. ! Procs modified: cmd^deactvt^sta ! cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^actvt ! init^bnet^g ! init^paramproc ! pstm^0200^request ! pstm^0220^force^post ! Dependency: Apply fixes to AUTHLIBS, BAUTILS, BNETDDLS, BNETG, ! BNETLIBS, BNETS, COBTKN, DDLFCPF, DDLIDF, DDLPSTKN, ! OKLIBTS, PSTKNCVS, PSTKNID, RQCPFS, RQIDFS, RTAUEMVG, ! RTAUEMVS, RTAUG, SCRNCPF, SCRNIDF, SUBTPTBL, SVCPFS ! and SVIDFS. ! Run Make. ! Replace BAMISCTD, LCONFBA, BNETLOGM, BNETMNWD, and ! BNETUPDT. ! Reference: WO #004536 #ADD 05592 SUB^FRMT^SEND^DEACTVT if @timer := find^specific^timer( tcb^g, typ^16^actvt^intrvl^l, nmm^actvt^l, userbuf, woffset( userbuf.sta^x ) ) then #DELETE 05593 SUB^FRMT^SEND^DEACTVT #ADD 05594 SUB^FRMT^SEND^DEACTVT call delete^this^timer( tcb^g, timer ); #DELETE 05595 SUB^FRMT^SEND^DEACTVT #ADD 09189H02 CMD^WARMBOOT^STORE^GLOBALS store^wrds^d( bnet^array^g ); #ADD 09801H00 CMD^WARMBOOT^RETRIEVE^GLOBALS bnet^g ':=' temp.bnet^g for 1 elements; #DELETE 09801H01 CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD 09801H02 CMD^WARMBOOT^RETRIEVE^GLOBALS bnet^array^g ':=' temp.bnet^array^g for 1 elements; #ADD 10099M00 INIT^ACTVT if @timer := find^specific^timer( tcb^g, typ^16^actvt^intrvl^l, nmm^actvt^l, userbuf, woffset( userbuf.sta^x ) ) then #DELETE 10099M01/10099M06 INIT^ACTVT #ADD 10100 INIT^ACTVT call delete^this^timer( tcb^g, timer ); #DELETE 10101 INIT^ACTVT #ADD 10413 INIT^BNET^G int i; #ADD 10428H04 INIT^BNET^G bnet^array^g.canada^dmc^card^type^g ':=' [" "]; for i := 0 to ( $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) - 1 ) do begin bnet^array^g.failed^cvm^lmt^tbl^g[ i ].crncy^cde ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ i ].crncy^cde ) * [ " " ] ]; bnet^array^g.failed^cvm^lmt^tbl^g[ i ].crncy^amt ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ i ].crncy^amt ) * [ " " ] ]; end; #ADD 12591 INIT^PARAMPROC wlform( cvm^crncy^cde, "\? param contains invalid currency" ',' " code, \?" ) wlform( cvm^crncy^amt, "\? param contains invalid currency" ',' " amt, \?" ) #ADD 12676H03 INIT^PARAMPROC "P", "SW-BNET-CANADA-DMC-CARD-TYPE ", #ADD 12685 INIT^PARAMPROC fixed failed^cvm^lmt^amt; #ADD 13500H0Q INIT^PARAMPROC ! ! ! SW-BNET-CANADA-DMC-CARD-TYPE ! ! ! if not ferror then begin bnet^array^g.canada^dmc^card^type^g ':=' lconf.param^msg.ptxt for lconf.param^msg.plgth; if not $alpha( bnet^array^g. canada^dmc^card^type^g[ 0 ] ) then begin bnet^array^g.canada^dmc^card^type^g ':=' [" "]; end; end; #ADD 13927 INIT^PARAMPROC ! SW-BNET-FAILED-CVM-LIMIT-999 movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); movd( lconf^key.item^typ, "P" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "SW-BNET-FAILED-CVM-LIMIT-" ); ! ! Generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 25 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin param^good := true; if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) then begin ! ! Get the currency code from the parameter name ! lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde); movl( bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde, lconf.prikey.item^name.byte[ 25 ], lgth ); if not all^numeric( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ) then begin call log^message^( 4072, ! routing code !, @cvm^crncy^cde, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ); param^good := false; end; ! ! Get the currency amount from the parameter value ! if not ascii^fixed( lconf.param^msg.ptxt, lconf.param^msg.plgth, failed^cvm^lmt^amt ) or not fixed^ascii^( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt, failed^cvm^lmt^amt ) then begin call log^message^( 4073, ! routing code !, @cvm^crncy^amt, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @lconf.param^msg.ptxt, lconf.param^msg.plgth ); param^good := false; end; if param^good then begin j := j + 1; end else begin bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde ) * [ " " ] ]; bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^amt ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^amt ) * [ " " ] ]; end; end; ! if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) end; ! of while if j <= 0 then begin ! ! No LCONF params found when process name is specified ! Look for generic LCONF params ! movd( lconf^key.user^fld1, " " ); init( lconf^key.pro^name, "*", $len( lconf^key.pro^name ) ); movd( lconf^key.item^typ, "P" ); init( lconf^key.item^name, " ", $len( lconf^key.item^name ) ); movd( lconf^key.item^name, "SW-BNET-FAILED-CVM-LIMIT-" ); if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 25 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; ! keyposition error j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin param^good := true; if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) then begin ! ! Get the currency code from the parameter name ! lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde); movl( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lconf.prikey.item^name.byte[ 25 ], lgth ); if not all^numeric( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ) then begin call log^message^( 4074, ! routing code !, @cvm^crncy^cde, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ); param^good := false; end; ! ! Get the currency amount from the parameter value ! if not ascii^fixed( lconf.param^msg.ptxt, lconf.param^msg.plgth, failed^cvm^lmt^amt ) or not fixed^ascii^( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt, failed^cvm^lmt^amt ) then begin call log^message^( 4075, ! routing code !, @cvm^crncy^amt, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @lconf.param^msg.ptxt, lconf.param^msg.plgth ); param^good := false; end; if param^good then begin j := j + 1; end else begin bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde ) * [ " " ] ]; bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^amt ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt ) * [ " " ] ]; end; end; ! if j < $occurs( g.failed^cvm^lmt^tbl^g ) end; ! of while end; ! no process specific LCONF params located #ADD 15207 PSTM^0200^REQUEST string .s^sym^source := byteaddr( @msg^sym^source ); #ADD 15277 SUB^APPRV^BLIND if s^sym^source = net.myname for 16 then begin ! ! ensure the source and destination are not the same process ! movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); call pstm^0200^route( susp, resp^invalid^route^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 16178 PSTM^0220^FORCE^POST begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, !sem!, !sem^lgth!, sub^fail^pre^auth^l ); return; end #DELETE 16179 /16181 PSTM^0220^FORCE^POST #ADD 16230 PSTM^0220^FORCE^POST return; #ADD 18150 SEM^ACTVT^RESPONSE typ^16^actvt^intrvl^l, nmm^actvt^l ) ) then #DELETE 18151 SEM^ACTVT^RESPONSE #ENDSCN = SW0G233 !#CMP2.28 09/04/12 BNETDDLS6045 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6045 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6045 * ******************************************************************************** #SCN = SW0G270 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6045 #NEWVERSION = 6046 #ADD 00262s0H * 04SEP2012 bensone * Symptom: Updates to Banknet Release 12.Q4 Mandates * Problem: Last second change to the definition of DE 48 SE 26 by * MasterCard. * Fix: Changed SEM definition of DE 48 SE 26 by renaming fields * to indicate generic wallet use and expanding the * Wallet ID from one to three bytes in length. * Dependency: Apply fixes to BNETDDLS, BNETLIBS and DDLPSTKN. * Run Make. Replace BNETUPDT. * Reference: Case #1222243 #ADD 01157s00 SEM * * Wallet Program Data * Subfield tag = 26 * Contains information about transactions initiated through a wallet * 06 wallet-pgm-sub-fld-26. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 wallet-id pic x(3). 10 user-fld-aci pic x(2). #DELETE 01157s01/01157s0B SEM #ENDSCN = SW0G270 !#CMP2.28 09/04/12 BNETLIBS61152FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61152 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61152 * ******************************************************************************** #SCN = SW0G271 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61152 #NEWVERSION = 61153 #ADD \0441918 ! 04SEP2012 bensone ! Symptom: Updates to Banknet Release 12.Q4 Mandates ! Problem: Last second change to the definition of DE 48 SE 26 by ! MasterCard. ! Fix: Changed token definition DGTL-WALLET-TKN for the new ! Digital Wallet Token (Token ID = "F4") by renaming ! fields to indicate generic wallet use and expanding the ! Wallet ID from one to three bytes in length. ! Changed SEM definition of DE 48 SE 26 by renaming fields ! to indicate generic wallet use and expanding the ! Wallet ID from one to three bytes in length. ! Procs modified: pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to BNETDDLS, BNETLIBS and DDLPSTKN. ! Run Make. Replace BNETUPDT. ! Reference: Case #1222243 #ADD \094590G PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.wallet^pgm^sub^fld^26.tag, "26" ); movd( sem.addl^data.info.wallet^pgm^sub^fld^26.lgth, "03" ); move( sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id, dgtl^wallet^tkn.wallet.id ); #DELETE \094590H/\094590N PSTM^FRMT^SEM^ADDL^DATA #REPLACE \094590U PSTM^FRMT^SEM^ADDL^DATA wallet^pgm^sub^fld^26. #REPLACE \1422901 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.wallet^pgm^sub^fld^26.tag= "26" then #ADD \142290D SEM^FRMT^XRQST^TO^PSTM^0200 ! !Set Wallet Flag = 01 - MasterCard Wallet ! #DELETE \142290E/\142290G SEM^FRMT^XRQST^TO^PSTM^0200 #ADD \142290I SEM^FRMT^XRQST^TO^PSTM^0200 move( dgtl^wallet^tkn.wallet.id, sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id ); #DELETE \142290J/\142290L SEM^FRMT^XRQST^TO^PSTM^0200 #ADD \170230r UTIL^COLLAPSE^SEM if hdr.addl^data.info. wallet^pgm^sub^fld^26.tag = "26" then begin call ascii^integer( hdr.addl^data.info. wallet^pgm^sub^fld^26.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. wallet^pgm^sub^fld^26.tag, ( tag^length + 4 ) ); #DELETE \170230s/\1702314 UTIL^COLLAPSE^SEM #ADD \185020b UTIL^EXPAND^SEM ! ! Wallet Program Data ! #DELETE \185020c/\185020e UTIL^EXPAND^SEM #REPLACE \185020g UTIL^EXPAND^SEM wallet^pgm^sub^fld^26.tag, #ENDSCN = SW0G271 !#CMP2.28 09/11/12 BNETLIBS61153FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61153 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61153 * ******************************************************************************** #SCN = SW0G322 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61153 #NEWVERSION = 61154 #ADD ]044190J ! 11SEP2012 gruberg ! Symptom: The interface sets the transaction code to "11" for ! transactions that are not AFD transactions. ! Problem: A fix for case #1215168 allowed some non-AFD ! transactions to be mapped to preauth requests. The ! purpose of a preauth request transaction in BASE24 is ! to place funds "on hold" until a corresponding preauth ! completion is received for the transaction. For ! MasterCard, completion advices are sent only for AFD ! transactions. For non-AFD transactions, the issuer's ! authorization system will not receive a corresponding ! preauth completion. ! Fix: Restore the code that sets the preauth transaction code ! to as it was before the fix for case #1215168. The ! preauth tran code will only be set for AFD transactions. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1223150 #ADD |1159400 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem^preauth^match^d( sem ) and ( ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) or ( not util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) then #DELETE |1159401/d1159409 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0G322 !#CMP2.28 09/26/12 BNETLIBS61154FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61154 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61154 * ******************************************************************************** #SCN = SW0G326 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61154 #NEWVERSION = 61155 #ADD ^044190J ! 26SEP2012 wielerk ! Symptom: The interface sets DE-48.SE-63 incorrectly in 0400 ! transactions that are sent for Base24 acquired ! requests that time out. ! Problem: A fix in SCN SW0G226 was not correct for 0400 messages ! that have no matching 0110. Logic will use DE-48 from ! the request if present, or DE-63 and DE-15. When there ! is no external response, DE-48.SE-63, DE-63 and DE-15 ! are not present and Mastercard allows zeroes to be used ! to format DE-48.SE-63 for the 0400. ! Fix: Modified logic to check for bits 63 and 15 before using ! these fields to populate the 0400. ! Proc modified: sem^frmt^xrqst^to^sem^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1226782. #ADD @156180B SEM^FRMT^XRQST^TO^SEM^XRVSL if banknet^data^bit^d and setl^dat^bit^d then #ENDSCN = SW0G326 !#CMP2.28 10/01/12 BNETLIBS61155FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61155 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61155 * ******************************************************************************** #SCN = SW0G334 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61155 #NEWVERSION = 61156 #ADD `044190G ! 01OCT2012 bensone ! Symptom: The interface is not updating the CH-POS DATA1 Token ! for some Maestro parking and toll-way chip transactions. ! Problem: The value in the SW-BNET-FAILED-CVM-LIMIT-999 ! parameter is in whole units for the specified currency. ! The value in DE 6 is not being adjusted to whole units ! before being compared to the value in the parameter. ! This can cause the value in DE 6 to be treated as ! larger than the parameter value when in fact, it is not. ! Fix: Modified logic to adjust to value in DE 6 to whole units ! before comparing the value to the ! SW-BNET-FAILED-CVM-LIMIT-999 parameter value. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1226881. #ADD :1373901 SEM^FRMT^XRQST^TO^PSTM^0200 int dec^places := 0; #DELETE :1373902 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 13757 SEM^FRMT^XRQST^TO^PSTM^0200 fixed crd^iss^amt := 0f; fixed param^amt := 0f; #DELETE 13757100 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD \142460N SEM^FRMT^XRQST^TO^PSTM^0200 if bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^cde = sem.iss^crncy^cde for 3 then begin call ascii^fixed^( bnet^array^g. failed^cvm^lmt^tbl^g[ i ]. crncy^amt, param^amt ); call ascii^fixed^( sem.crd^iss^amt, crd^iss^amt ); dec^places := get^iso^dec^places( sem.iss^crncy^cde ); case dec^places of begin !0! ; !1! crd^iss^amt := crd^iss^amt / 10f; !2! crd^iss^amt := crd^iss^amt / 100f; !3! crd^iss^amt := crd^iss^amt / 1000f; !?! otherwise ; end; if param^amt >= crd^iss^amt and dec^places >= 0 and dec^places <= 3 then begin ! ! does not exceed the failed CVM limit ! movd( pos^data1^tkn.failed^cvm^alwd, "1" ); add^pos^data1 := true; end; set( i, $occurs( bnet^array^g. failed^cvm^lmt^tbl^g ) ); end; ! of currency match #DELETE \142460O/\142460a SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0G334 !#CMP2.28 10/23/12 BNETLIBS61156FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 61156 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 61156 * ******************************************************************************** #SCN = SW0G349 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61156 #NEWVERSION = 61157 #ADD ~044190G ! 23OCT2012 bensone ! Symptom: The interface is not updating the CH-POS DATA1 Token ! for some Maestro parking and toll-way chip transactions. ! Problem: The fix above to adjust to value in DE 6 to whole units ! was inefficient and wrong. ! Fix: Remove the code for the fix above. Move the code to ! procedure init^paramproc where the amount in the table ! failed^cvm^lmt^tbl^g will be adjusted by the exponent ! of the currency. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETS and BNETLIBS. Run Make. ! Reference: Case #1226881. #DELETE ~1373901 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE ~1375701/~1375702 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD \142460N SEM^FRMT^XRQST^TO^PSTM^0200 if bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^cde = sem.iss^crncy^cde for 3 and bnet^array^g.failed^cvm^lmt^tbl^g[ i ]. crncy^amt >= sem.crd^iss^amt for 12 then begin ! ! does not exceed the failed CVM limit ! movd( pos^data1^tkn.failed^cvm^alwd, "1" ); add^pos^data1 := true; set( i, $occurs( bnet^array^g. failed^cvm^lmt^tbl^g ) ); end; #DELETE ~1424600/~142460j SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0G349 !#CMP2.28 10/23/12 BNETS 6117 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6117 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6117 * ******************************************************************************** #SCN = SW0G350 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6117 #NEWVERSION = 6118 #ADD 03821Q0Y ! 23OCT2012 bensone ! Symptom: The interface is not updating the CH-POS DATA1 Token ! for some Maestro parking and toll-way chip transactions. ! Problem: There was code to exit procedure init^paramproc when ! parameter DENY-FAILED-ON-BEHALF was false. The code to ! process the SW-BNET-FAILED-CVM-LIMIT-999 parameters was ! placed after the code that exited. Therefore when ! DENY-FAILED-ON-BEHALF was false the ! SW-BNET-FAILED-CVM-LIMIT-999 parameters were not ! processed. ! Fix: Move the code to process SW-BNET-FAILED-CVM-LIMIT-999 ! parameters to before the code that exited. Improve the ! editing of the parameters. Adjust the parameter amount ! for the exponent of the currency before placing the ! amount in the table failed^cvm^lmt^tbl^g. ! Proc modified: init^paramproc ! Dependency: Apply fix to BNETS and BNETLIBS. Run Make. ! Reference: Case #1226881. #ADD 12688 INIT^PARAMPROC int crncy^amt^valid := true; int crncy^cde^valid := true; int dec^places := 0; #ADD 13726 INIT^PARAMPROC ! ! SW-BNET-FAILED-CVM-LIMIT-999 ! movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); movd( lconf^key.item^typ, "P" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "SW-BNET-FAILED-CVM-LIMIT-" ); ! ! Generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 25 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin crncy^amt^valid := true; crncy^cde^valid := true; if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) then begin ! ! Get the currency code from the parameter name ! lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde); movl( bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde, lconf.prikey.item^name.byte[ 25 ], lgth ); if not all^numeric( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ) then begin crncy^cde^valid := false; end else begin dec^places := get^iso^dec^places( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde ); case dec^places of begin !0! ; !1! ; !2! ; !3! ; !?! otherwise crncy^cde^valid := false; end; end; if not crncy^cde^valid then begin call log^message^( 4072, ! routing code !, @cvm^crncy^cde, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ); end; ! ! Get the currency amount from the parameter value ! if not ascii^fixed( lconf.param^msg.ptxt, lconf.param^msg.plgth, failed^cvm^lmt^amt ) then begin crncy^amt^valid := false; end else begin case dec^places of begin !0! ; !1! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 10f; !2! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 100f; !3! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 1000f; !?! otherwise ; end; end; if not crncy^amt^valid or not fixed^ascii^( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt, failed^cvm^lmt^amt ) then begin call log^message^( 4073, ! routing code !, @cvm^crncy^amt, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @lconf.param^msg.ptxt, lconf.param^msg.plgth ); crncy^amt^valid := false; end; if crncy^amt^valid and crncy^cde^valid then begin j := j + 1; end else begin bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde ) * [ " " ] ]; bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^amt ':=' [ $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^amt ) * [ " " ] ]; end; end; ! if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) end; ! of while if j <= 0 then begin ! ! No LCONF params found when process name is specified ! Look for generic LCONF params ! movd( lconf^key.user^fld1, " " ); init( lconf^key.pro^name, "*", $len( lconf^key.pro^name ) ); movd( lconf^key.item^typ, "P" ); init( lconf^key.item^name, " ", $len( lconf^key.item^name ) ); movd( lconf^key.item^name, "SW-BNET-FAILED-CVM-LIMIT-" ); if ferror := hiswfile^keyposition( lconf^num, lconf^key, !key specifier!, ( $offset( lconf^key.item^name ) + 25 ), 1 ) then begin if ferror <> feeof then begin return false; end; end; ! keyposition error j := 0; while hiswfile^read( lconf^num, lconf, $len( lconf ), !count read!, feeof ) = feok do begin crncy^amt^valid := true; crncy^cde^valid := true; if j < $occurs( bnet^array^g.failed^cvm^lmt^tbl^g ) then begin ! ! Get the currency code from the parameter name ! lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde); movl( bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lconf.prikey.item^name.byte[ 25 ], lgth ); if not all^numeric( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ) then begin crncy^cde^valid := false; end else begin dec^places := get^iso^dec^places( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde ); case dec^places of begin !0! ; !1! ; !2! ; !3! ; !?! otherwise crncy^cde^valid := false; end; end; if not crncy^cde^valid then begin call log^message^( 4074, ! routing code !, @cvm^crncy^cde, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @bnet^array^g.failed^cvm^lmt^tbl^g[ j ]. crncy^cde, lgth ); end; ! ! Get the currency amount from the parameter value ! if not ascii^fixed( lconf.param^msg.ptxt, lconf.param^msg.plgth, failed^cvm^lmt^amt ) then begin crncy^amt^valid := false; end else begin case dec^places of begin !0! ; !1! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 10f; !2! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 100f; !3! failed^cvm^lmt^amt := failed^cvm^lmt^amt * 1000f; !?! otherwise ; end; end; if not crncy^amt^valid or not fixed^ascii^( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt, failed^cvm^lmt^amt ) then begin call log^message^( 4075, ! routing code !, @cvm^crncy^amt, net.myname, evt_msg_severity_err_l, @lconf.prikey.item^name, item^name^len^l, @lconf.param^msg.ptxt, lconf.param^msg.plgth ); crncy^amt^valid := false; end; if crncy^amt^valid and crncy^cde^valid then begin j := j + 1; end else begin bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^cde ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^cde ) * [ " " ] ]; bnet^array^g.failed^cvm^lmt^tbl^g[ j ].crncy^amt ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g[ j ]. crncy^amt ) * [ " " ] ]; end; end; ! if j < $occurs( g.failed^cvm^lmt^tbl^g ) end; ! of while end; ! if j <= 0 #ADD 13927 INIT^PARAMPROC !##################################################################### !# # !# NO PROCESSING PAST THIS POINT # !# # !# This routine is EXITED above if deny^failed^on^behalf^g is FALSE # !# because there is no need to read ON-BEHALF-DENY-RSLT-CDESxx # !# LCONF parameters if they are not going to be used. Any new LCONF # !# parameters should be processed before the # !# ON-BEHALF-DENY-RSLT-CDES code. # !# # !##################################################################### #DELETE 13927Q00/13927Q3L INIT^PARAMPROC #ENDSCN = SW0G350 !#CMP2.28 11/21/12 BNETLIBS6200 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6200 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6200 * ******************************************************************************** #SCN = SW0G359 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6200 #NEWVERSION = 6201 #ADD 07850 ! 21NOV2012 saderc ! Symptom: Maestro AFD Advice 0120 messages are being marked as ! exception transactions in the PTLF. ! Problem: MasterCard is sending constructed track2 in DE-35 for ! Maestro AFD Advice messages. The track2 only contains ! the PAN and expiration date, so full track data is not ! available. As a result, POS RTAU is marking these ! transactions as exceptions, which means the preauth ! hold is not released on the cardholders account. ! Fix: The BNET interface was modified to set the first byte ! of pstm.tran.track2 to "M" when processing an inbound ! AFD 0120 advice messages. ! Proc modified: sem^frmt^data^to^pstm^track2 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1232050 #ADD 16754 SEM^FRMT^DATA^TO^PSTM^TRACK2 ( pstm.pt^srv^entry^mde = "01" ) or ! manual entry! ( sem.typ = sem^auth^advice^d and ! AFD advices ! sem^preauth^match^d( sem ) ) ) then #DELETE 16755 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ENDSCN = SW0G359 !#CMP2.28 12/06/12 BNETG 6079 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6079 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6079 * ******************************************************************************** #SCN = SW0G362 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0002630P ! 06DEC2012 bensone ! Symptom: Discretionary data from track 1 and/or track 2 was not ! being suppressed when POS-DISCR-DATA-PSTM-SUPPRS or ! ATM-DISCR-DATA-STM-SUPPRS were set to "Y" and the reply ! came from the BNET interface. ! Problem: The LCONF parameters POS-DISCR-DATA-PSTM-SUPPRS and ! ATM-DISCR-DATA-STM-SUPPRS were never implemented in the ! BNET interface. ! Fix: Add globals supprs^discr^data^stm^g and ! supprs^discr^data^pstm^g for LCONF parameters ! ATM-DISCR-DATA-PSTM-SUPPRS and POS-DISCR-DATA-STM-SUPPRS ! Source in BAUTILS procedures supprs_trk1_discr_data ! and supprs_trk2_discr_data. ! Dependency: Apply fixes to BNETATMS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETMNWD. ! Reference: Case #1235054. #REPLACE 00435004/00435004 OFFSET 0 int supprs^discr^data^stm^g; int supprs^discr^data^pstm^g; #ADD 01366N50 ? supprs_trk1_discr_data, ? supprs_trk2_discr_data, #ADD 01366N5K ! supprs_trk1_discr_data, ! supprs_trk2_discr_data, #ENDSCN = SW0G362 !#CMP2.28 12/06/12 BNETLIBS6201 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6201 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6201 * ******************************************************************************** #SCN = SW0G363 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6201 #NEWVERSION = 6202 #ADD 07850A0G ! 06DEC2012 bensone ! Symptom: Discretionary data from track 1 and/or track 2 was not ! being suppressed when POS-DISCR-DATA-PSTM-SUPPRS or ! ATM-DISCR-DATA-STM-SUPPRS were set to "Y" and the reply ! came from the BNET interface. ! Problem: The LCONF parameters POS-DISCR-DATA-PSTM-SUPPRS and ! ATM-DISCR-DATA-STM-SUPPRS were never implemented in the ! BNET interface. ! Fix: Add support for LCONF parameter ! POS-DISCR-DATA-STM-SUPPRS. Suppress discretionary track ! data when bnet^g.supprs^discr^data^pstm^g is "true". ! Proc modified: util^send^pstm ! Dependency: Apply fixes to BNETATMS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETMNWD. ! Reference: Case #1235054. #REPLACE 34939 /34939 OFFSET 0 UTIL^SEND^PSTM int found^trck1^tkn; int .track1^tkn( track1^tkn^def ); int trck1^tkn^lgth; #REPLACE 34941 /34941 OFFSET 0 UTIL^SEND^PSTM string tkn^id[ 0:1 ]; ! ! Mask track1/track2 discretionary data ! if bnet^g.supprs^discr^data^pstm^g and pstm.typ = response^d then begin call supprs_trk2_discr_data( pstm.tran.track2, $len( pstm.tran.track2 ) ); if base24^rel^g >= 5 then begin tkn^id ':=' track1^tkn^id^d; found^trck1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @track1^tkn, trck1^tkn^lgth ); if found^trck1^tkn then begin call supprs_trk1_discr_data( track1^tkn, $min( trck1^tkn^lgth, $len( track1^tkn ) ) ); end; end; end; #ENDSCN = SW0G363 !#CMP2.28 12/06/12 BNETS 6118 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6118 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6118 * ******************************************************************************** #SCN = SW0G365 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6118 #NEWVERSION = 6119 #ADD 03821R0J ! 06DEC2012 bensone ! Symptom: Discretionary data from track 1 and/or track 2 was not ! being suppressed when POS-DISCR-DATA-PSTM-SUPPRS or ! ATM-DISCR-DATA-STM-SUPPRS were set to "Y" and the reply ! came from the BNET interface. ! Problem: The LCONF parameters POS-DISCR-DATA-PSTM-SUPPRS and ! ATM-DISCR-DATA-STM-SUPPRS were never implemented in the ! BNET interface. ! Fix: Add support for LCONF parameters ! POS-DISCR-DATA-PSTM-SUPPRS and ATM-DISCR-DATA-STM-SUPPRS ! Procs modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to BNETATMS, BNETG, BNETLIBS and BNETS. ! Run Make. Replace BNETMNWD. ! Reference: Case #1235054. #REPLACE 10428H04/10428H04 OFFSET 0 INIT^BNET^G bnet^g.supprs^discr^data^stm^g := false; bnet^g.supprs^discr^data^pstm^g := false; #REPLACE 12676Q02/12676Q02 OFFSET 0 INIT^PARAMPROC "P", "ATM-DISCR-DATA-STM-SUPPRS ", "P", "POS-DISCR-DATA-PSTM-SUPPRS ", #ADD 13500Q0E INIT^PARAMPROC ! ! ATM-DISCR-DATA-STM-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin bnet^g.supprs^discr^data^stm^g := true; end else begin bnet^g.supprs^discr^data^stm^g := false; end; end; ! ! POS-DISCR-DATA-PSTM-SUPPRS ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin bnet^g.supprs^discr^data^pstm^g := true; end else begin bnet^g.supprs^discr^data^pstm^g := false; end; end; #ENDSCN = SW0G365 !#CMP2.28 12/20/12 BNETLIBS6202 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6202 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6202 * ******************************************************************************** #SCN = SW0G369 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6202 #NEWVERSION = 6203 #ADD 07850B0G ! 20DEC2012 gruberg ! Symptom: Inconsistent EMS message 2760 for interface logon ! status following warmboot. ! Problem: The pct.status information is not restored following a ! successful warmboot. In some configurations this may ! cause unneeded NMM messages to be sent after successful ! completion of the warmboot, and the inconstistent EMS ! messages to be logged. ! Fix: The interface currently uses log message number 2760 ! twice. Modified one of them to use number 2759. ! Proc modified: util^set^logon^status ! Dependency: Apply fixes to BNETLIBS and BNETS. Replace BNETLOGM. ! Run Make. ! Reference: Case #1235778 #REPLACE 35355 UTIL^SET^LOGON^STATUS call log^message^( 2759,, @logong, net.myname, 0, #ENDSCN = SW0G369 !#CMP2.28 12/20/12 BNETS 6119 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6119 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6119 * ******************************************************************************** #SCN = SW0G371 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6119 #NEWVERSION = 6120 #ADD 03821S0G ! 20DEC2012 gruberg ! Symptom: Inconsistent EMS message 2760 for interface logon ! status following warmboot. ! Problem: The pct.status information is not restored following a ! successful warmboot. In some configurations this may ! cause unneeded NMM messages to be sent after successful ! completion of the warmboot, and the inconstistent EMS ! messages to be logged. ! Fix: Added logic to restore pct.status.logon and ! pct.status.num^sta to their previous value after a ! successful warmboot. Modified init^logon to use a ! service type of both^l when the service type on the ! BNIIF is set to both. Modified warmboot processing to ! not allow users to change station types while the ! interface is active. ! Proc modified: cmd^warmboot ! init^logon ! Dependency: Apply fixes to BNETLIBS and BNETS. Replace BNETLOGM. ! Run Make. ! Reference: Case #1235778 #ADD 08091 CMD^WARMBOOT wlform( station, "Station names and types cannot be changed " ',' "while interface is active - previous names" ',' " and types retained" ) #DELETE 08092 /08094 CMD^WARMBOOT #REPLACE 08130 CMD^WARMBOOT nam^or^typ^changed; #REPLACE 08362 CMD^WARMBOOT nam^or^typ^changed := false; #REPLACE 08366 /08367 CMD^WARMBOOT for $len( pct.station.nam ) or pct.station[ i ].typ <> pcpl.station[ i ].typ for $len( pct.station.typ ) then nam^or^typ^changed := true; #ADD 08373 CMD^WARMBOOT ! ! If any of the station names or types in the ICF(E) have been ! changed and any station is up then continue using the old ! station names and types. ! names. ! #DELETE 08374 /08376 CMD^WARMBOOT #REPLACE 08378 CMD^WARMBOOT if nam^or^typ^changed and #REPLACE 08399 /08399 OFFSET 0 CMD^WARMBOOT set( pct.status.logon, pcpl.status.logon ); set( pct.status.next^sta, pcpl.status.next^sta); #REPLACE 12324 SUB^INIT^LOGON both^l, traffic, avs^typ, #ENDSCN = SW0G371 !#CMP2.28 12/27/12 BNETG 6080 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6080 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6080 * ******************************************************************************** #SCN = SW0G372 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0002640H ! 27DEC2012 wielerk ! Symptom: Incorrect MCC to TCC mapping. ! Problem: The MCCs 3273 and 3274 were mapped wrong, MCC 6513 was ! absent from the table and MCC 7995 needed to map to ! TCC values "U" or "P" based on processing code. ! Fix: Modified defines pos^pmnt^adj^d and pos^pmnt^d to ! add SIC 7995. ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Reference: Case #1236200. #ADD 00166&05 ( x.retl^sic^cde = "6532" or x.retl^sic^cde = "6533" or x.retl^sic^cde = "7995" ) ) )#; #DELETE 00166&06/00166&07 #ADD 00166v07 ( x.retl^sic^cde = "6532" or x.retl^sic^cde = "6533" or x.retl^sic^cde = "7995" ) ) )#; #DELETE 00166v08/00166v09 #ENDSCN = SW0G372 !#CMP2.28 12/27/12 BNETLIBS6203 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6203 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6203 * ******************************************************************************** #SCN = SW0G373 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6203 #NEWVERSION = 6204 #ADD 07850C0F ! 27DEC2012 wielerk ! Symptom: Incorrect MCC to TCC mapping in the interface. ! Problem: The MCCs 3273 and 3274 were mapped wrong, MCC 6513 was ! absent from the table and MCC 7995 needed to map to ! TCC values "U" or "P" based on processing code. ! Fix: Modified mapping table to correct inadequacies. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fixes to BNETG and BNETLIBS. Run Make. ! Reference: Case #1236200. #REPLACE 13368 PSTM^FRMT^SEM^ADDL^DATA "3000" , "3299" , "X" , #DELETE 13369 /13370 PSTM^FRMT^SEM^ADDL^DATA #REPLACE 13416 PSTM^FRMT^SEM^ADDL^DATA "6513" , "6513" , "T" , #ENDSCN = SW0G373 !#CMP2.28 12/28/12 BNETLIBS6204 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6204 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6204 * ******************************************************************************** #SCN = SW0G374 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6204 #NEWVERSION = 6205 #ADD 07850D0A ! 28DEC2012 saderc ! Symptom: The interface is sending DE 48 (addl data) SE 42 (ecom ! sec) to Banknet for Telephone Orders in cases where UCAF ! is not supported. ! Problem: The current logic is formatting and sending DE 48 SE 42 ! in the external message when processing a Telephone ! Order in cases where UCAF is not supported. ! Fix: The interface was modified to only format and send DE 48 ! SE 42 to Banknet for a Telephone Order when the ! authn-coll-ind field in the PS51 token (C0) is set to ! a "1" (UCAF data collection is supported by the ! merchant, but UCAF data was not populated) or "2" (UCAF ! data collection is supported by the merchant, and UCAF ! data was populated). ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1237638 #ADD 14673 PSTM^FRMT^SEM^ADDL^DATA ( ps51^get^tkn.authn^coll^ind = "1" or ps51^get^tkn.authn^coll^ind = "2" ) then #DELETE 14674 PSTM^FRMT^SEM^ADDL^DATA #ADD 14693 PSTM^FRMT^SEM^ADDL^DATA end; ! of if phn^order^txn if phn^order^txn and ps51^tkn^found and ( ps51^get^tkn.authn^coll^ind = "1" or ps51^get^tkn.authn^coll^ind = "2" ) then begin #ADD 14707 PSTM^FRMT^SEM^ADDL^DATA move( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); #DELETE 14708 /14721 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0G374 !#CMP2.28 01/23/13 BNETLIBS6205 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6205 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6205 * ******************************************************************************** #SCN = SW0H016 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6205 #NEWVERSION = 6206 #ADD 07850E0I ! 23JAN2013 wielerk ! Symptom: Process does not forward AFD 0120 when PSTM 0220 Track2 ! begins with "M". ! Problem: The interface marks the 0120 as manually entered when ! Track2 begins with "M" and no Track1 is present. A ! local variable is also set to true to be used in edits ! later in the proc to prevent certain types of ! transactions to be manually entered. This local variable ! does not pertain to advice messages. ! Fix: Modified logic to only set the manual^entry flag to true ! for request messages. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1243922. #ADD 09062 PSTM^FRMT^0200^TO^XRQST if pstm.typ = request^d then begin set( manual^entry, true ); end; #DELETE 09063 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H016 !#CMP2.28 02/08/13 BNETG 6081 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6081 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6081 * ******************************************************************************** #SCN = SW0H025 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0002650A ! 08FEB2013 bensone ! Symptom: Banknet Release 13.Q2 Mandates ! Problem: None ! Fix: 1. Revised Standards for Support of the Device Type ! Indicator. ! Source in the definition of the EMV Supplementary ! Data token (S4). ! Add new define, pos^emv^suppl^data^reqd^d, to ! indicate when supplementary EMV data is required. ! Create a referential structure, ! tag^third^party^data^def for the Third Party Data ! object (TAG = '9F6E'). ! Add new define, tag^third^party^data^d, to locate ! the Third Party Data object, EMV tag ('9F6E'), in the ! the EMV Supplementary Data token (S4). ! 2. Maestro Acceptance at Parking Garages and Tollways. ! Add a second field to the CRNCY^AMT array in the ! failed^cvm^lmt^tbl^g table for LCONF parameter ! SW-BNET-FAILED-CVM-LIMIT-999 to support MCC 4784. ! 3. Case #01234140 (Sanity Check Error). ! Add new literal, sec^resp^device^err^l, to identify ! a device error response from the HSM or TSS ! Dependency: Apply fixes to BAUTILS, BNETATMS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, DDLPSTKN, OKLIBTS, RTAUEMVS. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #004794 #ADD 00026f0Q ? emv^suppl^data^tkn #DELETE 00026f1H/00026f1J #ADD 00026O21 ! emv^suppl^data^tkn, #DELETE 00026O39/00026O3B #ADD 0002620Z ? txn^prfl^tkn ? txn_prfl_tkn ? user^data #ADD 0002620v ! txn^prfl^tkn, ! txn_prfl_tkn, ! user^data #ADD 00166105 define pos^emv^suppl^data^reqd^d = ( ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip and not visa_tran_g ) )#; #ADD 00348{01 literal sec^resp^device^err^l = 2; #REPLACE 0043530M struct crncy^amt[0:1]; #ADD 01366E1R struct tag^third^party^data^def( * ); begin struct cntry^cde; begin string byte [0:1]; end; struct unique^id; begin string byte [0:1]; end; struct dev^typ; begin string byte [0:1]; end; struct prop^data; begin string byte [0:25]; end; end; #REPLACE 01366h02 tag^third^party^data^d = [ %h9F, %h6E ]#, #ENDSCN = SW0H025 !#CMP2.28 02/08/13 BNETLIBS6206 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6206 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6206 * ******************************************************************************** #SCN = SW0H026 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6206 #NEWVERSION = 6207 #ADD 07850F0F ! 08FEB2013 bensone ! Symptom: Banknet Release 13.Q2 Mandates ! Problem: None ! Fix: 1. Global 530: Enhancing MasterCard PayPass for Transit. ! Support a new value 07 (Debt Recovery) in the ! transaction type indicator of the Transit Transaction ! token (F3) and DE 48 SE 64 subfield 1. ! Map DE 48 SE 33 to the PAN Mapping token (S8). ! 2. Maestro Acceptance at Parking Garages and Tollways. ! The LCONF parameter, SW-BNET-FAILED-CVM-LIMIT-999, ! has been extended to specify the max tran amount that ! may be authorized for Maestro chip requests with MCC ! value "4784", for which cardholder verification has ! not been successful. The failed CVM limit check will ! only be performed on a request and not an advice. ! Maestro Parking/Tollway Non-Chip Transaction will be ! declined if no PIN and the transaction amount exceeds ! the failed CVM limit. ! 3. Deletion of MCC 9751 (UK Supermarkets, Electronic Hot ! Card File) and MCC 9752 (UK Petrol Stations, ! Electronic Hot Card File). ! MCCs 9751 and 9752 will no longer be mapped to a ! TCC value. ! 4. Case #01235979 Visa Support in the Banknet Interface. ! The interface shall support Visa transactions ! correctly in its acquirer processing. A Visa PAN ! length can be between 13 and 19 inclusive. ! There is no requirement for the Banknet Interface to ! support Visa transactions in its issuer processing, ! so the small amount of issuer support for Visa ! transactions was removed to avoid confusion. ! 5. Case #01237162 Value of DE 61.10 in POS Transactions. ! Ensure the CAT Level is not changed from '1' to '2' ! for an EMV transaction. ! Proc added: util^build^failed^cvm^lmt^tbl ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! Dependency: Apply fixes to BAUTILS, BNETATMS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, DDLPSTKN, OKLIBTS, RTAUEMVS. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #004794 #ADD 09170 PSTM^FRMT^0200^TO^XRQST sem.pan.lgth >= "13" and sem.pan.lgth <= "19" ) then #DELETE 09171 PSTM^FRMT^0200^TO^XRQST #ADD 09944 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data = "P" or ( pstm.pin^tries = "Z" or pstm.pin^tries = "z" ) then #DELETE 09945 /09949 PSTM^FRMT^0200^TO^XRQST #ADD 09951 PSTM^FRMT^0200^TO^XRQST cat^lvl^2^self^srvc^term^d then #DELETE 09952 PSTM^FRMT^0200^TO^XRQST #ADD 09954 PSTM^FRMT^0200^TO^XRQST cat^lvl^1^auto^disp^mach^d ); #DELETE 09955 PSTM^FRMT^0200^TO^XRQST #ADD 09958 PSTM^FRMT^0200^TO^XRQST if not emv^data^bit^d then begin if sem.ntl^pos^data.cond^cde.byte[ 9 ] = cat^lvl^1^auto^disp^mach^d then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], cat^lvl^2^self^srvc^term^d ); end; #DELETE 09959 /09963 PSTM^FRMT^0200^TO^XRQST #REPLACE 13336 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 61, #DELETE 13454 PSTM^FRMT^SEM^ADDL^DATA #ADD 14848 PSTM^FRMT^SEM^ADDL^DATA if ( transit^txn^tkn.txn^typ^ind >= "01" and transit^txn^tkn.txn^typ^ind <= "04" ) or transit^txn^tkn.txn^typ^ind = "07" then #DELETE 14849 /14850 PSTM^FRMT^SEM^ADDL^DATA #ADD 17565 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = chip^read^paypass^mapped then #DELETE 17566 /17567 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 18414 SEM^FRMT^XRESP^TO^PSTM^0210 wlform( no^room, "NO ROOM TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( erradd^tkn, "UNABLE TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\," ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: # " ) #ADD 18469 SEM^FRMT^XRESP^TO^PSTM^0210 int .pan^mapping^get^tkn( pan^mapping^tkn^def ); #ADD 18490 SEM^FRMT^XRESP^TO^PSTM^0210 struct .pan^mapping^tkn( pan^mapping^tkn^def ); #ADD 19395 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" then begin ! !Subelement 33 - PAN Mapping File Information ! tkn^id ':=' pan^mapping^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pan^mapping^get^tkn, tkn^lgth ) then begin ! ! Update PAN Mapping Token ! move( pan^mapping^get^tkn.acct^num^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data ); move( pan^mapping^get^tkn.acct^num, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); move( pan^mapping^get^tkn.exp^dat, sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag^data ); end else begin ! ! Add PAN Mapping Token ! call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, pan^mapping^tkn ); move( pan^mapping^tkn.acct^num^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data ); move( pan^mapping^tkn.acct^num, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); move( pan^mapping^tkn.exp^dat, sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag^data ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pan^mapping^tkn, $len( pan^mapping^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3161, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3171, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3171 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add end; ! of Add PAN Mapping Token end; ! of paypass^mapping^sub^fld^33.tag = "33" #ADD 21425 SEM^FRMT^XRQST^TO^PSTM^0200 sem.typ = sem^auth^request^d and #DELETE 21426 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21436 SEM^FRMT^XRQST^TO^PSTM^0200 idx := 1; #DELETE 21437 /21438 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21441 SEM^FRMT^XRQST^TO^PSTM^0200 idx := 0; end; if sem.crd^iss^amt <> [ $len( sem.crd^iss^amt ) * [ "0" ] ] then begin #ADD 21451 SEM^FRMT^XRQST^TO^PSTM^0200 crncy^amt[ idx ] >= sem.crd^iss^amt for 12 then #DELETE 21452 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21465 SEM^FRMT^XRQST^TO^PSTM^0200 if not emv^data^bit^d and not pin^bit^d and not ( sem.addl^data.info.pin^svc^cde^sub^fld^80. tag = "80" and sem.addl^data.info.pin^svc^cde^sub^fld^80. cde = "PV" ) and pos^data1^tkn.failed^cvm^alwd <> "1" then begin ! ! ! Maestro Parking/Tollway Non-Chip Transaction. ! ! Decline these transactions if no PIN and ! ! transaction amount exceeds failed CVM limit. ! ! ! return resp^tran^not^supp^sem^l; end; end; #DELETE 21466 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 25033 SUB^VALID^CARD^TYPE ?section util^build^failed^cvm^lmt^tbl ?page "util^build^failed^cvm^lmt^tbl" !##################################################################### !# # !# util^build^failed^cvm^lmt^tbl # !# # !# This procedure parses the SW-BNET-FAILED-CVM-LIMIT-999 lconf # !# parameter and adds entries to the failed cvm limits table. # !# The currency code is derived from the parameter name. # !# The currency amounts are extracted from the parameter value. # !# # !# INPUT PARAMETERS: # !# lconf - the lconf parameter. # !# tbl^idx - the index of the current table entry. # !# # !# OUTPUT PARAMETERS: # !# crncy^cde^valid - currency code validity flag (true/false). # !# crncy^amt^valid - amounts validity flag (true/false). # !# # !# EXAMPLES: # !# # !# SW-BNET-FAILED-CVM-LIMIT-826 - yields currency code of 826 # !# SW-BNET-FAILED-CVM-LIMIT-840 - yields currency code of 840 # !# # !# Value 40;80 - MCC 7523 = 40, MCC 4784 = 80 # !# Value 40 - MCC 7523 = 40, MCC 4784 = allowed # !# Value ;80 - MCC 7523 = allowed, MCC 4784 = 80 # !# Value 40;0 - MCC 7523 = 40, MCC 4784 = not allowed # !# Value 0;80 - MCC 7523 = not allowed, MCC 4784 = 80 # !# Value ; - MCC 7523 = allowed, MCC 4784 = allowed # !# # !##################################################################### proc util^build^failed^cvm^lmt^tbl( lconf, tbl^idx, crncy^cde^valid, crncy^amt^valid ); int .lconf( lconf^def ); int tbl^idx; int .crncy^cde^valid; int .crncy^amt^valid; begin fixed amt[ 0:1 ]; int dec^places := 0; int found := false; int i := 0; int j := 0; int k := 0; int lgth := 0; ?page "subproc sub^parse^crncy^cde" !################################################################# !# # !# sub^parse^crncy^cde # !# # !# This subprocedure validates currency code from the lconf # !# parameter name and adds it to the table entry. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^parse^crncy^cde; begin crncy^cde^valid := true; lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g.crncy^cde); movl( bnet^array^g.failed^cvm^lmt^tbl^g[ tbl^idx ].crncy^cde, lconf.prikey.item^name.byte[ 25 ], lgth ); if not all^numeric( bnet^array^g. failed^cvm^lmt^tbl^g[ tbl^idx ]. crncy^cde, lgth ) then begin crncy^cde^valid := false; end else begin dec^places := get^iso^dec^places( bnet^array^g. failed^cvm^lmt^tbl^g[ tbl^idx ]. crncy^cde ); case dec^places of begin !0! ; !1! ; !2! ; !3! ; !?! otherwise crncy^cde^valid := false; end; end; end; ! of subproc sub^parse^crncy^cde ?page "subproc sub^parse^amts" !################################################################# !# # !# sub^parse^amts # !# # !# This subprocedure translates the amounts from the lconf # !# parameter value into the table entry. Embedded spaces are # !# not allowed. # !# # !# i = index to traverse the parameter value # !# j = index to the start of current amt in parameter value # !# k = index to the amount array # !# lgth = length of the current amt in the parameter value # !# # !# if amt[ i ] = -1 then allow (set limit to zero) # !# if amt[ i ] = 0 then do not allow (set limit to 9's) # !# else set limit to amt[ i ]. # !# # !# INPUT PARAMETERS: # !# ptxt - pointer to the parameter value # !# plgth - length of the parameter value # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^parse^amts( ptxt, plgth ); string .ptxt; int plgth; begin crncy^amt^valid := true; found := false; amt[ 0 ] := -1f; amt[ 1 ] := -1f; lgth := 0; i := j := k := 0; while i < plgth and k < $occurs( amt ) and crncy^amt^valid do begin if $numeric( ptxt[ i ] ) then begin if lgth = 0 then begin j := i; end; lgth := lgth + 1; found := true; end else if ptxt[ i ] = ";" then begin found := true; if lgth > 0 then begin if lgth > $len( bnet^array^g.failed^cvm^lmt^tbl^g. crncy^amt ) - dec^places then begin crncy^amt^valid := false; end else if ascii^fixed( ptxt[ j ], lgth, amt[ k ] ) then begin lgth := 0; end else begin crncy^amt^valid := false; end; end; k := k + 1; end else begin crncy^amt^valid := false; end; i := i + 1; end; !while loop if found and crncy^amt^valid then begin if lgth > 0 and k < $occurs( amt ) then begin if lgth > $len( bnet^array^g.failed^cvm^lmt^tbl^g. crncy^amt ) - dec^places then begin crncy^amt^valid := false; end else if ascii^fixed( ptxt[ j ], lgth, amt[ k ] ) then begin lgth := 0; end else begin crncy^amt^valid := false; end; end; for k := 0 to 1 do begin if amt[ k ] = -1f then begin ! ! always allowed ! bnet^array^g.failed^cvm^lmt^tbl^g[ tbl^idx ]. crncy^amt[ k ] ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g. crncy^amt ) * [ "9" ] ]; end else if amt[ k ] = 0f then begin ! ! not allowed ! bnet^array^g.failed^cvm^lmt^tbl^g[ tbl^idx ]. crncy^amt[ k ] ':=' [ $len( bnet^array^g. failed^cvm^lmt^tbl^g. crncy^amt ) * [ "0" ] ]; end else begin ! ! allowed when DE 6 <= table amount ! case dec^places of begin !0! ; !1! amt[ k ] := amt[ k ] * 10f; !2! amt[ k ] := amt[ k ] * 100f; !3! amt[ k ] := amt[ k ] * 1000f; !?! otherwise ; end; if not fixed^ascii^( bnet^array^g. failed^cvm^lmt^tbl^g[ tbl^idx ]. crncy^amt[ k ], amt[ k ] ) then begin crncy^amt^valid := false; end; end; !else end; !for loop end; end; ! of subproc sub^parse^amts ?page "util^build^failed^cvm^lmt^tbl" !################################################################# !# # !# This is the main body of PROC util^build^failed^cvm^lmt^tbl # !# # !################################################################# call sub^parse^crncy^cde; call sub^parse^amts( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; !proc util^build^failed^cvm^lmt^tbl #ADD 25860 UTIL^COLLAPSE^SEM if hdr.addl^data.info. #DELETE 25861 /25862 UTIL^COLLAPSE^SEM #ENDSCN = SW0H026 !#CMP2.28 02/08/13 BNETS 6120 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6120 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6120 * ******************************************************************************** #SCN = SW0H029 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6120 #NEWVERSION = 6121 #ADD 03821T0L ! 08FEB2013 bensone ! Symptom: Banknet Release 13.Q2 Mandates ! Problem: None ! Fix: 1. Maestro Acceptance at Parking Garages and Tollways. ! The LCONF parameter, SW-BNET-FAILED-CVM-LIMIT-999, ! has been extended to specify the max tran amount that ! may be authorized for Maestro chip requests with MCC ! value "4784", for which cardholder verification has ! not been successful. The new amount entry will be ! initialized during startup and warmboot. The new ! amounts for MCC 4784 will be added as the parameters ! are processed. Most of the processing for the ! parameter was moved from init^paramproc to a new ! procedure util^build^failed^cvm^lmt^tbl. ! Procs modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to BAUTILS, BNETATMS, BNETEMVS, BNETG, ! BNETLIBS, BNETS, DDLBATKN, DDLPSTKN, OKLIBTS, RTAUEMVS. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #004794 #ADD 10428Q06 INIT^BNET^G [ $len( bnet^array^g.failed^cvm^lmt^tbl^g ) * [ " " ] ]; #DELETE 10428Q07/10428Q0B INIT^BNET^G #ADD 13726R0a INIT^PARAMPROC ! ! Get the currency code from the parameter name ! Get the currency amount from the parameter value ! lgth := $len( bnet^array^g.failed^cvm^lmt^tbl^g. crncy^cde); call util^build^failed^cvm^lmt^tbl( lconf, j, crncy^cde^valid, crncy^amt^valid ); #DELETE 13726R0b/13726R17 INIT^PARAMPROC #ADD 13726R1J INIT^PARAMPROC if not crncy^amt^valid then #DELETE 13726R1K/13726R1k INIT^PARAMPROC #DELETE 13726R1u INIT^PARAMPROC #ADD 13726R24 INIT^PARAMPROC [ $len( bnet^array^g.failed^cvm^lmt^tbl^g ) * [ " " ] ]; #DELETE 13726R25/13726R26 INIT^PARAMPROC #DELETE 13726R28/13726R2A INIT^PARAMPROC #ADD 13726R2o INIT^PARAMPROC ! ! Get the currency code from the parameter name ! Get the currency amount from the parameter value ! call util^build^failed^cvm^lmt^tbl( lconf, j, crncy^cde^valid, crncy^amt^valid ); #DELETE 13726R2p/13726R3M INIT^PARAMPROC #ADD 13726R3Y INIT^PARAMPROC if not crncy^amt^valid then #DELETE 13726R3Z/13726R42 INIT^PARAMPROC #DELETE 13726R4C INIT^PARAMPROC #ADD 13726R4N INIT^PARAMPROC failed^cvm^lmt^tbl^g ) * [ " " ] ]; #DELETE 13726R4O/13726R4U INIT^PARAMPROC #ENDSCN = SW0H029 !#CMP2.28 03/13/13 BNETLIBS6207 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6207 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6207 * ******************************************************************************** #SCN = SW0H088 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6207 #NEWVERSION = 6208 #ADD 07850G0l ! 13MAR2013 wielerk ! Symptom: Process does not use a valid file format value when ! invoking hiswilf^tkn^add. ! Problem: The interface uses a hard-coded value of 1 to pass the ! ILF file format to the token utility. If the CNP ! enhancement is not configured, this index is empty. ! Fix: Modified the proc to move the logic that sets the index ! for the ILF add so it can be used earlier in the proc. ! Proc modified: util^ilf^add ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1252741. #ADD 30756 UTIL^ILF^ADD indx := -1; while ( indx := indx + 1 ) < $occurs( pct.ilf ) and dat <> pct.ilf[ indx ].dat for $len( pct.ilf.dat ) do; if pct.ilf[ indx ].fcb.filenum < 0 or indx > 4 then begin indx := cur^l; end; #REPLACE 30767 UTIL^ILF^ADD pct.ilf[ indx ].fcb.file^frmt ) then #ENDSCN = SW0H088 !#CMP2.28 05/16/13 BNETLIBS6208 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6208 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6208 * ******************************************************************************** #SCN = SW0H133 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6208 #NEWVERSION = 6209 #ADD 07850H0C ! 16MAY2013 wielerk ! Symptom: Process sends DE-35 ( Track2 ) for e-commerce ! transactions using a debit card. ! Problem: The interface was building DE-35 for e-commerce ! transactions when a debit card was used. ! Fix: Removed code that formatted DE-35 for e-commerce ! transactions using a debit card. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1442477. #DELETE 09271 /09285 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H133 !#CMP2.28 06/07/13 BNETLIBS6209 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6209 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6209 * ******************************************************************************** #SCN = SW0H163 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6209 #NEWVERSION = 6210 #ADD 07850I0B ! 07JUN2013 wielerk ! Symptom: Process does not provide correct currency code values ! in AFD 0220 completion when 0120 has zero amount. ! Problem: The interface was not adding the Orig Crncy token (BE), ! when formatting the PSTM 0220 when the amount is zero. ! Fix: Modified logic to force 0120 AFD with zero amount to ! add the BE token. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1454592. #ADD 23158 SEM^FRMT^XRQST^TO^PSTM^0200 if not sem^fncl^txn^d( sem ) and not( sem.typ = sem^auth^advice^d and sem^preauth^match^d( sem ) ) then #DELETE 23159 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0H163 !#CMP2.28 06/11/13 BNETLIBS6210 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6210 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6210 * ******************************************************************************** #SCN = SW0H167 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6210 #NEWVERSION = 6211 #ADD 07850J0B ! 11JUN2013 saderc ! Symptom: The interface is incorrectly setting the response code ! in the PSTM to a "113" (Timeout) for a reversal of a ! transaction approved by the HOST. ! Problem: The interface is setting the response code in the PSTM ! to a "113" for a 0420 reversal even though the original ! request was approved by the HOST. This logic is correct ! when processing an unmatched reversal. However, the ! response code should not be set to a decline if the ! original request is found in the ILF and it is approved. ! Fix: The interface was modified to remove the logic that sets ! the pstm.tran.resp-cde to "113" when the response code ! in the external reversal is an "82". ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1456224 #DELETE 23743 /23748 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0H167 !#CMP2.28 07/23/13 BNETLIBS6211 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6211 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6211 * ******************************************************************************** #SCN = SW0H187 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6211 #NEWVERSION = 6212 #ADD 07850K0H ! 23JUL2013 saderc ! Symptom: The Trace ID in the AFD preauth completion response sent ! to the terminal is the same as the value in the preauth ! response. ! Problem: The interface was recently modified to remove the logic ! that updates the trace-id field in the Interchange ! Compliance (20) token with the value in the 0130 ! response i.e. first 9 bytes of DE 63 (BankNet Data) ! followed by DE 15 (Settlement Date). The code was ! removed when support was added for Travel and ! Entertainment transactions, which requires that the ! trace ID should be the same for all T & E transactions. ! However, it shouldn't have been removed for AFD ! transactions. ! Fix: The interface was modified to restore the code that ! updated the trace-id field in the Interchange Compliance ! token when processing a 0130 response for AFD ! transactions. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1468683 #ADD 19202 SEM^FRMT^XRESP^TO^PSTM^0210 compliance^get^tkn.trace^id ':=' [ $len( compliance^get^tkn.trace^id ) * [" "] ]; compliance^get^tkn.life^cycle^ind ':=' [ $len( compliance^get^tkn.life^cycle^ind ) * [" "] ]; ! ! GCMS defines the Trace ID of DE 63-Transaction Life ! Cycle ID as the first 9 positions of DE63 of the ! auth message followed by DE15 of the auth message ! followed by two spaces. ! movl( compliance^get^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^get^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); #ENDSCN = SW0H187 !#CMP2.28 08/16/13 BNETDDLS6046 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6046 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6046 * ******************************************************************************** #SCN = SW0H221 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6046 #NEWVERSION = 6047 #ADD 00262t0B * 16AUG2013 bensone * Symptom: Banknet Release 13.Q4 Mandates * Problem: None * Fix: Global 130: Identification of Final Authorizations * Add final-auth-ind to DE 48 SE 61 SF 5 of the SEM. * Global 135: Visa Gateway Response Enhancements * Modified DE 48 SE 91 of the SEM to remove definitions * that supported lengths of 2 and 6 bytes. * Global 586: Globalization of New Value for Gratuity * Add gratuity-amt to the switch token and update the * token version to '16'. * Dependency: Apply fixes to PS60RTAU.AUTHLIBS, BNETATMS, BNETDDLS, * BNETG, BNETLIBS, BNETS, DDLFSTF, DDLGPSTM, DDLPSTKN, * OMFXS, PSTKNCVS, RQSTFS, SCRNSTF. * Run Make. * Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. * Reference: WO #005164 #ADD 01146 SEM * lgth will be '19', '15' or '04. #DELETE 01147 /01149 SEM #DELETE 01151 SEM #ADD 01154 SEM 10 reason-cde pic x(4). 10 fillrcde pic x(15). #DELETE 01155 /01157r01 SEM #ADD 01157a0f SEM 10 user-fld pic 9. 10 final-auth-ind pic 9. #DELETE 01157a0g SEM #ADD 02760l00 SAF-BNET #DELETE 02760m00 SAF-BNET #REPLACE 02760m01 SAF-BNET * Switch token version (ver-id) will be "16". #ADD 02760p02 SAF-BNET 02 gratuity-amt pic 9(12). #ENDSCN = SW0H221 !#CMP2.28 08/16/13 BNETG 6082 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6082 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6082 * ******************************************************************************** #SCN = SW0H222 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0002660S ! 16AUG2013 bensone ! Symptom: Banknet Release 13.Q4 Mandates ! Problem: None ! Fix: Global 130: Identification of Final Authorizations ! Add global process^nominal^auth^g to hold value for ! new LCONF SW-BNET-PROCESS-NOMINAL-AUTH. ! Add global send^final^auth^g to hold value for ! new LCONF SW-BNET-SEND-FINAL-AUTH. ! Global 555: Payment Account Status Inquiry Transaction ! Modify define pos^crd^vrfy^d to support merchandise ! return transaction. ! Modify define sem^acct^stat^inq^d to support the ! payment transaction. ! Add define sem^atc^update^d to separately identify ! ATC update transactions. ! Add define sem^test^recur^pmnt^d to separately ! identify "test" recurring payment transactions. ! Global Operations Bulletin No. 8, Travel and ! Entertainment Incremental Authorizations - Revised ! Guidance for Reversals ! Add define sem^mult^auth^rvsl^d to identify a reversal ! of a collective set of interrelated authorizations. ! Add global sem^mult^auth^rvsl^g to identify a reversal ! of a collective set of interrelated authorizations. ! Europe Operations Bulletin No. 2, Maestro No-CVM ! Acceptance at Transit Vending Machines ! Add define sem^failed^cvm^alwd^d to identify the ! Merchant Category Codes (MCCs) for which a CVM failure ! is permitted. ! Case #01249042 Setting of DE 61 for Transit Transactions ! Add define sem^transit^d to identify a transit ! merchant location. ! Dependency: Apply fixes to PS60RTAU.AUTHLIBS, BNETATMS, BNETDDLS, ! BNETG, BNETLIBS, BNETS, DDLFSTF, DDLGPSTM, DDLPSTKN, ! OMFXS, PSTKNCVS, RQSTFS, SCRNSTF. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #005164 #ADD 00166102 x.tran.tran^cde = "13" or x.tran.tran^cde = "14" ) and #DELETE 00166103 #ADD 0016650F define pos^t^and^e^d( x ) = ( ( x.retl^sic^cde >= "3351" and x.retl^sic^cde <= "3441" ) or ( x.retl^sic^cde >= "3501" and x.retl^sic^cde <= "3999" ) or x.retl^sic^cde = "4411" or x.retl^sic^cde = "7011" or x.retl^sic^cde = "7512" )#; #ADD 00233%05 define sem^failed^cvm^alwd^d( x ) = ( x.merch^typ = "4111" or x.merch^typ = "4112" or x.merch^typ = "4131" or x.merch^typ = "4784" or x.merch^typ = "7523" )#; define sem^mult^auth^rvsl^d( x ) = ( ( x.resp^cde <> "10" and rvsl.tran^amt > x.tran^amt for $len( x.tran^amt ) ) or ( x.tran^crncy^cde = x.iss^crncy^cde for $len( x.iss^crncy^cde ) and rvsl.crd^iss^amt > x.crd^iss^amt for $len( x.crd^iss^amt ) ) )#; define sem^transit^d( x ) = ( x.merch^typ = "4111" or x.merch^typ = "4131" )#; #ADD 0023310J ( ( x.proc^cde.byte[ 0 ] = sem^purchase^d or x.proc^cde.byte[ 0 ] = sem^pmnt^txn^d ) and #DELETE 0023310K #ADD 0023310M define sem^atc^update^d( x ) = ( x.proc^cde.byte[ 0 ] = sem^purchase^d and x.ntl^pos^data.cond^cde.byte[ 6 ] = "6" )#; define sem^test^recur^pmnt^d( x ) = ( x.proc^cde.byte[ 0 ] = sem^purchase^d and x.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and x.ntl^pos^data.cond^cde.byte[ 6 ] = "4" )#; #ADD 00435403 int process^nominal^auth^g; int send^final^auth^g; int sem^mult^auth^rvsl^g; #ADD 01366M0G ? get^next^arg, #ADD 01366L3P ! get^next^arg,! #ENDSCN = SW0H222 !#CMP2.28 08/16/13 BNETLIBS6212 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6212 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6212 * ******************************************************************************** #SCN = SW0H223 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6212 #NEWVERSION = 6213 #ADD 07850L0M ! 16AUG2013 bensone ! Symptom: Banknet Release 13.Q4 Mandates ! Problem: None ! Fix: Global 130: Identification of Final Authorizations ! The interface has been modified to differentiate ! between a normal authorization and a final ! authorization . ! Global 135: Visa Gateway Response Enhancements ! Modified processing for DE 48 SE 91 to no longer ! support lengths of 2 and 6 bytes. ! Global 501: Authorization Precision Initiative - ! Travel and Entertainment Processing Mandates Reminder ! In its issuer processing, add support to process a ! reversal message received from the network that ! arrives any time after the original authorization. ! Global 555: Payment Account Status Inquiry Transaction ! Add support for a payment account status inquiry from ! the network. POS Auth was also enhanced to ensure that ! cardholder accumulators and account balances are not ! updated for a payment account status inquiry with ! a non-zero transaction amount. ! Global 561: New Digital Enablement Service ! Add support in issuer processing to map the contents ! of DE 48 SE 33 subfields 1, 2 and 3 to the ! PAN Mapping token (Id = 'S8'). ! Global 581: Intro Transit Aggregation Rule for Maestro ! Add support for the new value '06' in DE 48 SE 64, ! subfield 1. ! Global 586: Globalization of New Value for Gratuity ! When DE 54 subfield 2 (Amount Type) contains new ! value '44' (Amount Gratuity), the amount will be ! stored in the Switch token. ! SAMEA 595: Enhancement to MasterCard Assurance Service ! for India ! Add support for a value of '2' in DE 48 SE 42, ! subfield 1, position 3 for mail/fax order. ! Global Operations Bulletin No. 8, Travel and ! Entertainment Incremental Authorizations - ! Revised Guidance for Reversals ! In its issuer processing, add support to process a ! single reversal message received from the network for ! a collective set of interrelated authorizations. ! Europe Operations Bulletin No. 2, Maestro No-CVM ! Acceptance at Transit Vending Machines ! Add support for Maestro authorization requests with ! specific MCC values for Transit Vending Machines that ! either have no CVM or indicate "CVM not successful". ! BASE24-pos shall not decline these transactions, for ! the sole reason that the authorization message either ! has no CVM or indicates "CVM not successful". ! Case #01215190 (TCC Validations Not Performed if ! NTWK-ASSIGN-TCC="Y") ! Ensure that the MCC is "6010" in a cash advance ! transaction, instead of checking for a TCC of "C" ! (there is a one-to-one relationship between these MCC ! and TCC values). ! Case #01249042 (Setting of DE 61 for Transit Trans) ! Add support to sent transit transactions to Banknet ! with the correct value in DE 61.10. Allow the MCC to ! be "4131" (in addition to "4111") when identifying a ! transaction from a transit merchant. ! Minor Errors in the BNET Interface ! Remove DE 48 SE 94 from reversal processing. ! Include DE 48 SE 96 in reversal processing. ! Procs added: pstm^frmt^sem^auth^typ ! sem^check^unmatchd^xrvsl^pos ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^ilf^get ! util^swi^tkn^init ! Dependency: Apply fixes to PS60RTAU.AUTHLIBS, BNETATMS, BNETDDLS, ! BNETG, BNETLIBS, BNETS, DDLFSTF, DDLGPSTM, DDLPSTKN, ! OMFXS, PSTKNCVS, RQSTFS, SCRNSTF. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #005164 #ADD 09286 PSTM^FRMT^0200^TO^XRQST if ( sem.merch^typ = manual^cash^disbursement^d and sem.proc^cde <> sem^cash^adv^d ) or ( sem.proc^cde = sem^cash^adv^d and sem.merch^typ <> manual^cash^disbursement^d ) then #DELETE 09287 /09295 PSTM^FRMT^0200^TO^XRQST #REPLACE 09705 PSTM^FRMT^0200^TO^XRQST end; #REPLACE 09707 /09707 OFFSET 0 PSTM^FRMT^0200^TO^XRQST end ! of if pos^data1^recur^pmnt or ps51^recur^pmnt ! else if sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.tran^amt = zeroes for $len( sem.tran^amt ) then begin ! Account status inquiry transaction ! movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "8" ); end; #ADD 09708 PSTM^FRMT^0200^TO^XRQST if sem.tran^amt <> zeroes for $len( sem.tran^amt ) then begin if sem.proc^cde.byte[ 0 ] <> sem^purchase^d then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind, "1" ); if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag <> "61" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag, "61" ); movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. lgth, "05" ); call ascii^integer( sem.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, 2, se^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; end else if found^pos^data1^tkn and pos^data1^tkn.auth^msg^ind <> " " and sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "4" then begin move( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind, pos^data1^tkn.auth^msg^ind ); if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag <> "61" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag, "61" ); movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. lgth, "05" ); call ascii^integer( sem.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, 2, se^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; end; if bnet^g.process^nominal^auth^g <> 0 and sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind <> "1" and not sem^preauth^match^d( sem ) and not sem^transit^d( sem ) then begin dec^places := get^iso^dec^places( sem.tran^crncy^cde ); if dec^places = -1 then begin return resp^format^error^pos^l; end; case dec^places of begin !0! tran^amt := pstm.tran.amt^1; !1! tran^amt := pstm.tran.amt^1 / 10f; !2! tran^amt := pstm.tran.amt^1 / 100f; !3! tran^amt := pstm.tran.amt^1 / 1000f; !?! otherwise call programmatic^dump( 311 ); end; if tran^amt = 1f then begin if bnet^g.process^nominal^auth^g = 1 then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end else if bnet^g.process^nominal^auth^g = 2 then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "8" ); end; end; end; if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "8" then begin movl( sem.tran^amt, zeroes, $len( sem.tran^amt ) ); end else begin call pstm^frmt^sem^auth^typ( sem, pstm ); end; end; ! of sem.tran^amt <> zeroes #ADD 09794 PSTM^FRMT^0200^TO^XRQST if sem^transit^d( sem ) and #DELETE 09795 PSTM^FRMT^0200^TO^XRQST #ADD 09979 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" then #DELETE 09980 PSTM^FRMT^0200^TO^XRQST #DELETE 11849 /11857 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 11885 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96 = "96" then begin movl( sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96, orig^sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96, $len( sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info. visa^mkt^spcfc^data^sub^fld^96 ); end; #ADD 13291 PSTM^FRMT^RESP^CDE^TO^SEM if sem^atc^update^d( sem ) or sem^acct^stat^inq^d( sem ) then #DELETE 13292 /13293 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 14649 PSTM^FRMT^SEM^ADDL^DATA if pt^srv^data^tkn.crdhldr^present^ind = "2" or pt^srv^data^tkn.crdhldr^present^ind = "3" then #DELETE 14650 PSTM^FRMT^SEM^ADDL^DATA #ADD 14662 PSTM^FRMT^SEM^ADDL^DATA if pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" then #DELETE 14663 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14671 /14681 PSTM^FRMT^SEM^ADDL^DATA #ADD 14848G01 PSTM^FRMT^SEM^ADDL^DATA transit^txn^tkn.txn^typ^ind <= "07" ) then #DELETE 14848G02/14848G03 PSTM^FRMT^SEM^ADDL^DATA #ADD 14957 PSTM^FRMT^SEM^ADDL^DATA ?section pstm^frmt^sem^auth^typ ?page "pstm^frmt^sem^auth^typ" !##################################################################### !# # !# PSTM^FRMT^SEM^AUTH^TYP # !# # !# This procedure determines whether the authorization request # !# should be identified as a normal authorization, # !# a pre-authorization or a final authorization. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# pstm - BASE24-pos message. # !# # !# OUTPUT PARAMETERS: # !# sem - External message. # !# # !##################################################################### proc pstm^frmt^sem^auth^typ( sem, pstm ); int .sem( sem^def ); int .pstm( pstm^def ); begin wlform( trace, "T - pstm^frmt^sem^auth^typ " ) struct .stf( stf^def ); int lgth; int sub^lgth; if trace^g.out^d then begin call log^message^( 1334, !routing code!, @trace, net.myname, evt^msg^severity^info^l ); end; if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" or sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind = "1" then begin ! ! the transaction already identified as a pre-authorization ! or a final authorization ! return; end; call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if ( stf.send^pre^auth = "1" or stf.send^pre^auth = "2" or stf.send^pre^auth = "3" or stf.send^pre^auth = "4" ) and sem.addl^data.info.trc^id^sub^fld^63 <> [ $len( sem.addl^data.info.trc^id^sub^fld^63 ) * [" "] ] then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); return; end; if ( stf.send^pre^auth = "2" or stf.send^pre^auth = "3" or stf.send^pre^auth = "4" ) and ( pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "5" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); return; end; if ( stf.send^pre^auth = "3" or stf.send^pre^auth = "4" ) and ( pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) and ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); return; end; if stf.send^pre^auth = "4" and ( pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "0" and not util^debit^crd^typ( pstm.rte.srv ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); return; end; end; !of util^stf^get if bnet^g.send^final^auth^g <> 0 then begin if bnet^g.send^final^auth^g = 2 then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind, "1" ); if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag <> "61" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag, "61" ); movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. lgth, "05" ); call ascii^integer( sem.addl^data.info. ext^cond^cdes^sub^fld^61.lgth, 2, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; return end; ! of send^final^auth^g = 2 if bnet^g.send^final^auth^g = 1 then begin if pstm.tran.dft^capture^flg = "1" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind, "1" ); if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag <> "61" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag, "61" ); movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61. lgth, "05" ); call ascii^integer( sem.addl^data.info. ext^cond^cdes^sub^fld^61. lgth, 2, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; return end; end; ! of send^final^auth^g = 1 end; ! of send^final^auth^g <> 0 end; !of pstm^frmt^sem^auth^typ #ADD 15424 SDF^FRMT^0620^TO^XADMIN ?section sem^check^unmatchd^xrvsl^pos ?page "sem^check^unmatchd^xrvsl^pos" !##################################################################### !# # !# SEM^CHECK^UNMATCHD^XRVSL^POS # !# # !# This procedure determines whether the authorization being # !# reversed is too old to be found on the ILF. # !# # !# INPUT PARAMETERS : # !# rvsl - External reversal message. # !# pstm - BASE24-pos message. # !# # !# OUTPUT PARAMETERS : # !# # !# RETURN: # !# True - the authorization is too old to be found on the ILF # !# False - the authorization should be found on the ILF # !# # !##################################################################### int proc sem^check^unmatchd^xrvsl^pos( rvsl, pstm ); int .rvsl( sem^def ); int .pstm( pstm^def ); begin wlform( trace, "T - sem^check^unmatchd^xrvsl^pos " ) int(32) tran^jday; int(32) setl^jday; int num^of^days; int num^of^ilfs; int .pbit^map := wordaddr( @rvsl.pbit^map ); int yy; string orig^setl^dat[0:5]; if trace^g.out^d then begin call log^message^( 1335, !routing code!, @trace, net.myname, evt^msg^severity^info^l ); end; if rvsl.proc^cde <> sem^purchase^d or rvsl.addl^data.info.trc^id^sub^fld^63.tag = " " then begin return false; end; orig^setl^dat ':=' pct.setl.swi^dat for 2 bytes & rvsl.addl^data.info.trc^id^sub^fld^63.dat^setl for 4 bytes; if compare^ascii^yymmdd( orig^setl^dat, 2, pct.setl.swi^dat ) then ! ! orig^setl^dat > pct.setl.swi^dat ! begin call ascii^integer( orig^setl^dat, 2, yy ); decrement^d( yy ); call integer^ascii( orig^setl^dat, 2, yy ); end; tran^jday := yymmdd^to^julian( pct.setl.swi^dat ); setl^jday := yymmdd^to^julian( orig^setl^dat ); num^of^days := $int( tran^jday - setl^jday ); num^of^ilfs := 2; if bnet^g.enhncd^ilf^match^iss^g then begin if rvsl.addl^data.info.tran^cat^cde = "T" or rvsl.addl^data.info.tran^cat^cde = "U" or ( ntl^pos^data^bit^d and not crdhldr^prsn^d( rvsl ) ) then begin ! ! CNP Card not present ! num^of^ilfs := 4; end; end; ! of enhncd^ilf^match^iss^g if num^of^days < num^of^ilfs then begin return false; end else begin return true; end; end; !of proc sem^check^unmatchd^xrvsl^pos #ADD 15548 SEM^FRMT^AMT^TO^PSTM^AMT if sem^acct^stat^inq^d( sem ) or sem^atc^update^d( sem ) or sem^test^recur^pmnt^d ( sem ) then #DELETE 15549 /15553 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 15555 SEM^FRMT^AMT^TO^PSTM^AMT if sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.tran^amt <> zeroes for $len( sem.tran^amt ) then #DELETE 15556 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 15560 SEM^FRMT^AMT^TO^PSTM^AMT if base24^rel^g < 6 or sem.tran^amt = zeroes for $len( sem.tran^amt ) then #ADD 16640 SEM^FRMT^AMT^TO^PSTM^AMT end; if bnet^g.sem^mult^auth^rvsl^g then begin call ascii^fixed^( sem.crd^iss^amt, pstm.tran.amt^1 ); if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 1, pstm.tran.amt^1 ) then begin return false; end; end; if bnet^g.sem^mult^auth^rvsl^g or ( replace^amt^bit^d and sem.replace^amts.tran^amt <> zeroes for $len( sem.replace^amts.tran^amt ) ) then begin #ADD 17782 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem^atc^update^d( sem ) or sem^test^recur^pmnt^d ( sem ) then #DELETE 17783 /17788 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 18059 SEM^FRMT^SDF^PRIKEY !#####################################################################! !# #! !# sem^frmt^unmatchd^xrvsl^to^pstm #! !# #! !# This procedure formats a BASE24-pos reversal message from a #! !# Banknet reversal message. #! !# #! !# INPUT PARAMETERS: #! !# rvsl - pointer to a Banknet external reversal #! !# orig^auth^too^old - original authorization is too old to be #! !# found on the ILF #! !# #! !# OUTPUT PARAMETERS: #! !# pstm - pointer to a BASE24-pos reversal #! !# #! !#####################################################################! #DELETE 18060 /18073 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #REPLACE 18074 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM proc sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm, orig^auth^too^old ); #REPLACE 18077 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int orig^auth^too^old; #ADD 18079 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int ofst; #ADD 18082 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM string err^flg; #ADD 18098 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if base24^rel^g >= 5 then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if orig^auth^too^old then begin movd( err^flg, "Y" ); end else begin movd( err^flg, "Z" ); end; call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, ofst, false, ! tkn^lgth !, pstm.data^flag, err^flg ); end; ! of base24^rel^g >= 5 #ADD 18111 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM else if orig^auth^too^old then begin movd( pstm.typ, force^post^d ); movd( pstm.tran.tran^cde.tc, adj^pur^d ); end #DELETE 19751 /19770 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 19804 /19823 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 19882 /19901 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20358 SEM^FRMT^XRQST^TO^PSTM^0200 wlform( no^room, "NO ROOM TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( erradd^tkn^, "UNABLE TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\," ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: # " ) #ADD 20389 SEM^FRMT^XRQST^TO^PSTM^0200 struct .pan^mapping^tkn( pan^mapping^tkn^def ); #ADD 20441 SEM^FRMT^XRQST^TO^PSTM^0200 int .pan^mapping^get^tkn( pan^mapping^tkn^def ); #ADD 20588 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^acct^stat^inq^d( sem ) and sem.tran^amt <> zeroes for $len( sem.tran^amt ) then begin movd( pstm.pre^auth^opt, "R" ); end; #ADD 21397 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" then begin ! !Subelement 33 - PAN Mapping File Information ! tkn^id ':=' pan^mapping^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pan^mapping^get^tkn, tkn^lgth ) then begin ! ! Update PAN Mapping Token ! move( pan^mapping^get^tkn.acct^num^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data ); move( pan^mapping^get^tkn.acct^num, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); move( pan^mapping^get^tkn.exp^dat, sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag^data ); end else begin ! ! Add PAN Mapping Token ! call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, pan^mapping^tkn ); move( pan^mapping^tkn.acct^num^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data ); move( pan^mapping^tkn.acct^num, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data ); move( pan^mapping^tkn.exp^dat, sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag^data ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pan^mapping^tkn, $len( pan^mapping^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3265, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3266, ! routing code !, @erradd^tkn^, net.myname, evt^msg^severity^crit^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3266 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add end; ! of Add PAN Mapping Token end; ! of paypass^mapping^sub^fld^33.tag = "33" #ADD 21424 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. final^auth^ind <> " " and sem.tran^amt <> zeroes for $len( sem.tran^amt ) and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "0" then begin move( pos^data1^tkn.auth^msg^ind, sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind ); add^pos^data1 := true; end; #ADD 21460 SEM^FRMT^XRQST^TO^PSTM^0200 end else begin movd( pos^data1^tkn.failed^cvm^alwd, "0" ); #REPLACE 21465G07 SEM^FRMT^XRQST^TO^PSTM^0200 pos^data1^tkn.failed^cvm^alwd = "0" then #ADD 21468 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and util^maestro( sem.banknet^data.ntwk^id^cde ) and pos^data1^tkn.failed^cvm^alwd = " " and sem^failed^cvm^alwd^d( sem ) then begin movd( pos^data1^tkn.failed^cvm^alwd, "1" ); add^pos^data1 := true; end; #ADD 22587 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" ) and #DELETE 22588 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31507 SUB^ILF^GET^REDUCED^PRIKEY ( ( pos^t^and^e^d( pstm ) and ilf.pos.orig^crncy^cde = pstm.orig^crncy^cde for $len( pstm.orig^crncy^cde ) ) or ( ilf.pos.tran.amt^1 = pstm.tran.amt^1 and ilf.pos.retl^id = pstm.retl^id for $len( ilf.pos.retl^id ) ) ) and #DELETE 31508 /31510 SUB^ILF^GET^REDUCED^PRIKEY #ADD 36343 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "16"; #DELETE 36344 UTIL^SWI^TKN^INIT #ADD 36680 UTIL^SWI^TKN^INIT if addl^amt^bit^d then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end else begin cnt := 0; end; for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ = "44" then begin move( bnet^tkn^buf.gratuity^amt, sem.addl^amt.info[ i ].amt ); end; end; end; #ENDSCN = SW0H223 !#CMP2.28 08/16/13 BNETS 6121 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6121 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6121 * ******************************************************************************** #SCN = SW0H226 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6121 #NEWVERSION = 6122 #ADD 03821U0M ! 16AUG2013 bensone ! Symptom: Banknet Release 13.Q4 Mandates ! Problem: None ! Fix: Global 130: Identification of Final Authorizations ! Add support for LCONF paramaters ! SW-BNET-PROCESS-NOMINAL-AUTH and ! SW-BNET-SEND-FINAL-AUTH. ! Global 501: Authorization Precision Initiative - ! Travel and Entertainment Processing Mandates Reminder ! In its issuer processing, add support to process a ! reversal message received from the network that ! arrives any time after the original authorization. ! Global Operations Bulletin No. 8, Travel and ! Entertainment Incremental Authorizations - ! Revised Guidance for Reversals ! In its issuer processing, add support to process a ! single reversal message received from the network for ! a collective set of interrelated authorizations. ! Minor Error in the BNET Interface ! Compare station type as an integer during a warmboot. ! Proc added: pstm^0220^route ! Procs modified: cmd^warmboot ! init^bnet^g ! init^paramproc ! pstm^0200^request ! pstm^0220^force^post ! sem^acq^rvsl^rqst^pos ! sem^reversal^advice ! sem^reversal^advice^pos ! Dependency: Apply fixes to PS60RTAU.AUTHLIBS, BNETATMS, BNETDDLS, ! BNETG, BNETLIBS, BNETS, DDLFSTF, DDLGPSTM, DDLPSTKN, ! OMFXS, PSTKNCVS, RQSTFS, SCRNSTF. ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA. ! Reference: WO #005164 #ADD 08366T02 CMD^WARMBOOT pct.station[ i ].typ <> pcpl.station[ i ].typ then #DELETE 08366T03/08366T04 CMD^WARMBOOT #ADD 10428S03 INIT^BNET^G bnet^g.process^nominal^auth^g := 0; bnet^g.send^final^auth^g := 0; bnet^g.sem^mult^auth^rvsl^g := false; #ADD 12591Q07 INIT^PARAMPROC wlform( inv^param, "\? param contains invalid data. " ',' "Default of # is used." ) #ADD 12676S02 INIT^PARAMPROC "P", "SW-BNET-PROCESS-NOMINAL-AUTH ", "P", "SW-BNET-SEND-FINAL-AUTH ", #ADD 13500S0U INIT^PARAMPROC ! ! SW-BNET-PROCESS-NOMINAL-AUTH ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.process^nominal^auth^g ) then begin bnet^g.process^nominal^auth^g := 0; call log^message^( 1330, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. process^nominal^auth^g ); end else if bnet^g.process^nominal^auth^g < 0 or bnet^g.process^nominal^auth^g > 2 then begin bnet^g.process^nominal^auth^g := 0; call log^message^( 1331, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. process^nominal^auth^g ); end; end; ! ! SW-BNET-SEND-FINAL-AUTH ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.send^final^auth^g ) then begin bnet^g.send^final^auth^g := 0; call log^message^( 1332, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.send^final^auth^g ); end else if bnet^g.send^final^auth^g < 0 or bnet^g.send^final^auth^g > 2 then begin bnet^g.send^final^auth^g := 0; call log^message^( 1333, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.send^final^auth^g ); end; end; #ADD 15176 PSTM^0200^REQUEST fixed tran^amt; #ADD 15196 PSTM^0200^REQUEST int msg^sent := false; #ADD 15197 PSTM^0200^REQUEST int pstm^mult^auth^rvsl := false; #ADD 15499 SUB^APPRV^BLIND if pstm.tran.amt^2 > pstm.tran.amt^1 then begin call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! ilf^sem^lgth !, sub^format^error^l ); return; end; #DELETE 15525 /15541 SUB^APPRV^BLIND #ADD 15542 SUB^APPRV^BLIND if pos^adjust^d( pstm ) and sem^t^and^e^d( sem ) then begin call ascii^fixed^( sem.tran^amt, tran^amt ); if pstm.tran.amt^1 <> tran^amt then begin pstm^mult^auth^rvsl := true; call fixed^ascii^( sem.tran^amt, pstm.tran.amt^1 ); end; end; #ADD 15567 SUB^APPRV^BLIND if pstm^mult^auth^rvsl then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, sem, ilf^sem^lgth, sub^ok^l ); end else begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm, sem ); end; #DELETE 15568 /15572 SUB^APPRV^BLIND #ADD 15583 SUB^APPRV^BLIND if pos^t^and^e^d( pstm ) then begin call pstm^0200^route( susp, resp^no^error^pos^l, sub^ok^l, msg^sent ); if msg^sent then begin return; end; end; #ADD 15766 SUB^PSTM^ROUTE if pos^preauth^comp^d( pstm ) or pos^adjust^d( pstm ) then #DELETE 15767 SUB^PSTM^ROUTE #ADD 16089 PSTM^0220^FORCE^POST fixed tran^amt; #ADD 16109 PSTM^0220^FORCE^POST int pstm^mult^auth^rvsl := false; #ADD 16249 PSTM^0220^FORCE^POST if pstm.tran.amt^2 > pstm.tran.amt^1 then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, ! sem !, ! ilf^sem^lgth !, sub^format^error^l ); return; end; #ADD 16269 PSTM^0220^FORCE^POST if pos^adjust^d( pstm ) and sem^t^and^e^d( sem ) then begin call ascii^fixed^( sem.tran^amt, tran^amt ); if pstm.tran.amt^1 <> tran^amt then begin pstm^mult^auth^rvsl := true; call fixed^ascii^( sem.tran^amt, pstm.tran.amt^1 ); end; end; #DELETE 16270 /16284 PSTM^0220^FORCE^POST #ADD 16322 PSTM^0220^FORCE^POST if pstm^mult^auth^rvsl then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, sem, ilf^sem^lgth, sub^ok^l ); end else begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm, sem ); end; #DELETE 16323 /16327 PSTM^0220^FORCE^POST #ADD 16339 PSTM^0220^FORCE^POST if pos^t^and^e^d( pstm ) then begin if pstm^0220^route( susp ) then begin return; end; end; #ADD 16405 PSTM^0220^FORCE^POST if pstm^0220^route( susp ) then begin return; end; #ADD 16456 PSTM^0220^FORCE^POST ?section pstm^0220^route ?page "pstm^0220^route" !##################################################################### !# # !# PSTM^0220^ROUTE # !# # !# This procedure will attempt to perform alternate routing on a # !# PSTM 0220 message (an adjustment advice or # !# a pre-auth completion advice). # !# # !# INPUT PARAMETERS : # !# susp - Suspense record. # !# # !# OUTPUT PARAMETERS : # !# # !# RETURN: # !# TRUE - alternate route found, invoke alternate routing. # !# FALSE - do not invoke alternate routing. # !# # !##################################################################### int proc pstm^0220^route( susp ); int .susp( susp^bnet^def ); begin int .pstm( pstm^def ) := @susp.intrn^msg; string dest[ 0:15 ] := [ 16 * [" "] ]; dest ':=' susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ); call util^pos^alt^routing( pstm, dest ); if dest = susp.orig^net^pro.byte[ 0 ] for $len( susp.orig^net^pro ) then begin return false; end; call util^send^pstm( pstm, dest ); return true; end; #ADD 17570 SEM^ACQ^RVSL^RQST^POS int orig^auth^too^old := false; #ADD 17672 FRMT^AND^SEND^ACQ^RVSL^RESP orig^auth^too^old := sem^check^unmatchd^xrvsl^pos( rvsl, pstm ); if frwd^unmatched^rvsls^g = false and orig^auth^too^old = false then #DELETE 17673 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 17754 FRMT^AND^SEND^ACQ^RVSL^RESP pstm, orig^auth^too^old ); #DELETE 17755 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 17976 FRMT^AND^SEND^ACQ^RVSL^RESP bnet^g.sem^mult^auth^rvsl^g := false; if sem^mult^auth^rvsl^d( sem ) and sem^t^and^e^d( sem ) then begin bnet^g.sem^mult^auth^rvsl^g := true; end else if sem^mult^auth^rvsl^d( sem ) and not sem^t^and^e^d( sem ) then #DELETE 17977 /17979 FRMT^AND^SEND^ACQ^RVSL^RESP #ADD 18055 FRMT^AND^SEND^ACQ^RVSL^RESP if bnet^g.sem^mult^auth^rvsl^g then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, pstm, rvsl, $len( sem^def ), sub^ok^l ); end else #ADD 22416 SEM^REVERSAL^ADVICE if updt^ilf and bnet^g.sem^mult^auth^rvsl^g then begin call util^ilf^add( dat, ilf.prikey, $len( ilf.prikey ), ilf.rec^typ, msg^sym^source, base24^msg, rvsl, $len( sem^def ), sub^ok^l ); end else #ADD 22476 SEM^REVERSAL^ADVICE^POS int orig^auth^too^old := false; #ADD 22494 SUB^PROCESS^UNMATCHD^POS^RVSL orig^auth^too^old := sem^check^unmatchd^xrvsl^pos( rvsl, pstm ); if frwd^unmatched^rvsls^g = false and orig^auth^too^old = false then #DELETE 22495 SUB^PROCESS^UNMATCHD^POS^RVSL #ADD 22526 SUB^PROCESS^UNMATCHD^POS^RVSL call sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm, orig^auth^too^old); #DELETE 22527 SUB^PROCESS^UNMATCHD^POS^RVSL #ADD 22637 SUB^PROCESS^UNMATCHD^POS^RVSL bnet^g.sem^mult^auth^rvsl^g := false; if sem^t^and^e^d( sem ) and sem^mult^auth^rvsl^d( sem ) then begin bnet^g.sem^mult^auth^rvsl^g := true; end; #ENDSCN = SW0H226 !#CMP2.28 08/30/13 BNETLIBS6213 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6213 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6213 * ******************************************************************************** #SCN = SW0H268 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6213 #NEWVERSION = 6214 #ADD 07850M1M ! 30AUG2013 wielerk ! Symptom: Recent enhancement sends de-48.61.5 ( addl data.pos data ! extended codes ) incorrectly. ! Problem: The module was not utilizing the newest param when ! identifying a transaction as a final auth. ! Fix: Modified logic to check bnet^g.send^final^auth^g along ! with a check on external proc code to determine to send ! de-48.61.5. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1479900. #REPLACE 09708M03/09708M03 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde.byte[ 0 ] <> sem^purchase^d and bnet^g.send^final^auth^g <> 0 then begin #DELETE 09708M04 PSTM^FRMT^0200^TO^XRQST #REPLACE 09708M0L/09708M0N PSTM^FRMT^0200^TO^XRQST end; if sem.proc^cde.byte[ 0 ] = sem^purchase^d and found^pos^data1^tkn and #ENDSCN = SW0H268 !#CMP2.28 10/02/13 BNETS 6122 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6122 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6122 * ******************************************************************************** #SCN = SW0H304 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6122 #NEWVERSION = 6123 #ADD 03821V0a ! 02OCT2013 wielerk ! Symptom: Reversals sent to Mastercard are rejected. ! Problem: Some merchants will attempt to enter reversals of ! Account Status inquiry transactions. ! MasterCard will reject these reversals because of DE-4 ! containing zeroes and DE-061.SF-07 = "8". ! Fix: Added logic to identify non-financial reversals and to ! suppress sending them to Mastercard. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fixes to BNETS and BNETLIBS. Run Make. ! Reference: Case #1485241. #ADD 16840 PSTM^0420^REVERSAL if sem.typ = "04" or not sem^fncl^txn^d( sem ) then begin ! ! Adjustment was previously converted to a reversal, or ! this could be a reversal of an account status inquiry ! Update the ILF and return. ! if not util^ilf^updt( fnum, ilf, ilf^lgth, sub^fail^pre^auth^l, pstm ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^fail^pre^auth^l ); end; #DELETE 16841 /16853 PSTM^0420^REVERSAL #ENDSCN = SW0H304 !#CMP2.28 10/02/13 BNETLIBS6214 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6214 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6214 * ******************************************************************************** #SCN = SW0H305 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6214 #NEWVERSION = 6215 #ADD 07850N0C ! 02OCT2013 wielerk ! Symptom: Reversals sent to Mastercard are rejected. ! Problem: Some merchants will attempt to enter reversals of ! Account Status inquiry transactions. ! MasterCard will reject these reversals because of DE-4 ! containing zeroes and DE-061.SF-07 = "8". ! Fix: Added logic to additionally limit the setting of account ! status inquiry transactions to purchase transactions. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to BNETLIBS and BNETS. Run Make. ! Reference: Case #1485241. ! ! 02OCT2013 wielerk ! Symptom: Gambling txns with Maestro cards are declined if CVC2 is ! not present. ! Problem: For the Maestro cards, MasterCard scheme mandates to ! Issuers, a gambling transaction that is an e-commerce ! transaction that has had Secure Code checks take place. ! Where the CV2 is missing this must not prevent the ! transaction authorising as long as Secure Code checks ! taken place. ! Fix: Added logic to determine if Gambling transactions are to ! be denied by the interface if de-48.se-43 ( UCAF ) is ! spaces. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1484045. #REPLACE 09708M0q/09708M0q OFFSET 0 PSTM^FRMT^0200^TO^XRQST not sem^transit^d( sem ) and sem.proc^cde.byte[ 0 ] = sem^purchase^d then #ADD 10026 PSTM^FRMT^0200^TO^XRQST sem.proc^cde <> sem^pmnt^txn^d then begin if sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * [" "] ] and sem.addl^data.info.cvc2^sub^fld^92.tag^data = [ $len( sem.addl^data.info.cvc2^sub^fld^92.tag^data ) * [" "] ] then begin return resp^tran^bad^pos^l; end; end; #DELETE 10027 /10036 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H305 !#CMP2.28 10/03/13 BNETLIBS6215 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6215 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6215 * ******************************************************************************** #SCN = SW0H307 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6215 #NEWVERSION = 6216 #ADD 07850O0S ! 03OCT2013 wielerk ! Symptom: PANs that begin with "59" are denied by the interface. ! Problem: In the past, cards beginning '59' required special ! processing because they contained a country code on ! Track-2 (between the PAN and the expiration date). ! The requirement to include de-20 ( country code ) is ! an outdated one and Product Management has decided to ! not to treat this prefix differently. ! Fix: Removed logic that prevented PANs that start with "59" ! from being passed to Mastercard. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0402^to^sem ! sdf^frmt^0220^to^xadv ! sdf^frmt^0422^to^xrvsl ! sdf^frmt^0620^to^xadmin ! sem^frmt^nmm^request ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1462699. #ADD 08863 PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.pan.lgth, $min( panlgth, $len( sem.pan.num ) ) ); movl ( sem.pan.num, pan, $min( panlgth, $len( sem.pan.num ))); #DELETE 08864 /08876 PSTM^FRMT^0200^TO^XRQST #ADD 11425 PSTM^FRMT^0402^TO^SEM call integer^ascii^( sem.pan.lgth, $min( panlgth, $len( sem.pan.num ) ) ); movl ( sem.pan.num, pan, $min( panlgth, $len(sem.pan.num) ) ); #DELETE 11426 /11438 PSTM^FRMT^0402^TO^SEM #REPLACE 15150 OFFSET 1 SDF^FRMT^0220^TO^XADV ( lgth <= 0 ) or ( lgth > 19 ) then #REPLACE 15258 SDF^FRMT^0422^TO^XRVSL ( lgth <= 0 ) or ( lgth > 19 ) then #DELETE 15259 SDF^FRMT^0422^TO^XRVSL #REPLACE 15372 SDF^FRMT^0620^TO^XADMIN ( lgth <= 0 ) or ( lgth > 19 ) then #DELETE 15373 SDF^FRMT^0620^TO^XADMIN #DELETE 17291 /17295 SEM^FRMT^NMM^REQUEST #REPLACE 17306 SEM^FRMT^NMM^REQUEST ! Only GSI users can use DE 70-Network Management Information ! #ENDSCN = SW0H307 !#CMP2.28 10/15/13 BNETS 6123 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6123 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6123 * ******************************************************************************** #SCN = SW0H317 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6123 #NEWVERSION = 6124 #ADD 03821W0C ! 15OCT2013 wielerk ! Symptom: PSTM 0220 messages are not alt. routing correctly. ! Problem: If a PSTM 0220 requires alternate routing, SUSP ! must be initilized to be passed to the alternate ! routing logic. ! Fix: Added logic to initialize the SUSP buffer. ! Proc modified: pstm^0220^force^post ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1491500. ! ! 15OCT2013 wielerk ! Symptom: BNET abends with trap #2. ! Problem: If a 0130 matches on an ILF record that has no internal ! message, PSTM fields are not initialized. ! Fix: Added logic to check the ILF internal message length ! for a value greater than 0 to continue processing. ! Proc modified: sem^advice^response ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #1491862. #REPLACE 16115 PSTM^0220^FORCE^POST string .s^sym^source := byteaddr( @msg^sym^source ); #ADD 16154 PSTM^0220^FORCE^POST set ( susp.rec^typ, pos^l ); set ( susp.intrn^msg^lgth, msg^length ); if pstm.ast^rtn^pro^name <> [ $len( pstm.ast^rtn^pro^name ) * [ " "] ] and pstm.ast^rtn^pro^name <> [ $len( pstm.ast^rtn^pro^name ) * [ "0"] ] then begin mov^( susp.orig^net^pro, pstm.ast^rtn^pro^name ); end else begin mov^( susp.orig^net^pro, pstm.orig^pro^name ); end; #ADD 16159 PSTM^0220^FORCE^POST movl ( susp.intrn^msg, pstm.typ, susp.intrn^msg^lgth ); if s^sym^source = net.myname for 16 then begin ! ! ensure the source and destination are not the same process ! call integer^ascii^( pstm.tran.resp^cde, resp^invalid^route^pos^l ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len(susp.prikey), pos^l, msg^sym^source, pstm, !sem!, !sem^lgth!, sub^fail^pre^auth^l ); return; end; #REPLACE 16322V07 PSTM^0220^FORCE^POST msg^sym^source, #REPLACE 16343 PSTM^0220^FORCE^POST msg^sym^source, #REPLACE 16375 PSTM^0220^FORCE^POST msg^sym^source, #ADD 18814 SEM^ADVICE^RESPONSE if ilf.intrn^msg^savearea^lgth = 0 then begin call util^ilf^add( dat, susp.prikey, $len(susp.prikey), susp.rec^typ, msg^sym^source, ! pstm !, sem, $len(sem^def), sub^rvsl^not^found^l ); return; end; #ENDSCN = SW0H317 !#CMP2.28 10/29/13 BNETLIBS6216 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6216 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6216 * ******************************************************************************** #SCN = SW0H349 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6216 #NEWVERSION = 6217 #ADD 07850P0J ! 29OCT2013 wielerk ! Symptom: PSTM 0220 messages formatted for partial reversals are ! not SPROUTE routed. ! Problem: When formatting the PSTM 0220, the routing fields from ! the original response were not cleared causing RTAU to ! execute logic that prevented SPROUTE routing. ! Fix: Added logic to reset routing variables. ! Procs modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1493069. #ADD 16646 SEM^FRMT^AMT^TO^PSTM^AMT ! ! For SPROUTE routing to work across nodes ! the routing variables must be reset. ! move( pstm.rte.auth^ind, blanks ); move( pstm.auth^ind2, blanks ); mov^( pstm.router1^name, blanks ); mov^( pstm.router2^name, blanks ); #ENDSCN = SW0H349 !#CMP2.28 11/05/13 BNETG 6083 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6083 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6083 * ******************************************************************************** #SCN = SW0H358 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0002670d ! 05NOV2013 wielerk ! Symptom: MCC 7995 for payment transactions are rejected. ! Problem: MCC 7995 is overriding processing based on transaction ! subtype, causing payment transactions to be rejected ! by Mastercard. ! Fix: Modified defines pos^pmnt^adj^d and pos^pmnt^d to ! remove SIC 7995. ! Dependency: Apply fix to BNETG. Run Make. ! Reference: Case #1496849. #REPLACE 00166502/00166503 x.retl^sic^cde = "6533" ) ) )#; #REPLACE 0016650A/0016650B x.retl^sic^cde = "6533" ) ) )#; #ENDSCN = SW0H358 !#CMP2.28 11/22/13 BNETLIBS6217 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6217 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6217 * ******************************************************************************** #SCN = SW0H365 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6217 #NEWVERSION = 6218 #ADD 07850Q0B ! 22NOV2013 wielerk ! Symptom: SEM 0420 messages formatted for partial reversals can ! incorrectly set de-39 ( resp cde ). ! Problem: When formatting the SEM 0420 the interface was editing ! de-39 to be equal "10" and then change the value to ! "32" ( partial reversal ). The value of "32" should not ! be sent unless de-95 ( replacement amount ) contains a ! value not zero. ! Fix: Modified logic to relocate the edit of de-39 = "10" and ! to add an edit of de-95 to accommodate de-39 = "32". ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1502278. #DELETE 11507 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 11646 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.resp^cde = "10" then begin ! ! Partial approval, leave de-39 as it is. ! end else #DELETE 11663 /11671 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 11902 PSTM^FRMT^0420^TO^ACQ^XRVSL if replace^amt^bit^d and sem.replace^amts.tran^amt <> [ $len( sem.replace^amts.tran^amt ) * [" "] ] and sem.replace^amts.tran^amt <> [ $len( sem.replace^amts.tran^amt ) * ["0"] ] then begin ! ! Partial reversal. ! movd( sem.resp^cde, "32" ); end; #DELETE 11904 /11907 PSTM^FRMT^0420^TO^ACQ^XRVSL #ENDSCN = SW0H365 !#CMP2.28 12/24/13 BNETG 6084 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6084 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6084 * ******************************************************************************** #SCN = SW0H380 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0002680A ! 23DEC2013 wielerk ! Symptom: Unmatched external reversals are forwarded to the Issuer ! even if original was never received. ! Problem: Certain transactions with DE-48.SE-63 set to zeroes can ! be created and these reversals will pass through BNET ! as PSTM adjustments. ! Fix: Added valid^date^yymmdd as a sourced in utility. ! Dependency: Apply fixes to BNETLIBS and BNETG. Run Make. ! Reference: Case #1510376. #ADD 01366M0V ? valid^date^yymmdd, #ADD 01366L43 ! valid^date^yymmdd, #ENDSCN = SW0H380 !#CMP2.28 12/24/13 BNETLIBS6218 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6218 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6218 * ******************************************************************************** #SCN = SW0H381 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6218 #NEWVERSION = 6219 #ADD 07850R0E ! 23DEC2013 wielerk ! Symptom: Unmatched external reversals are forwarded to the Issuer ! even if original was never received. ! Problem: Certain transactions with DE-48.SE-63 set to zeroes can ! be created and these reversals will pass through BNET ! as PSTM adjustments. ! Fix: Modified logic to disallow reversals with zeroes in ! DE-48.SE-63. ! Proc modified: sem^check^unmatchd^xrvsl^pos ! Dependency: Apply fixes to BNETLIBS and BNETG. Run Make. ! Reference: Case #1510376. #ADD 15424M0q SEM^CHECK^UNMATCHD^XRVSL^POS if not valid^date^yymmdd( orig^setl^dat ) then begin return false; end; #DELETE 15424M0r SEM^CHECK^UNMATCHD^XRVSL^POS #ENDSCN = SW0H381 !#CMP2.28 01/02/14 BNETLIBS6219 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6219 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6219 * ******************************************************************************** #SCN = SW0H385 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6219 #NEWVERSION = 6220 #ADD 07850S0C ! 02JAN2014 wielerk ! Symptom: Interface sends values in DE-61.SE-7 ( point of service ! data.transaction status indicator ) that are not allowed ! by this interchange. ! Problem: If the Point Service Data token ( "C4" ) is present, ! the data is passed without edit. Other interchanges ! support values that differ from BNET values and these ! can be sent in error. ! Fix: Modified logic to edit C4 values to set DE-61.SE-7. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1510610. #ADD 09456 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 6 ] > "4" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "0" ); end; #DELETE 09457 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H385 !#CMP2.28 01/28/14 BNETLIBS6220 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6220 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6220 * ******************************************************************************** #SCN = SW0I015 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6220 #NEWVERSION = 6221 #ADD 07850T0D ! 28JAN2014 wielerk ! Symptom: Interface denies MOTO transaction when DE-22 ( pos ! entry mode ) = "82" and DE-48.SE-42 is not present. ! Problem: The interface was enforcing an edit for DE-22 that was ! meant for Electronic commerce and not Mobile commerce. ! Fix: Modified logic to allow Mobile commerce transactions to ! pass to RTAU. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1514656. #REPLACE 22240 /22240 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^advice^d or sem.pos^entry^mde = mobile^ecomm^d then #ENDSCN = SW0I015 !#CMP2.28 01/29/14 BNETLIBS6221 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6221 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6221 * ******************************************************************************** #SCN = SW0I017 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6221 #NEWVERSION = 6222 #ADD 07850U0B ! 29JAN2014 wielerk ! Symptom: Interface sends values in DE-61.SE-7 ( point of service ! data.transaction status indicator ) that are not allowed ! by this interchange. ! Problem: The previous fix was not exclusive enough in allowing ! values taken from the C4 token. A value of "1" is valid ! for the token, but not for Mastercard. ! Fix: Modified logic to limit values to "2", "3", and "4". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1510610. ! ! 29JAN2014 wielerk ! Symptom: Interface passes AFD advices as purchases and not as ! pre-auth completions. ! Problem: The interface was enforcing values in DE-61 that are ! used to identify pre-auth requests for advices that ! should be mapped to PSTM pre-auth completions. ! This caused pre-auths to not be matched as the advices ! were sent as PSTM purchase advices. ! Fix: Modified logic to allow AFD advices to enter the edits ! used to set PSTM tran code as pre-auth completion. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1515190. #ADD 09456T00 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 6 ] < "2" or sem.ntl^pos^data.cond^cde.byte[ 6 ] > "4" then #DELETE 09456T01 PSTM^FRMT^0200^TO^XRQST #ADD 17842 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem^preauth^match^d( sem ) then #DELETE 17843 /17847 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 17849 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if sem.typ = sem^auth^request^d and ( ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) or ( not util^maestro( sem.banknet^data.ntwk^id^cde ) and sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) then #DELETE 17850 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0I017 !#CMP2.28 02/03/14 BNETLIBS6222 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6222 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6222 * ******************************************************************************** #SCN = SW0I018 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6222 #NEWVERSION = 6223 #ADD 07850V0Q ! 03FEB2014 wielerk ! Symptom: Interface passes DE-48.SE-26 ( addl data.wallet program ! sub field ) when F4 token is present ! and can pass this data incorrectly. ! Problem: The interface was sending DE-48.SE-26 in the F4 token ! was present without identifying the token data. ! Fix: Modified logic to limit sending DE-48.SE-26 only if the ! F4 token wallet indicator = "01". ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1517223. #ADD 14900 PSTM^FRMT^SEM^ADDL^DATA tkn^lgth ) and dgtl^wallet^tkn.wallet^ind^flg = "01" then #DELETE 14901 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I018 !#CMP2.28 02/18/14 BNETDDLS6047 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6047 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6047 * ******************************************************************************** #SCN = SW0I062 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6047 #NEWVERSION = 6048 #ADD 00262u0I * 17FEB2014 GadiA * Symptom: Banknet Release 14.Q2 Mandates * Problem: None * Fix: Global 505: MoneySend Enhancements * Modified the "sender" definition within DE 124 to * replace the first 8 bytes of the message field with * a new date of birth field. * Europe 525: Installment Payment Processing in Europe * Region Countries * For DE 112, removed obsolete definitions for SE 001 * and SE 002 (adjusting the length of the user field * accordingly), and added a new redefinition for * high-growth market installment transactions * (SE 009 and SE 020) * Europe Operations Bulletin No. 8, dated 1 August 2013- * Revised Standards - Technical Support for MasterCard * Mobile Remote Payment (MMRP) Transactions * Added a definition for DE 48 SE 48 (subfield 1 only), * and reduced the length of the user field within the * DE 48 definition by the equivalent amount * Dependency: Apply fixes to BA60AFT COBTKN * BA60DDL DDLBATKN and DDLPSTKN * BA60SRC BATKNID, BATKNCVS, PSTKNCVS and PSTKNID * PS60RTAU AUTHLIBS * PS60SPDH ASPDHG and ASPDHS * SW60BNET BNETDDLS, BNETEMVS, BNETG, BNETLIBS. * Run Make. * Replace BNETLOGM, BNETMNWD and BNETUPDT. * Reference: WO #006703 #ADD 01157s0P SEM * * Mobile Program Indicators * Subfield tag = 48 * Subfield 1 identifies the service manager (or program originator) * of the Mobile Remote Payments program. * 06 mobile-pgm-inds-sub-fld-48. 08 tag pic 99. 08 lgth pic 99. 08 remt-pmnts-pgm-typ-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. #REPLACE 01157s0R SEM 04 user-fld pic x(6). #ADD 01403e08 SEM 06 dob pic x(8). 06 msg pic x(37). #DELETE 01403e09/01403e0J SEM #DELETE 01411o02/01411o09 SEM #ADD 01411o0Q SEM 06 user-fld-aci pic x(55). 04 hgmins redefines info. 06 sub-fld-9. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-plan-typ pic x(2). 10 num-instl pic x(2). 10 intrst-rat pic x(5). 10 first-instl-amt pic x(12). 10 instl-amt pic x(12). 06 sub-fld-20. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 crd-accpt-tax-id pic x(20). 06 user-fld-aci pic x(35). #DELETE 01411o0R SEM #ENDSCN = SW0I062 !#CMP2.28 02/18/14 BNETG 6085 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6085 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6085 * ******************************************************************************** #SCN = SW0I064 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0002690A ! 17FEB2014 GadiA ! Symptom: Banknet Release 14.Q2 Mandates ! Problem: None ! Fix: Europe 525: Installment Payment Processing in Europe ! Region Countries ! Add define "hgm^instl^cntry^cde^d" to identify a ! high-growth market country ! Add define "sem^hgm^instl^txn^d" to identify an ! instalment transaction from a high-growth market ! country. ! Dependency: Apply fixes to BA60AFT COBTKN ! BA60DDL DDLBATKN and DDLPSTKN ! BA60SRC BATKNID, BATKNCVS, PSTKNCVS and PSTKNID ! PS60RTAU AUTHLIBS ! PS60SPDH ASPDHG and ASPDHS ! SW60BNET BNETDDLS, BNETEMVS, BNETG, BNETLIBS. ! Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #006703 #ADD 0002620N ? instl^cntry^data^tkn #ADD 0002620j ! instl^cntry^data^tkn #ADD 00233z0G define hgm^instl^cntry^cde^d( x ) = ( x.ntl^pos^data.cntry^cde = "191" or !Croatia x.ntl^pos^data.cntry^cde = "203" or !Czech Rp x.ntl^pos^data.cntry^cde = "642" or !Romania x.ntl^pos^data.cntry^cde = "688" or !Serbia x.ntl^pos^data.cntry^cde = "703" or !Slovakia x.ntl^pos^data.cntry^cde = "705" !Slovenia )#; define sem^hgm^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "HGMINS" ) )#; #ENDSCN = SW0I064 !#CMP2.28 02/18/14 BNETLIBS6223 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6223 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6223 * ******************************************************************************** #SCN = SW0I065 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6223 #NEWVERSION = 6224 #ADD 07850W0C ! 17FEB2014 GadiA ! Symptom: Banknet Release 14.Q2 Mandates ! Problem: None ! Fix: Global 510: Enhancement to MasterCard Digital Enablement ! Service ! Add support to process new values "50", "51" and "52" ! in DE 48 SE 71 Subfield 1 in Authorization ! Request/0100 and Authorization Advice/0120 messages. ! Also add support to process new values "51" and "52" ! in DE 48 SE 71 Subfield 1. ! Global 531: Miscellaneous Core System Updates ! Add support to ensure that the amount of data ! processed in DE 124 does not exceed the length of the ! corresponding SEM field. Also add support to ensure ! that DE 124 is not echoed in a response message if the ! amount of data exceeds the length of the corresponding ! SEM field. ! Global 535: MasterCard SecureCode Program Updates for ! Participating and Non-Participating Customers ! Add support to allow DE 48 SE 43 to be included in the ! message, if DE 48 SE 42 SF 1 position 3 contains ! value "1". ! Europe 525: Installment Payment Processing in Europe ! Region Countries ! Add support to invoke a procedure to set DE 48 SE 95 ! and format DE 112. Add support to perform processing ! on a transaction originating from a high-growth market ! country: ! 1) Map data from the POS Data1 token and the ! Installment Payment Data token to DE 112 SE 009 ! 2) Map data from the Installment Country Data token ! (Token ID = "F8") to DE 112 SE 020 ! 3) Set the tag in DE 48 SE 95 to "95", the length in ! DE 48 SE 95 to "06", and the value in DE 48 SE 95 ! to "HGMINS". ! 4) Adjust the length of DE 48, to cater for the ! addition of SE 95 to the message. ! Add support to invoke a new procedure to map data ! from SEM data elements to Internal PSTM and Tokens ! as in above 4 points for acquiring transactions. ! Canada 545: Address Verification Service Mandate for ! Canada Region Issuers ! Add support to remove trailing zeros from the postal ! code data in a Canadian AFD transaction ! Europe Operations Bulletin No. 8, dated 1 August 2013- ! Revised Standards - Technical Support for MasterCard ! Mobile Remote Payment (MMRP) Transactions ! Add support to allow DE 22 SF 1 to contain value ! "82" as well as value "81". ! Add support to allow a PIN to be present in an ! e-commerce transaction. ! Add support to allow DE 48 SE 48 SF 1 to be set to ! "1" or "2". ! Add support to set the new fields PGM-TYP-ID and ! PMNT-INITIATION-CHAN in the E-Commerce Additional ! Data token (Token ID = "F1"). ! Global Operations Bulletin No. 1, dated 2 January 2014 ! -Best Practices for Automated Fuel Dispenser processing ! Add support to set DE 48 SE 63 to the Trace ID ! received in the corresponding response message. ! Add support to set the Trace ID in the Interchange ! Compliance token from DE 48 SE 63 if the message is ! an AFD completion advice and DE 48 SE 63 is present. ! Europe Operations Bulletin No. 11, dated 1 November 2013 ! -Acquirers in Greece Must Code Acquirer-Financed ! Installment Transactions as Pre-Authorizations ! Add support to set DE 61 SF 7 to "4" if the ! instl-plan-typ in the POS Data1 token is set to ! "22". ! Proc Added: sem^frmt^instl^pmnt^to^pstm ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to BA60AFT COBTKN ! BA60DDL DDLBATKN and DDLPSTKN ! BA60SRC BATKNID, BATKNCVS, PSTKNCVS and PSTKNID ! PS60RTAU AUTHLIBS ! PS60SPDH ASPDHG and ASPDHS ! SW60BNET BNETDDLS, BNETEMVS, BNETG, BNETLIBS. ! Run Make. ! Replace BNETLOGM, BNETMNWD and BNETUPDT. ! Reference: WO #006703 #REPLACE 09728 PSTM^FRMT^0200^TO^XRQST if not sem^ecomm^d( sem ) then #REPLACE 09743 PSTM^FRMT^0200^TO^XRQST if not sem^ecomm^d( sem ) then #REPLACE 09830 /09830 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if manual^entry and not sem^ecomm^d( sem ) then #ADD 10194 PSTM^FRMT^0200^TO^XRQST if hgm^instl^cntry^cde^d( sem ) and base24^rel^g >= 5 then begin ! ! Format Installment Payment for high-growth market countries ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin addl^data^bit^d := 1; adnl^data^ntl^bit^d := 1; end; end else #ADD 10333 PSTM^FRMT^0210^TO^XRESP ! ! This is to ensure that DE 124 is not echoed in a response ! message if the amount of data exceeds the length of the ! corresponding SEM field. ! if mbr^def^bit^d and sem.mbr^def <> blanks for $len( sem.mbr^def ) then begin call ascii^integer^( sem.mbr^def.lgth, lgth ); if lgth > $len( sem.mbr^def.info ) then begin mbr^def^bit^d := 0; end; end; #ADD 11251 PSTM^FRMT^0220^TO^XADV call ascii^integer^( sem.addl^data.lgth, de48^lgth ); movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movl( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, sem.banknet^data.ntwk^id^cde, $len( sem.banknet^data.ntwk^id^cde ) ); movl( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num.byte[ 3 ], sem.banknet^data.ref^num, 6 ); movl( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.setl^dat, $len( sem.setl^dat ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.trc^id^sub^fld^63 ); call integer^ascii^( sem.addl^data.lgth, de48^lgth ); #ADD 11549 PSTM^FRMT^0420^TO^ACQ^XRVSL if hgm^instl^cntry^cde^d( sem ) and adnl^data^ntl^bit^d then begin ! ! Rebuild DE 112 because it is not logged to the ILF. ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin ! ! Nothing to do, yet ! end; end else #ADD 12804 PSTM^FRMT^INSTL^PMNT^TO^SEM int found^instl^data^tkn := false; #ADD 12805 PSTM^FRMT^INSTL^PMNT^TO^SEM int i; int .instl^cntry^data^tkn( instl^cntry^data^tkn^def ); int .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); #ADD 12811 PSTM^FRMT^INSTL^PMNT^TO^SEM string crd^accpt^tax^id[ 0:19 ]; #ADD 12814 PSTM^FRMT^INSTL^PMNT^TO^SEM if hgm^instl^cntry^cde^d( sem ) then begin tkn^id ':=' pos^data1^tkn^id^d; found^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, lgth ); tkn^id ':=' instl^pmnt^data^tkn^id^d; found^instl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^pmnt^data^tkn, lgth ); if found^pos^data1^tkn and found^instl^data^tkn and pos^data1^tkn.pmnt^ind = "I" and pos^data1^tkn.num^instl <> blanks for $len( pos^data1^tkn. num^instl ) and pos^data1^tkn.num^instl <> "00" then begin found^instl^data := true; end else begin return false; end; if pos^data1^tkn.instl^plan^typ = blanks for $len( pos^data1^tkn.instl^plan^typ ) then begin movd( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. instl^plan^typ, "21" ); end else begin move( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. instl^plan^typ, pos^data1^tkn.instl^plan^typ ); end; move( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data.num^instl, pos^data1^tkn.num^instl ); if instl^pmnt^data^tkn.intrst^rat = [ $len( instl^pmnt^data^tkn.intrst^rat ) * [ " " ] ] then begin movd( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. intrst^rat, "00000" ); end else begin move( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. intrst^rat, instl^pmnt^data^tkn.intrst^rat ); end; move( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. first^instl^amt, instl^pmnt^data^tkn.first^amt ); move( sem.adnl^data^natl.hgmins.sub^fld^9.tag^data.instl^amt, instl^pmnt^data^tkn.instl^amt ); movd( sem.adnl^data^natl.hgmins.sub^fld^9.tag, "009" ); movd( sem.adnl^data^natl.hgmins.sub^fld^9.lgth, "033" ); tkn^id ':=' instl^cntry^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @instl^cntry^data^tkn, lgth ) and instl^cntry^data^tkn.cntry^cde = "HR" then begin move( sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. crd^accpt^tax^id, instl^cntry^data^tkn.croatia.tax^id ); movd( sem.adnl^data^natl.hgmins.sub^fld^20.tag, "020" ); i := 0; movl( crd^accpt^tax^id, sem.adnl^data^natl.hgmins.sub^fld^20. tag^data.crd^accpt^tax^id, $len( sem.adnl^data^natl.hgmins.sub^fld^20. tag^data.crd^accpt^tax^id ) ); while crd^accpt^tax^id[ i ] <> " " and i < $len( sem.adnl^data^natl.hgmins.sub^fld^20. tag^data.crd^accpt^tax^id ) do begin i := i + 1; end; call integer^ascii^( sem.adnl^data^natl.hgmins. sub^fld^20.lgth, i ); end; if sem.adnl^data^natl.hgmins.sub^fld^20.tag = "020" then begin lgth := i + ! length in DE 112 SE 020 6 + ! length of tag & length SFs in DE 112 SE 020 39; ! length of DE 112 SE 009 call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end else begin movd( sem.adnl^data^natl.lgth, "039" ); end; movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag^data, "HGMINS" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); return found^instl^data; end; #ADD 12855 PSTM^FRMT^INSTL^PMNT^TO^SEM if ( not found^instl^data ) and base24^rel^g < 5 then begin return false; end; #ADD 12878 PSTM^FRMT^INSTL^PMNT^TO^SEM if pos^data1^tkn.instl^plan^typ = "22" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end; #REPLACE 14422 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> "0" then #DELETE 14423 PSTM^FRMT^SEM^ADDL^DATA #ADD 14491 PSTM^FRMT^SEM^ADDL^DATA if e^com^addl^data^tkn^found and e^com^addl^data^tkn.dev^typ = "0" then begin movd( sem.pos^entry^mde, mobile^ecomm^d ); if e^com^addl^data^tkn.pgm^typ^id = "1" or e^com^addl^data^tkn.pgm^typ^id = "2" then begin movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48.tag, "48" ); movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48.lgth, "05" ); movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag, "01" ); movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.lgth, "01" ); move( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag^data, e^com^addl^data^tkn.pgm^typ^id ); movd( sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag, "23" ); movd( sem.addl^data.info. pmnt^init^chan^sub^fld^23.lgth, "02" ); move( sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data, e^com^addl^data^tkn.pmnt^initiation^chan ); if sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data = $len( sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data ) * [" "] then begin movd( sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data, "00" ); end; lgth := lgth + 15; end; end; #ADD 17092 SEM^FRMT^FEE^TO^PSTM^FEE ?section sem^frmt^instl^pmnt^to^pstm ?page "sem^frmt^instl^pmnt^to^pstm" !##################################################################### !# # !# sem^frmt^instl^pmnt^to^pstm # !# # !# This proc formats Installment Payment data for High-Growth # !# emerging markets. Installment payment data from SEM DE 112 # !# subfield 9 and subfield 20 is mapped to POS Data1 Token, # !# Intallment Payment Data Token and Installment Country Data Token # !# as required. # !# # !# INPUT PARAMETERS: # !# PSTM - Pointer to BASE24 internal POS message # !# SEM - Pointer to Banknet external message # !# POS^DATA1^TKN - Pointer to the POS DATA1 Token # !# # !# OUTPUT PARAMETERS: # !# # !# # !# RETURN: # !# # !##################################################################### int proc sem^frmt^instl^pmnt^to^pstm( pstm, sem, pos^data1^tkn ); int .pstm( pstm^def ); int .sem( sem^def ); struct .pos^data1^tkn( pos^data1^tkn^def ); begin wlform( no^room, "NO ROOM TO ADD TOKEN \\, PAN: \\\\\\\\\\\\\\\\\\\," ',' " SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ',' "SETL DATE: \\\\ ") wlform( err^get^tkn, "UNABLE TO RETRIEVE TOKEN: \\ FROM PSTM" ','" PAN: \?, SEQ NUM: \\\\\\\\\\\\, Error: # ") wlform( erradd^tkn, "UNABLE TO ADD TOKEN \\, PAN: \\\\\\\\\\\\\\\\\\\, " ',' "SEQ NUM: \\\\\\\\\\\\, ERR: # ") struct .instl^cntry^data^tkn( instl^cntry^data^tkn^def ); struct .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); int dspy := false; int found^instl^data := false; int found^instl^data^tkn := false; int i; int .instl^cntry^get^tkn( instl^cntry^data^tkn ); int .instl^pmnt^get^tkn( instl^pmnt^data^tkn^def ); int lgth; int ofst; int pan^lgth := 28; int pos^userdata; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^result; int .user^data^lgth; string .instl^txn^user^data; string tkn^id[ 0:1 ]; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; movd( pos^data1^tkn.pmnt^ind, "I" ); move( pos^data1^tkn.instl^plan^typ, sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. instl^plan^typ ); move( pos^data1^tkn.num^instl, sem.adnl^data^natl.hgmins.sub^fld^9. tag^data.num^instl ); movd( pos^data1^tkn.instl^gratuity^prd, "00" ); movd( pos^data1^tkn.num^mm^gratuity, "0" ); tkn^id ':=' instl^pmnt^data^tkn^id^d; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @instl^pmnt^get^tkn, lgth, ! tkn^dspy^frmt^flg !, pos^userdata ); if tkn^result = compl^no^err^l then begin move( instl^pmnt^get^tkn.first^amt, sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. first^instl^amt ); move( instl^pmnt^get^tkn.instl^amt, sem.adnl^data^natl.hgmins. sub^fld^9.tag^data.instl^amt ); movd( instl^pmnt^get^tkn.first^pmnt^dat, "000000" ); move( instl^pmnt^get^tkn.iss^crncy^cde, sem.tran^crncy^cde ); move( instl^pmnt^get^tkn.intrst^rat, sem.adnl^data^natl.hgmins.sub^fld^9. tag^data.intrst^rat ); movd( instl^pmnt^get^tkn.intrst^rat^prd, "0" ); movd( instl^pmnt^get^tkn.amt^flg, "F" ); end else if tkn^result = tkn^does^not^exist^l then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^pmnt^data^tkn ); move( instl^pmnt^data^tkn.first^amt, sem.adnl^data^natl.hgmins.sub^fld^9.tag^data. first^instl^amt ); move( instl^pmnt^data^tkn.instl^amt, sem.adnl^data^natl.hgmins.sub^fld^9. tag^data.instl^amt ); movd( instl^pmnt^data^tkn.first^pmnt^dat, "000000" ); move( instl^pmnt^data^tkn.iss^crncy^cde, sem.tran^crncy^cde ); move( instl^pmnt^data^tkn.intrst^rat, sem.adnl^data^natl.hgmins. sub^fld^9.tag^data.intrst^rat ); movd( instl^pmnt^data^tkn.intrst^rat^prd, "0" ); movd( instl^pmnt^data^tkn.amt^flg, "F" ); lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^pmnt^data^tkn, $len( instl^pmnt^data^tkn ), ! max^tkn^buf^lgth !, lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3267, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3268, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3268 ); end; end; end else begin call log^message^( 3269, ! routing code !, @err^get^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 3269 ); end; if sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. crd^accpt^tax^id <> blanks for $len( sem.adnl^data^natl. hgmins.sub^fld^20.tag^data.crd^accpt^tax^id ) then begin tkn^id ':=' instl^cntry^data^tkn^id^d; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @instl^cntry^get^tkn, lgth, ! tkn^dspy^frmt^flg !, pos^userdata ); if tkn^result = compl^no^err^l then begin move( instl^cntry^get^tkn.cntry^cde, pstm.term^cntry^cde ); move( instl^cntry^get^tkn.croatia.tax^id, sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. crd^accpt^tax^id ); end else if tkn^result = tkn^does^not^exist^l then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^cntry^data^tkn ); move( instl^cntry^data^tkn.cntry^cde, pstm.term^cntry^cde ); move( instl^cntry^data^tkn.croatia.tax^id, sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. crd^accpt^tax^id ); lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^cntry^data^tkn, $len( instl^cntry^data^tkn ), ! max^tkn^buf^lgth !, lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3270, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3271, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3271 ); end; end; end else begin call log^message^( 3272, ! routing code !, @err^get^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 3272 ); end; end; return true; end; ! of sem^frmt^instl^pmnt^to^pstm #ADD 21023 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^advice^d and sem^preauth^match^d( sem ) and sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin movl( compliance^tkn.trace^id, sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, $len( compliance^tkn.trace^id ) ); end; #ADD 21468M09 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^hgm^instl^txn^d( sem ) then begin ! ! Installment Payment for High Growth Market ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.hgmins.sub^fld^9.tag = "009" then begin call sem^frmt^instl^pmnt^to^pstm( pstm, sem, pos^data1^tkn ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end; end else #ADD 22320 SEM^FRMT^XRQST^TO^PSTM^0200 move( e^com^addl^data^tkn.pgm^typ^id, sem.addl^data.info.mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag^data ); move( e^com^addl^data^tkn.pmnt^initiation^chan, sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data ); #ADD 22431 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "52" or #REPLACE 22497 /22498 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "15" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "52" ) and #DELETE 22737 /22777 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 23152 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.merch^typ = "5542" and ! AFD ! sem.ntl^pos^data.cntry^cde = "124" and ! Canada ! pstm.zip^cde.byte[ 3 ] = "0" and pstm.zip^cde.byte[ 4 ] = "0" then begin movd( pstm.zip^cde.byte[ 3 ], " " ); movd( pstm.zip^cde.byte[ 4 ], " " ); end; #ADD 23367 SEM^FRMT^XRQST^TO^SEM^XRESP ! ! This is to ensure that DE 124 is not echoed in a response ! message if the amount of data exceeds the length of the ! corresponding SEM field. ! if mbr^def^bit^d and sem.mbr^def <> blanks for $len( sem.mbr^def ) then begin call ascii^integer^( sem.mbr^def.lgth, lgth ); if lgth > $len( sem.mbr^def.info ) then begin mbr^def^bit^d := 0; end; end; #DELETE 23530 /23544 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 26889 UTIL^COLLAPSE^SEM ! ! Mobile Program Indicators ! if hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. tag = "48" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. mobile^pgm^inds^sub^fld^48.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - ! Remote Payments Program Type Identifier ! if hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind. tag = "01" then begin call ascii^integer( hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! end; ! of if hdr...tag = "48" #ADD 26945 UTIL^COLLAPSE^SEM if hdr.adnl^data^natl.hgmins. sub^fld^9.tag = "009" then begin call ascii^integer( hdr.adnl^data^natl.hgmins. sub^fld^9.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.hgmins.sub^fld^9.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.hgmins. sub^fld^20.tag = "020" then begin call ascii^integer( hdr.adnl^data^natl.hgmins. sub^fld^20.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl. hgmins.sub^fld^20.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; #ADD 27672 UTIL^EXPAND^SEM int de124^lgth := 0; #ADD 27804 UTIL^EXPAND^SEM if index = 123 then ! field 124 begin ! ! The interface may have received more than ! 199 bytes of data in field 124, and will ! only process 199 bytes. Save off the length ! plus the length of the length field to allow ! the pointer to be moved past field 124 ! later, and reset the length to the maximum ! length the interface will process. ! de124^lgth := length + 3; if length > 299 then begin ! ! Field length is out of range ! return ( index + 1 ); end; length := $min( length, $len( hdr.mbr^def.info ) ); end; #ADD 28022 UTIL^EXPAND^SEM if ptr[ length ] = "48" then begin ! ! Mobile Program Indicators ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! Move Subfield 1 - Remote Payments ! Program Type Identifier ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 01 ! length := length + tag^length + 4; end ! of if ptr[ length ] = "48" else #ADD 28674 UTIL^EXPAND^SEM if ptr[ length ] = "009" then begin movl( sem^ptr.adnl^data^natl.hgmins. sub^fld^9.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "020" then begin movl( sem^ptr.adnl^data^natl.hgmins. sub^fld^20.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 28756 UTIL^EXPAND^SEM if index = 123 then begin ! ! Set length to the actual length of DE 124 in ! the external message to allow the pointer to ! be moved to the next field. ! length := de124^lgth; end; #ENDSCN = SW0I065 !#CMP2.28 02/20/14 BNETLIBS6224 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6224 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6224 * ******************************************************************************** #SCN = SW0I073 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6224 #NEWVERSION = 6225 #ADD 07850X1T ! 20FEB2014 wielerk ! Symptom: Interface denies unmatched E-comm reversals. ! Problem: The interface was enforcing the presence of DE-48.SE-42 ! in reversals. ! Fix: Modified logic to limit enforcing DE-48.SE-42 for auth ! request messages. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1524322. #REPLACE 22240U01 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ <> sem^auth^request^d or #ENDSCN = SW0I073 !#CMP2.28 03/06/14 BNETLIBS6225 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6225 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6225 * ******************************************************************************** #SCN = SW0I104 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6225 #NEWVERSION = 6226 #ADD 07850Y0A ! 06MAR2014 wielerk ! Symptom: Interface incorrectly sets DE-48.SE-42. ! Problem: The interface was using an edit of not equal to 0 as ! an indication that the POS 5.1 token Auth Collection ! Ind. was initialized with a valid value and to ! cause the Authn data token to be located to set ! DE-48.SE-42. ! It is also possible that the POS 5.1 token contains a ! space. ! If the flag is set to a space, the existing edit allows ! DE-48.SE-42 to be set to "1" when it should not be set ! at all. ! Fix: Modified logic to add an edit of not equal spaces to ! be added when checking POS 5.1 Auth Collection Ind. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1527671. #REPLACE 14422X01/14422X02 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> "0" and ps51^get^tkn.authn^coll^ind <> " " then #ENDSCN = SW0I104 !#CMP2.28 03/26/14 BNETLIBS6226 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6226 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6226 * ******************************************************************************** #SCN = SW0I111 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6226 #NEWVERSION = 6227 #ADD 07850Z0I ! 26MAR2014 wielerk ! Symptom: Interface does not return DE-112 ( addl data natl ) ! in certain responses. ! Problem: The interface was allowing DE-112 to be toggled off ! for responses for installment transactions from a ! high-growth market. ! Fix: Modified logic to add an edit for the define ! sem^hgm^instl^txn^d to allow DE-112 to be returned for ! these responses. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1532621. #ADD 10446 PSTM^FRMT^0210^TO^XRESP if not sem^dmstc^instl^txn^d( sem ) and not sem^hgm^instl^txn^d( sem ) then begin ! ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece and ! High Growth Markets. ! #DELETE 10447 /10455 PSTM^FRMT^0210^TO^XRESP #ADD 23355 SEM^FRMT^XRQST^TO^SEM^XRESP if not sem^dmstc^instl^txn^d( sem ) and not sem^hgm^instl^txn^d( sem ) then begin ! ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece and ! High Growth Markets. ! #DELETE 23356 /23364 SEM^FRMT^XRQST^TO^SEM^XRESP #ENDSCN = SW0I111 !#CMP2.28 03/27/14 BNETLIBS6227 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6227 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6227 * ******************************************************************************** #SCN = SW0I112 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6227 #NEWVERSION = 6228 #ADD 07850a0E ! 27MAR2014 GadiA ! Symptom: Interface incorrectly sets CNTRY-CDE field in F8 Token. ! Problem: The interface was using pstm.term^cntry^cde to fill the ! cntry-cde field in F8 (INSTL-CNTRY-DATA-TKN) token. The ! PSTM country code was not previously set with the ! country code in the external message, so it was causing ! the CNTRY-CDE field in the F8 token to be filled with ! "00" instead of "HR" even though the transaction ! originated from Croatia. ! Fix: Modified logic to fill the CNTRY-CDE in F8 token with ! "HR" Croatia if the transaction originates from Croatia ! by checking the country code "191" in DE 61. ! Otherwise return to the calling procedure if the ! transaction does not originate from Croatia without ! adding token F8 (INSTL-CNTRY-DATA-TKN) to PSTM. ! Proc modified: sem^frmt^instl^pmnt^to^pstm ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1531966. #REPLACE 17092X3L/17092X3M SEM^FRMT^INSTL^PMNT^TO^PSTM if sem.adnl^data^natl.hgmins.sub^fld^20.tag^data <> blanks for $len( sem.adnl^data^natl.hgmins.sub^fld^20.tag^data ) then #DELETE 17092X3N SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X3b SEM^FRMT^INSTL^PMNT^TO^PSTM if sem.ntl^pos^data.cntry^cde = "191" then begin movd( instl^cntry^get^tkn.cntry^cde, "HR" ); move( instl^cntry^get^tkn.croatia.tax^id, sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. #REPLACE 17092X3c/17092X3h SEM^FRMT^INSTL^PMNT^TO^PSTM crd^accpt^tax^id ); end else begin return false; end; #ADD 17092X3r SEM^FRMT^INSTL^PMNT^TO^PSTM if sem.ntl^pos^data.cntry^cde = "191" then begin movd( instl^cntry^data^tkn.cntry^cde, "HR" ); move( instl^cntry^data^tkn.croatia.tax^id, sem.adnl^data^natl.hgmins.sub^fld^20.tag^data. #REPLACE 17092X3s/17092X3x SEM^FRMT^INSTL^PMNT^TO^PSTM crd^accpt^tax^id ); end else begin return false; end; #ENDSCN = SW0I112 !#CMP2.28 04/02/14 BNETLIBS6228 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6228 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6228 * ******************************************************************************** #SCN = SW0I119 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6228 #NEWVERSION = 6229 #ADD 07850b0J ! 02APR2014 GadiA ! Symptom: Interface incorrectly sets the length of DE 48, if Sub ! Element 26 or 64 is present along with other sub ! Elements in outgoing request message to MasterCard. ! Problem: The interface was using local variable 'LGTH' in ! calculating the DE 48 length and storing the total ! length of DE 48. While calculating the total length of ! DE 48 by adding the Sub Element lengths of 26 and 64, ! interface was wrongly moving value from ! sem.addl^data.lgth to 'LGTH' local variable. This was ! causing DE 48 sent with incorrect length. ! Fix: Modified code to not move the length value from ! sem.addl^data.lgth to 'LGTH' local variable, so that the ! actual/total length calculated will not be changed. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1535055. #DELETE 14887 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14889 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14925 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14927 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I119 !#CMP2.28 04/04/14 BNETLIBS6229 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6229 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6229 * ******************************************************************************** #SCN = SW0I122 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6229 #NEWVERSION = 6230 #ADD 07850c0I ! 04APR2014 wielerk ! Symptom: Interface fails to collapse a 0430 with an error on ! DE-124 ( Member defined data ). ! Problem: The interface was allowing DE-124 to be echoed with the ! maximum length of 299 causing the collapse error. ! Further analysis shows several additional bits that ! should be toggled off. ! Fix: Modified code to toggle DE-23, DE-41, DE-42, DE-112 and ! DE-124 off when formatting an ack for a 0420. ! Proc modified: sem^frmt^xrvsl^to^sem^xack ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1538205. #ADD 24107 SEM^FRMT^XRVSL^TO^SEM^XACK crd^seq^num^bit^d := 0; crd^acpt^term^id^bit^d := 0; crd^acpt^id^cde^bit^d := 0; #ADD 24118 SEM^FRMT^XRVSL^TO^SEM^XACK adnl^data^ntl^bit^d := 0; mbr^def^bit^d := 0; #ENDSCN = SW0I122 !#CMP2.28 04/15/14 BNETD 6005 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6005 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6005 * ******************************************************************************** #SCN = SW0I127 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6005 #NEWVERSION = 6006 #ADD 00043E0B ! 15APR2014 bensone ! Symptom: Banknet Release 14.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: U.S. Region Operations Bulletin No. 15, 17 July 2012 ! Revised Standards for Support of the Device Type ! Indicator. ! New procedure PSTM^FRMT^EMV^SUP^DATA^TO^XRQST sets ! the device type indicator in DE 48 SE 23 from the ! EMV Supplemental Data token (S4). ! Proc added: pstm^frmt^emv^sup^data^to^xrqst ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS and BATKNID ! PS60RTAU: RTAUG ! PS60SPDH: ASPDHG and ASPDHS ! PS60ISPD: SPDHEMVS ! SW60BNET: BNETD, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA ! Reference: WO #007229 #ADD 00169 PSTM^FRMT^B24^TKN^TO^XRQST^EMV ?section pstm^frmt^emv^sup^data^to^xrqst ?page "pstm^frmt^emv^sup^data^to^xrqst" !##################################################################### !# # !# PSTM^FRMT^EMV^SUP^DATA^TO^XRQST # !# # !# This procedure is a dummy procedure called from # !# pstm^frmt^0200^to^xrqst in BNETLIBS and # !# pstm^frmt^b24^tkn^to^xrqst^emv in BNETEMVS. This procedure # !# will be replaced with the actual procedure if EMV is bound in. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# pstm - POS internal message. # !# # !# OUTPUT PARAMETERS: # !# none # !# # !# RETURN: # !# Always TRUE # !# # !##################################################################### int proc pstm^frmt^emv^sup^data^to^xrqst ( sem, pstm ); int .sem( sem^def); int .pstm( pstm^def); begin return true; ! do nothing, dummy proc. end; !pstm^frmt^emv^sup^data^to^xrqst #ENDSCN = SW0I127 !#CMP2.28 04/15/14 BNETG 6086 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6086 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6086 * ******************************************************************************** #SCN = SW0I128 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6086 #NEWVERSION = 6087 #ADD A000260K ! 15APR2014 bensone ! Symptom: Banknet Release 14.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Global 505-MoneySend Enhancements ! Modify the sem^moneysend^d define to allow for the ! new DE 48 SE 77 values. Add new flag, ! use^p2p^txn2^tkn^sender^frmt^g, to hold the value of ! new LCONF parameter SWI-USE-P2P-TXN2-TKN-SENDER-FRMT ! Global 551-Chip Secured Remote Payment ! Add define remote^ecomm^d to identify a chip secured ! remote payment transaction. Modify define sem^ecomm^d ! to ensure a chip secured remote payment is identified ! as an electronic commerce transaction. ! U.S. Region Operations Bulletin No. 15, 17 July 2012 ! Revised Standards for Support of the Device Type ! Indicator. ! Source in chip^data^tkn from BADDLTAL. Modify the ! pos^emv^suppl^data^reqd^d define to include ! contactless magnetic stripe transactions. ! Remove Support for Obsolete LCONF Parameters ! SW-BNET-FAILED-CVM-LIMIT-999 ! Remove global table failed^cvm^lmt^tbl^g. ! Processing of "Delayed" Reversals (case #01510376) ! Add new flag, max^days^for^old^rvsl^g, to hold the ! value of new LCONF parameter ! SW-BNET-MAX-DAYS-FOR-OLD-RVSL. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS and BATKNID ! PS60RTAU: RTAUG ! PS60SPDH: ASPDHG and ASPDHS ! PS60ISPD: SPDHEMVS ! SW60BNET: BNETD, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA ! Reference: WO #007229 #ADD 0002630Y ? chip^data^tkn #ADD 0002630b ! chip^data^tkn #ADD 00166601 ( ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe ) and not visa_tran_g )#; #DELETE 00166602/00166603 #ADD 00233;00 tag^data = "C07" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C5" ) )#; #DELETE 00233;01 #ADD 00435704 int max^days^for^old^rvsl^g; int use^p2p^txn2^tkn^sender^frmt^g; #DELETE 0043530H/0043530O #ADD 01366&05 remote^ecomm^d = "09"#, #ADD 01366~04 x.pos^entry^mde = remote^ecomm^d or #ENDSCN = SW0I128 !#CMP2.28 04/15/14 BNETLIBS6230 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6230 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6230 * ******************************************************************************** #SCN = SW0I129 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6230 #NEWVERSION = 6231 #ADD 07850d0D ! 15APR2014 bensone ! Symptom: Banknet Release 14.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Global 505-MoneySend Enhancements ! Move or map the PMNT-TYP-IND in the POS Data1 token ! to DE 48 SE 77. Move DE 48 SE 77 to PMNT-TYP-IND in ! the POS Data1 token. Map new values in DE 48 SE 77 ! to the generic MoneySend token value of 'C7' in the ! Transaction Specific Data token. Process DE 124 in ! MoneySend funding transactions to support additional ! format of the 'S7' token. Include the sender's date ! of birth in the 'S7' token. ! Global 520-Enhancement to DE 28 (Amount, Tran Fee) ! Support sending DE 28 in Authorization Advice/0120 ! messages for POS txns sent outbound to the network. ! Global 551-Chip Secured Remote Payment ! Support chip secured remote payment transaction where ! DE 22 SF 1 contains "09". Ensure the txn is ! identified as fully-authenticated if DE 22 SF 1 ! contains "09" and DE 48 SE 42 is not present. ! U.S. Region Operations Bulletin No. 15, 17 July 2012 ! Revised Standards for Support of the Device Type ! Indicator. ! Retrieve the Chip Data token and set the device type ! indicator in DE 48 SE 23 Payment Initiation Channel. ! If the Chip Data token is not found in a non-EMV ! transaction, attempt to populate DE 48 SE 23 from ! the EMV Supplemental Data token. ! Remove Support for Obsolete LCONF Parameters ! SW-BNET-FAILED-CVM-LIMIT-999 ! Remove processing of global failed^cvm^lmt^tbl^g. ! Processing of "Delayed" Reversals (case #01510376) ! Support new LCONF parameter ! SW-BNET-MAX-DAYS-FOR-OLD-RVSL ! Miscellaneous Cases (#01503848, #01506456) ! Improve logic to set values in POS Data 1 token. ! Proc added: util^frmt^chip^data^to^xrqst ! Proc deleted: util^build^failed^cvm^lmt^tbl ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! pstm^frmt^sem^addl^data ! sem^check^unmatchd^xrvsl^pos ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS and BATKNID ! PS60RTAU: RTAUG ! PS60SPDH: ASPDHG and ASPDHS ! PS60ISPD: SPDHEMVS ! SW60BNET: BNETD, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA ! Reference: WO #007229 #ADD 08772 PSTM^FRMT^0200^TO^XRQST int tkn^lgth; #ADD 08788 PSTM^FRMT^0200^TO^XRQST int .chip^data^tkn( chip^data^tkn^def ); #ADD 10027O02 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde.byte[ 0 ] = sem^pmnt^txn^d and found^pos^data1^tkn then begin if pos^data1^tkn.pmnt^typ^ind.byte[ 2 ] <> " " then begin move( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, pos^data1^tkn.pmnt^typ^ind ); end else if pos^data1^tkn.pmnt^typ^ind <> " " then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C05" ); end; end; #ADD 10194 PSTM^FRMT^0200^TO^XRQST if base24^rel^g >= 5 and pos^emv^suppl^data^reqd^d then begin tkn^id ':=' chip^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @chip^data^tkn, tkn^lgth ) then begin call util^frmt^chip^data^to^xrqst( sem, chip^data^tkn.ber^tlv^data, chip^data^tkn.lgth ); end else if not emv^data^bit^d and sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag <> "23" then begin call pstm^frmt^emv^sup^data^to^xrqst( sem, pstm ); end; end; ! of base24^rel^g >= 5 and pos^emv^suppl^data^reqd^d #DELETE 11287 PSTM^FRMT^0220^TO^XADV #ADD 15424M1R SEM^CHECK^UNMATCHD^XRVSL^POS if bnet^g.max^days^for^old^rvsl^g > 0 and num^of^days > bnet^g.max^days^for^old^rvsl^g then begin return false; end else #ADD 17537 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM sem.pos^entry^mde = remote^ecomm^d or #REPLACE 18059M0A SEM^FRMT^SDF^PRIKEY !# frwd^delayed^rvsl - original authorization is too old to be #! #REPLACE 18074M01 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM proc sem^frmt^unmatchd^xrvsl^to^pstm( rvsl, pstm, frwd^delayed^rvsl ); #REPLACE 18077M01 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int frwd^delayed^rvsl; #REPLACE 18098M06 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if frwd^delayed^rvsl then #REPLACE 18111M02 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if frwd^delayed^rvsl then #ADD 18480 SEM^FRMT^XRESP^TO^PSTM^0210 string auth^msg^ind := " "; #ADD 18487 SEM^FRMT^XRESP^TO^PSTM^0210 string resp^src^rsn^cde := " "; #ADD 18912 SEM^FRMT^XRESP^TO^PSTM^0210 movd( resp^src^rsn^cde, "5" ); if auth^inst^bit^d then begin if sem.auth^inst.cde = "000000" or sem.auth^inst.cde = "000001" then begin ! ! Issuer is not available for processing ! movd( resp^src^rsn^cde, "4" ); end else if sem.auth^inst.cde = "000" then begin ! ! Third party agent ! movd( resp^src^rsn^cde, "A" ); end; end; move( auth^msg^ind, rqst.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. final^auth^ind); #ADD 18913 SEM^FRMT^XRESP^TO^PSTM^0210 movd( tkn^id, pos^data1^tkn^id^d ); if tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @pos^data1^tkn^ptr, tkn^lgth, ! ascii format flag !, pos^userdata ) then begin ! ! If CH token exists in the message -- update it ! move( pos^data1^tkn^ptr.auth^msg^ind, auth^msg^ind ); move( pos^data1^tkn^ptr.crd^vrfy^flg2, crd^vrfy^flg2 ); move( pos^data1^tkn^ptr.resp^src^rsn^cde, resp^src^rsn^cde ); end else begin ! ! If the CH token does not exists in the message ! if cvd2^rslt^present^flg or auth^inst^bit^d or auth^msg^ind <> " " then begin ! ! Map the CVD2 result to the CRD-VRFY-FLG2 field in ! the POS Data1 Token. ! init( pos^data1^tkn, " ", wlen( pos^data1^tkn ) ); set( pos^data1^tkn.online^lmt, 0f ); move( pos^data1^tkn.auth^msg^ind, auth^msg^ind ); move( pos^data1^tkn.crd^vrfy^flg2, crd^vrfy^flg2 ); movd( tkn^id, pos^data1^tkn^id^d ); pos^data1^tkn^lgth := $len( pos^data1^tkn ); tkn^lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data1^tkn, pos^data1^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result and tkn^result <> tkn^exist^l then begin if tkn^result = over^max^limit^l then begin call log^message^( 3162, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3172, ! routing code !, @err^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3172 ); end; end; ! of if tkn^result <> tkn^exist^l end; ! of if cvd2^rslt^present^flg etc. end; ! of tkn^get^info else #DELETE 19027 /19104 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20603 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 then begin tkn^id ':=' pos^data1^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^data1^tkn ); end; if base24^rel^g >= 5 and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" and #DELETE 20604 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 20801 SEM^FRMT^XRQST^TO^PSTM^0200 move( pos^data1^tkn.pmnt^typ^ind, sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data ); add^pos^data1 := true; #ADD 20865 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data = "C07" or sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C5" then #DELETE 20866 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 21398 /21412 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 21425 /21467 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22247 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = remote^ecomm^d then begin ! ! ! Fully authenticated transaction ! ! ! movd( ps51^tkn^data.e^com^flg, "5" ); end else #ADD 22322 SEM^FRMT^XRQST^TO^PSTM^0200 if e^com^addl^data^tkn.scheme^merch^id <> #DELETE 22323 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22326 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( e^com^addl^data^tkn ); #DELETE 22327 /22328 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22932 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem^moneysend^d( sem ) or sem.merch^typ = funding^transaction^d ) then #DELETE 22933 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22934 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^d( sem ) and not process^moneysend^txn^g then #DELETE 22935 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22944 SEM^FRMT^XRQST^TO^PSTM^0200 if bnet^g.use^p2p^txn2^tkn^sender^frmt^g or sem.merch^typ = funding^transaction^d then begin movd( p2p^txn2^tkn.frmt^cde, "01" ); tkn^add^lgth := $offset( p2p^txn2^tkn.mc^sender. user^fld^aci ); end else begin movd( p2p^txn2^tkn.frmt^cde, "00" ); tkn^add^lgth := $len( p2p^txn2^tkn ); end; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; move( p2p^txn2^tkn.mc.sender.unique^ref^num, sem.mbr^def.sender.unique^ref^num ); move( p2p^txn2^tkn.mc.sender.nam, sem.mbr^def.sender.nam ); move( p2p^txn2^tkn.mc.sender.addr, sem.mbr^def.sender.addr ); move( p2p^txn2^tkn.mc.sender.phn^num, sem.mbr^def.sender.phn^num ); move( p2p^txn2^tkn.mc.sender.dob, sem.mbr^def.sender.dob ); move( p2p^txn2^tkn.mc.sender.msg, sem.mbr^def.sender.msg ); #DELETE 22945 /22955 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22960 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth, #DELETE 22961 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 25033G00/25033G4R SUB^PARSE^AMTS #ADD 29053 UTIL^FRMT^ADDL^DATA^TO^XRESP ?section util^frmt^chip^data^to^xrqst ?page " util^frmt^chip^data^to^xrqst" !##################################################################### !# # !# util^frmt^chip^data^to^xrqst # !# # !# This procedure performs additional formatting of the SEM # !# using chip data. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# chip^data - Chip data retrieved from a token. # !# chip^data^lgth - Length of the chip data # !# # !# OUTPUT PARAMETERS: # !# sem - with selected fields formatted. # !# # !# RETURN: # !# true - success # !# false - failure # !# # !##################################################################### int proc util^frmt^chip^data^to^xrqst( sem, chip^data, chip^data^lgth ); int .sem( sem^def); string .chip^data; int chip^data^lgth; begin int addl^data^lgth := 0; int data^lgth := 0; int de48^lgth := 0; int length := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int tag^lgth := 0; int updt^de48 := false; string .ptr; string .third^party^data( tag^third^party^data^def ); @ptr := @chip^data; length := 0; while length < chip^data^lgth do begin if ptr[ length ].<12:15> = %hF then begin tag^lgth := 2; end else begin tag^lgth := 1; end; data^lgth := ptr[ length + tag^lgth ]; if ptr[ length ] = tag^third^party^data^d then begin ! ! Third Party Data - tag = 9F6E ! if not visa_tran_g and sem.addl^data.info.pmnt^init^chan^sub^fld^23.tag <> "23" then begin @third^party^data := @ptr[ length + tag^lgth + de55^lgth^l ]; if third^party^data.unique^id.byte[ 0 ].<8> = %b0 and data^lgth >= 6 then begin ! ! The Device Type subfield is present when the ! most significant bit of byte 1 of the Unique ! Identifier is set to 0b. ! sem.addl^data.info.pmnt^init^chan^sub^fld^23. tag ':=' "23"; sem.addl^data.info.pmnt^init^chan^sub^fld^23. lgth ':=' "02"; sem.addl^data.info.pmnt^init^chan^sub^fld^23. tag^data ':=' third^party^data.dev^typ for 2 bytes; addl^data^lgth := addl^data^lgth + 6; updt^de48 := true; end; end; ! of not visa^tran^g end; !of Third Party Data - tag = 9F6E length := length + tag^lgth + de55^lgth^l + data^lgth; end; ! of length < chip^data^lgth if updt^de48 then begin if sem.addl^data.lgth = " " then begin ! ! include length of TCC in DE-48 total length ! movd( sem.addl^data.lgth, "001" ); end; call ascii^integer^( sem.addl^data.lgth, de48^lgth ); de48^lgth := de48^lgth + addl^data^lgth; call integer^ascii^( sem.addl^data.lgth, de48^lgth ); addl^data^bit^d := 1; end; ! of if updt^de48 return true; end; ! of proc util^frmt^chip^data^to^xrqst #ENDSCN = SW0I129 !#CMP2.28 04/15/14 BNETS 6124 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6124 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6124 * ******************************************************************************** #SCN = SW0I132 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6124 #NEWVERSION = 6125 #ADD 03821X0K ! 15APR2014 bensone ! Symptom: Banknet Release 14.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Global 505-MoneySend Enhancements ! Add support for new LCONF parameter ! SWI-USE-P2P-TXN2-TKN-SENDER-FRMT. ! Remove Support for Obsolete LCONF Parameters ! SW-BNET-FAILED-CVM-LIMIT-999 ! Remove processing of the table failed^cvm^lmt^tbl^g. ! Processing of "Delayed" Reversals (case #01510376) ! Add support for new LCONF parameter ! SW-BNET-MAX-DAYS-FOR-OLD-RVSL. ! Miscellaneous Cases (#01503848, #01506456) ! Output EMS message 1576 when format error detected ! in station input. ! Procs modified: init^bnet^g ! init^paramproc ! sem^^input^from^station ! sem^acq^rvsl^rqst^pos ! sem^reversal^advice^pos ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS and BATKNID ! PS60RTAU: RTAUG ! PS60SPDH: ASPDHG and ASPDHS ! PS60ISPD: SPDHEMVS ! SW60BNET: BNETD, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BAMISCTD, BNETMNWD, BNETLOGM, BNETUPDT, LCONFBA ! Reference: WO #007229 #ADD 10428V04 INIT^BNET^G bnet^g.max^days^for^old^rvsl^g := 0; bnet^g.use^p2p^txn2^tkn^sender^frmt^g := true; #DELETE 10428Q02/10428Q0D INIT^BNET^G #ADD 12676S03 INIT^PARAMPROC "P", "SW-BNET-MAX-DAYS-FOR-OLD-RVSL ", "P", "SWI-USE-P2P-TXN2-TKN-SENDER-FRMT", #DELETE 12685Q00/12685Q02 INIT^PARAMPROC #DELETE 12688R00/12688R04 INIT^PARAMPROC #ADD 13500V14 INIT^PARAMPROC ! ! SW-BNET-MAX-DAYS-FOR-OLD-RVSL ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.max^days^for^old^rvsl^g ) then begin bnet^g.max^days^for^old^rvsl^g := 0; call log^message^( 1336, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. max^days^for^old^rvsl^g ); end else if bnet^g.max^days^for^old^rvsl^g < 0 or bnet^g.max^days^for^old^rvsl^g > 99 then begin bnet^g.max^days^for^old^rvsl^g := 0; call log^message^( 1337, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. max^days^for^old^rvsl^g ); end; end; ! ! SWI-USE-P2P-TXN2-TKN-SENDER-FRMT ! if not ferror then begin if lconf.param^msg.ptxt = "N" then begin bnet^g.use^p2p^txn2^tkn^sender^frmt^g := false; end else begin bnet^g.use^p2p^txn2^tkn^sender^frmt^g := true; end; end; #DELETE 13726R00/13726R4c INIT^PARAMPROC #ADD 17088 SEM^^INPUT^FROM^STATION wlform( frmt^err, "Message \\\\ DROPPED, Format Error on DE \\\, " ','"BNET REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) #ADD 17180 SEM^^INPUT^FROM^STATION call log^message^( 1576,! routing code !, @frmt^err, net.myname, evt_msg_severity_info_l, @sem.typ, @data^elem^err^g, @sem.banknet^data.ref^num, @sem.setl^dat ); #REPLACE 17570V01 SEM^ACQ^RVSL^RQST^POS int frwd^delayed^rvsl := false; #REPLACE 17672V01 FRMT^AND^SEND^ACQ^RVSL^RESP frwd^delayed^rvsl := sem^check^unmatchd^xrvsl^pos( rvsl, #REPLACE 17672V05 FRMT^AND^SEND^ACQ^RVSL^RESP frwd^delayed^rvsl = false then #REPLACE 17754V02 FRMT^AND^SEND^ACQ^RVSL^RESP frwd^delayed^rvsl ); #REPLACE 22476V01 SEM^REVERSAL^ADVICE^POS int frwd^delayed^rvsl := false; #REPLACE 22494V01 SUB^PROCESS^UNMATCHD^POS^RVSL frwd^delayed^rvsl := sem^check^unmatchd^xrvsl^pos( rvsl, #REPLACE 22494V05 SUB^PROCESS^UNMATCHD^POS^RVSL frwd^delayed^rvsl = false then #REPLACE 22526V04 SUB^PROCESS^UNMATCHD^POS^RVSL frwd^delayed^rvsl); #ENDSCN = SW0I132 !#CMP2.28 04/28/14 BNETLIBS6231 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6231 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6231 * ******************************************************************************** #SCN = SW0I145 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6231 #NEWVERSION = 6232 #ADD 07850e0x ! 28APR2014 wielerk ! Symptom: Interface fails to pass along DE-48.SE-43 ( addl data. ! UCAF ) when DE-48.SE-42.SF-1 ( addl data.ecom sec sub ! fld 42.ucaf ind ) is set to "1". ! Problem: The interface was mapping this data to the CF token for ! DE-48.SE-42.SF-1 values "2" and "3" but not "1". ! It is not a Mastercard requirement to pass this, but ! some issuers prefer to receive it. ! Fix: Modified code to include DE-48.SE-42.SF-1 in the edit ! to pass DE-48-SE-42 in the CF token. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1538200. #ADD 22788 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" ) and #DELETE 22789 /22792 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I145 !#CMP2.28 05/02/14 BNETLIBS6232 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6232 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6232 * ******************************************************************************** #SCN = SW0I169 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6232 #NEWVERSION = 6233 #ADD 07850f0E ! 02MAY2014 wielerk ! Symptom: Interface is not allowing balance inquiries when DE- ! 18 ( merch typ ) is 6010. ! Problem: The interface was modified to enforce certain DE-3 ! ( proc cde ) values when DE-18 is set to 6010. ! Mastercard was not clear in this restriction in its ! specifications and recently made a clarification in ! regard to DE-18 = 6010. ! Fix: Modified code to allow balance inquiries when DE-18 is ! 6010 and to require card swipe and PIN entry. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1561919. #ADD 09286M01 PSTM^FRMT^0200^TO^XRQST sem.proc^cde <> sem^cash^adv^d and sem.proc^cde <> sem^bal^inq^d ) or #DELETE 09286M02 PSTM^FRMT^0200^TO^XRQST #ADD 09299 PSTM^FRMT^0200^TO^XRQST if sem.merch^typ = manual^cash^disbursement^d then begin if pos^cash^adv^d( pstm ) and util^debit^crd^typ( pstm.rte.srv ) then begin movd( sem.proc^cde, sem^wdl^d ); end; #DELETE 09300 /09304 PSTM^FRMT^0200^TO^XRQST #ADD 09315 PSTM^FRMT^0200^TO^XRQST end; ! of manual^cash^disbursement^d #DELETE 09316 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0I169 !#CMP2.28 05/27/14 BNETG 6087 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6087 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6087 * ******************************************************************************** #SCN = SW0I182 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6087 #NEWVERSION = 6088 #ADD B000260d ! 27MAY2014 wielerk ! Symptom: Base24 does not support ATM PayPass issuer transactions. ! Problem: There is no method to configure a denial of ATM PayPass ! transactions on the issuer side of Base24. ! Fix: Added a new define, sem^atm^allwd^entry^mde^d, to the ! module to provide the DE-22 ( pos entry mde ) values ! that can be processed by ATM Auth. ! Dependency: Apply fixes to BNETATMS and SW60BNET.BNETG. Run Make. ! Reference: Case #1594217. #ADD 00233}0A define sem^atm^allwd^entry^mde^d( x ) = ( x.pos^entry^mde = pos^unkn or x.pos^entry^mde = mag^stripe^read or x.pos^entry^mde = chip^read or x.pos^entry^mde = chip^read^paypass^mapped or x.pos^entry^mde = full^mag^stripe or x.pos^entry^mde = pan^auto^entry^via^mag^stripe )#; #ENDSCN = SW0I182 !#CMP2.28 06/16/14 BNETLIBS6233 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6233 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6233 * ******************************************************************************** #SCN = SW0I197 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6233 #NEWVERSION = 6234 #ADD 07850g0E ! 16JUN2014 wielerk ! Symptom: Interface emits EMS message #1881 indicating a token ! exists error for a token ( C0 ) not yet added. ! Problem: The interface adds a POS Data2 token ( CZ ) after the ! local, tkn^id, is set to PS51 token ( C0 ). ! When the PS51 token is added, the local token id is ! still equal to the previously added token id value ! Fix: Modified code to set the PS51 data token id value ! prior to adding the PS51 token. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1613512. #REPLACE 22619 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' ps51^tkn^id^d; #ENDSCN = SW0I197 !#CMP2.28 06/23/14 BNETLIBS6234 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6234 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6234 * ******************************************************************************** #SCN = SW0I217 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6234 #NEWVERSION = 6235 #ADD 07850h0D ! 23JUN2014 wielerk ! Symptom: Interface declines cash advance transactions that do ! not have a PIN. ! Problem: A previous fix incorrectly included transactions that ! did not need the PIN requirement. ! Fix: Modified code to limit the PIN entry to withdrawal and ! balance inquiries. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1620631. #REPLACE 09299g08/09300g02 PSTM^FRMT^0200^TO^XRQST end; if sem.merch^typ = manual^cash^disbursement^d and ( sem.proc^cde = sem^wdl^d or sem.proc^cde = sem^bal^inq^d ) then begin #ENDSCN = SW0I217 !#CMP2.28 06/27/14 BNETG 6088 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6088 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6088 * ******************************************************************************** #SCN = SW0I221 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6088 #NEWVERSION = 6089 #ADD C000260A ! 27JUN2014 saderc ! Symptom: POS Mobile Top-Up transactions are being denied with ! an external BNET response code "57" (Transaction Not ! Supported). ! Problem: The interface is identifying POS Mobile Top-Up ! transactions as a Non-Currency Dispense (NCD) tran ! originating from an ATM. The problem is that the ! sem^ncd^txn^d define includes a check for merch^typ ! equal to "4814". The "4814" merchant type identifies ! a Mobile Top-Up transaction, which could be either ! ATM or POS. ! Fix: The sem^ncd^txn^d define was modified to replace the ! check for merch^typ equal "4814" with a check for a ! value of "Z" (ATM Cash Disbursement) in the TCC field ! of DE 48. ! Dependency: Apply fix to BNETG. Run Make. ! Reference: Case #1594329 #ADD 00233100 x.addl^data.info. tran^cat^cde = "Z" ) and #DELETE 00233101 #ENDSCN = SW0I221 !#CMP2.28 06/30/14 BNETLIBS6235 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6235 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6235 * ******************************************************************************** #SCN = SW0I222 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6235 #NEWVERSION = 6236 #ADD 07850i0B ! 30JUN2014 saderc ! Symptom: The data length in field 48 (addl-data) is being set ! incorrectly in outbound reversal messages. ! Problem: The interface is sending DE 48 SE 43 (Visa CAVV) even ! though there is no data. This is causing the length ! of field 48 to be set incorrectly. ! Fix: Modified code to not send DE 48 SE 43 if there is no ! data present in the Authentication Date (CE) token. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1616612 #ADD 14428 PSTM^FRMT^SEM^ADDL^DATA authn^data^tkn^lgth ) and authn^data^tkn^lgth > 2 then begin if authn^data^tkn.authn^ind^data <> blanks for ( authn^data^tkn^lgth - 2 ) then begin movd( sem.addl^data.info. ucaf^sub^fld^43.tag, "43" ); ! ! If the length of the token's ! Authentication Indicator Data is less ! than or equal to 32, move the token's ! UCAF data into the SE 43's TAG^DATA ! field for that length. Otherwise, move ! the data for the the maximum of 32 bytes ! bytes. Set SE 43's length field ! accordingly. ! ! significant data must be passed with ! no pad bytes. data can be odd length ! data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn. authn^ind^flg ) ) ); data^lgth := $min( data^lgth, $len( authn^data^tkn. authn^ind^data ) ); while authn^data^tkn.authn^ind^data. byte[ data^lgth - 1 ] = " " and data^lgth > 0 do begin data^lgth := data^lgth - 1; end; if data^lgth <= 32 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43. lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data, data^lgth ); end else begin movd( sem.addl^data.info. ucaf^sub^fld^43.lgth, "32" ); move( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43. lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end else begin movd( sem.addl^data.info. ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "1" ); end; end #DELETE 14429 /14484 PSTM^FRMT^SEM^ADDL^DATA #ADD 14739 PSTM^FRMT^SEM^ADDL^DATA authn^data^tkn^lgth ) and authn^data^tkn^lgth > 2 then begin if authn^data^tkn.authn^ind^data <> blanks for ( authn^data^tkn^lgth - 2 ) then begin movd( sem.addl^data.info. ucaf^sub^fld^43.tag, "43" ); ! ! If the length of the token's ! Authentication Indicator Data is less ! than or equal to 32, move the token's ! UCAF data into the SE 43's TAG^DATA ! field for that length. Otherwise, move ! the data for the the maximum of 32 ! bytes. Set SE 43's length field to ! accordingly. ! data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn. authn^ind^flg ) ) ); data^lgth := $min( data^lgth, $len( authn^data^tkn. authn^ind^data ) ); while authn^data^tkn.authn^ind^data. byte[ data^lgth - 1 ] = " " and data^lgth > 0 do begin data^lgth := data^lgth - 1; end; if data^lgth <= 32 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43. lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data, data^lgth ); end else begin movd( sem.addl^data.info. ucaf^sub^fld^43.lgth, "32" ); move( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.authn^ind^data ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43. lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end else begin movd( sem.addl^data.info. ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "1" ); end; end #DELETE 14740 /14794 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I222 !#CMP2.28 07/21/14 BNETG 6089 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6089 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6089 * ******************************************************************************** #SCN = SW0I234 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6089 #NEWVERSION = 6090 #ADD D000260I ! 21JUL2014 wielerk ! Symptom: Interface sends an incorrect value in DE-3 ( proc code ) ! when Base24 sends a cash back adjustment. ! Problem: If a terminal or Host sends a cash back adjustment, PSTM ! tran code = 24, the interface sends a 0100 with a bad ! value in DE-3. ! Fix: Added a define for PSTM cash back adjustment. ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #1666687. #REPLACE 00166 /00166v00 pos^return^adjust^d( x ) = ( x.tran.tran^cde = "22" ) #, pos^cash^back^adj^d( x ) = ( x.tran.tran^cde = "24" ) #; #ENDSCN = SW0I234 !#CMP2.28 07/21/14 BNETS 6125 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6125 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6125 * ******************************************************************************** #SCN = SW0I235 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6125 #NEWVERSION = 6126 #ADD 03821Y0X ! 21JUL2014 wielerk ! Symptom: Interface sends an incorrect value in DE-3 ( proc code ) ! when Base24 sends a cash back adjustment. ! Problem: If a terminal or Host sends a cash back adjustment, PSTM ! tran code = 24, the interface sends a 0100 with a bad ! value in DE-3. ! Fix: Added logic to blind approve cash back adjustments and ! log an ILF record for PSTM 0200 messages and to log an ! ILF record for PSTM 0220 messages. ! Procs modified: pstm^0200^request ! pstm^0220^force^post ! Dependency: Apply fixes to BNETG and BNETS. Run Make. ! Reference: Case #1666687. #REPLACE 15437 SUB^APPRV^BLIND ( pos^cash^back^adj^d( pstm ) ) or #REPLACE 16235 /16235 OFFSET 0 PSTM^0220^FORCE^POST if pos^return^d(pstm) or pos^cash^back^adj^d( pstm ) then #ENDSCN = SW0I235 !#CMP2.28 08/20/14 BNETG 6090 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6090 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6090 * ******************************************************************************** #SCN = SW0I265 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD E000260A ! 20AUG2014 bensone ! Symptom: Banknet Release 14.Q4 Functional Enhancements ! Problem: None ! Fix: Europe 582-Installment Payment Processing in ! Europe Region Countries ! Updated define hgm^instl^cntry^cde^d to identify ! additional high-growth market countries. ! Global 596-Introduction and Service Enablement of ! MasterCard Card on File Tokenization ! Source in Network Token Service token (ID = 'SC') ! Added define sem^tkn^rqst^d for transaction code '93' ! in token request/maintenance/inquiry messages. ! Updated define sem^transit^d to identify transit ! Merchants. Added define sem^transit^aggr^d to ! identify transit merchants that may aggregate ! multiple trans into one. ! Global 598-Addition of ATC Validation for the ! MasterCard Digital Enablement Service and ! M/Chip Cryptogram Services ! Added define pos^resp^dec^atc^chk^fail^d to identify ! a response code indicating an ATC check failure. ! Token Changes for Compatibility with BASE24-eps ! Source in Additional Amounts token (Token ID = 'SE') ! Added define bnet^amt^typ^gratuity^d to identify ! gratuity amounts in DE 54. ! Dependency: Apply fixes to: ! AT60IATH: AUTHEMVS ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLFSTF, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS ! OK60LIB: OKLIBTS ! PS60IRTA: RTAUEMVS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60STF: RQSTFS, SCRNSTF ! Run Make. ! Replace BNETMNWD, BNETLOGM, BNETUPDT ! New files: ILB0814M, ILB0814R, ILB0814S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0814M. Run the ILF conversion using ILB0814R. ! Reference: WO #007328 #ADD 0002620F ? adnl^amts^tkn #ADD 0002620Q ? ntwk^tkn^srvc^tkn #ADD 0002620b ! adnl^amts^tkn #ADD 0002620m ! ntwk^tkn^srvc^tkn #ADD 00078i0C define bnet^amt^typ^gratuity^d = "44"#; #ADD 00122v03 define sem^tkn^rqst^d = "93"#; #ADD 0023370G x.merch^typ = "4784" or x.merch^typ = "7523" or #ADD 0023370H define sem^transit^aggr^d( x ) = ( x.merch^typ = "4111" or x.merch^typ = "4131" )#; #ADD A0023303 x.ntl^pos^data.cntry^cde = "268" or !Georgia ! x.ntl^pos^data.cntry^cde = "348" or !Hungary ! #ADD A0023306 x.ntl^pos^data.cntry^cde = "705" or !Slovenia! x.ntl^pos^data.cntry^cde = "804" !Ukraine ! #DELETE A0023307 #ADD 00264k09 define pos^resp^dec^atc^chk^fail^d = "404"#; #ENDSCN = SW0I265 !#CMP2.28 08/20/14 BNETLIBS6236 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6236 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6236 * ******************************************************************************** #SCN = SW0I266 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6236 #NEWVERSION = 6237 #ADD 07850j0C ! 20AUG2014 bensone ! Symptom: Banknet Release 14.Q4 Functional Enhancements ! Problem: None ! Fix: Global 125-Visa Gateway Enhancements ! For a Visa card, map data between DE 48 SE 33 and the ! Network Token Service token (ID = 'SC') in request and ! response messages where appropriate. ! Global 502-New Security Level Indicators for MasterPass ! Support new values in DE 48, SE 42 subfield 1 position ! 2 and DE 48, SE 42 subfield 1 position 3. ! Global 557-Introduction of Terminal Compliance Indicator ! for Transactions Acquired in India ! Support DE 48, SE 65. In outbound message populate ! from the STF. For inbound message map to switch token. ! Global 581-Identification of Mobile POS Acceptance ! Devices ! Support DE 61 subfield 10 new value "9". ! Global 586-MasterCard Electronic UCAF Edits Enhancement ! Support MasterCard Electronic transactions with DE 22 ! subfield 1 containing value "81", but without DE 48 ! SE 43. ! Global 590-MoneySend Enhancements ! Support DE 48 SE 71 subfield 1 new value "33". ! Support new DE 48 SE 67. ! Global 596-Introduction and Service Enablement of ! MasterCard Card on File Tokenization ! Map data between DE 48 SE 33 and the Network Token ! Service token (ID = 'SC') in request and response ! messages where appropriate. ! Support token request/maintenance transactions. ! Global 598-Addition of ATC Validation for the MasterCard ! Digital Enablement Service and M/Chip ! Cryptogram Services ! Support new values in DE 48 SE 71 subfield 1 and ! subfield 2. ! Support DE 48 SE 71 subfield 1 values "02" and "03", ! where DE 48 SE 34 may be present. ! Support new values in DE 48 SE 74 subfield 2. ! Europe 582-Installment Payment Processing in ! Europe Region Countries ! Support additional high-growth market countries in ! DE 112 SE 009. ! Global Operations Bulletin No. 2, 3 February 2014- ! Revised MasterCard MoneySend Rules and Requirements ! Support modifications to partial approval processing. ! Token Changes for Compatibility with BASE24-eps ! Set the switch token version to "17". ! Support the new Additional Amounts token (ID = "SE"). ! Map gratuity amount in DE 54 to the Additional Amounts ! token. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! util^collapse^sem ! util^expand^sem ! util^ilf^updt ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! AT60IATH: AUTHEMVS ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLFSTF, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS ! OK60LIB: OKLIBTS ! PS60IRTA: RTAUEMVS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60STF: RQSTFS, SCRNSTF ! Run Make. ! Replace BNETMNWD, BNETLOGM, BNETUPDT ! New files: ILB0814M, ILB0814R, ILB0814S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0814M. Run the ILF conversion using ILB0814R. ! Reference: WO #007328 #ADD 08759 PSTM^FRMT^0200^TO^XRQST int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int ntwk^tkn^srvc^tkn^lgth; #REPLACE 08772 PSTM^FRMT^0200^TO^XRQST int sub^lgth; #DELETE 09247 /09259 PSTM^FRMT^0200^TO^XRQST #ADD 09316g01 PSTM^FRMT^0200^TO^XRQST movd( tkn^id, ntwk^tkn^srvc^tkn^id^d ); if base24^rel^g >= 5 and visa_tran_g = false and hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^lgth ) and ntwk^tkn^srvc^tkn.frmt^cde = "01" and ntwk^tkn^srvc^tkn.genrc.tkn^rq^id <> blanks for $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) then begin if pstm.typ = request^d and pstm.tran.tran^cde = "16" and ntwk^tkn^srvc^tkn.genrc.tkn^maint^data = blanks for $len( ntwk^tkn^srvc^tkn.genrc.tkn^maint^data ) then begin ! ! format a token request message ! movd( sem.proc^cde, sem^tkn^rqst^d ); sub^lgth := 0; movd( sem.addl^data.info.paypass^mapping^sub^fld^33.tag, "33" ); if ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) then begin movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, "05" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.lgth, "02" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl ); end; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag, "06" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.lgth, "11" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id ); ! ! Set the length field in DE 48 SE 33 and the overall ! length field in DE 48 ! call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end ! of format a token request message else if pstm.typ = request^d and pstm.tran.tran^cde = "16" and ntwk^tkn^srvc^tkn.genrc.tkn^maint^data <> blanks for $len( ntwk^tkn^srvc^tkn.genrc.tkn^maint^data ) then begin ! ! format a token maintenance/inquiry request message ! movd( sem.proc^cde, sem^tkn^rqst^d ); sub^lgth := 0; movd( sem.addl^data.info.paypass^mapping^sub^fld^33.tag, "33" ); if ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) then begin movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, "05" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.lgth, "02" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl ); end; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag, "06" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.lgth, "11" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id ); ! ! Set the length field in DE 48 SE 33 and the overall ! length field in DE 48 ! call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); ! ! Format DE 124 ! sbit^map^bit^d := 1; mbr^def^bit^d := 1; movl( sem.mbr^def.token^maint^rqst.act^ind, ntwk^tkn^srvc^tkn.genrc.tkn^maint^data.act^ind, $len( ntwk^tkn^srvc^tkn.genrc. tkn^maint^data.act^ind ) ); if ntwk^tkn^srvc^tkn.genrc.tkn^maint^data. rplmt^pan^exp^dat <> blanks for $len( ntwk^tkn^srvc^tkn.genrc.tkn^maint^data. rplmt^pan^exp^dat ) then begin movl( sem.mbr^def.token^maint^rqst. replace^pan^exp^dat, ntwk^tkn^srvc^tkn.genrc.tkn^maint^data. rplmt^pan^exp^dat, $len( ntwk^tkn^srvc^tkn.genrc.tkn^maint^data. rplmt^pan^exp^dat ) ); movd ( sem.mbr^def.lgth, "005" ); end else begin movd ( sem.mbr^def.lgth, "001" ); end; end ! of format a token maint/inquiry request message else begin ! ! format tokenization data in a conventional message ! sub^lgth := 0; movd( sem.addl^data.info.paypass^mapping^sub^fld^33.tag, "33" ); if ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) then begin movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, "05" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.lgth, "02" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl ); end; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag, "06" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.lgth, "11" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ); sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id ); ! ! Set the length field in DE 48 SE 33 and the overall ! length field in DE 48 ! call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, sub^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of format tokenization data in a conventional msg end; ! of Network Service token contains data #REPLACE 09708O01 PSTM^FRMT^0200^TO^XRQST not sem^transit^aggr^d( sem ) and #REPLACE 09794M01 PSTM^FRMT^0200^TO^XRQST if sem^transit^aggr^d( sem ) and #ADD 10019 PSTM^FRMT^0200^TO^XRQST if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "0" and found^pos^data1^tkn and pos^data1^tkn.term^typ = "9" then begin movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], "9" ); end; #DELETE 10333X00/10333X0F PSTM^FRMT^0210^TO^XRESP #ADD 13536 PSTM^FRMT^SEM^ADDL^DATA int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int ntwk^tkn^srvc^tkn^lgth; #ADD 14413 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "5" or ps51^get^tkn.authn^coll^ind = "6" then begin ! ! ! Digital wallet transaction ! ! ! movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth, "2" ); end; #ADD 14422Z02 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.authn^coll^ind <> "6" and #ADD 14806 PSTM^FRMT^SEM^ADDL^DATA movd( tkn^id, ntwk^tkn^srvc^tkn^id^d ); if visa_tran_g and hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^lgth ) then begin if ntwk^tkn^srvc^tkn.frmt^cde = "01" and ntwk^tkn^srvc^tkn.genrc.tkn^rq^id <> blanks for $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) then begin ! ! Format DE 48 SE 33 for all messages that contain ! network token data ! sub^lgth := 0; movd( sem.addl^data.info. paypass^mapping^sub^fld^33.tag, "33" ); if ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) then begin movd( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, "05" ); movd( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.lgth, "02" ); movl( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ); sub^lgth := sub^lgth + 4 + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl ); end; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag, "06" ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.lgth, "11" ); movl( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ); sub^lgth := sub^lgth + 4 + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id ); ! ! Set the length field in DE 48 SE 33 and the overall ! length field in DE 48 ! call integer^ascii^( sem.addl^data.info. paypass^mapping^sub^fld^33. lgth, sub^lgth ); lgth := lgth + sub^lgth; end; ! of message contains network token data end; ! of found Network Token Services Token (SC) #ADD 14927c01 PSTM^FRMT^SEM^ADDL^DATA if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth = "1" then begin ! ! ! Change value for digital wallet transaction ! ! ! movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth, "2" ); end; #ADD 14947 PSTM^FRMT^SEM^ADDL^DATA if pstm.term^cntry^cde = "IN" and pstm.pt^srv^entry^mde <> "00" and pstm.pt^srv^entry^mde <> "01" then begin movd( sem.addl^data.info.term^cmplnt^ind^sub^fld^65.tag, "65" ); movd( sem.addl^data.info.term^cmplnt^ind^sub^fld^65.lgth, "02" ); movd( sem.addl^data.info.term^cmplnt^ind^sub^fld^65. certified.tle, "1" ); movd( sem.addl^data.info.term^cmplnt^ind^sub^fld^65. certified.ukpt, "1" ); call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) then begin if stf.tle^certified^flg = 1 then begin movd( sem.addl^data.info. term^cmplnt^ind^sub^fld^65. certified.tle, "2" ); end; if stf.ukpt^certified^flg = 1 then begin movd( sem.addl^data.info. term^cmplnt^ind^sub^fld^65. certified.ukpt, "2" ); end; end; lgth := lgth + $len( sem.addl^data.info. term^cmplnt^ind^sub^fld^65 ); end; #ADD 15497 SEM^FRMT^AMT^TO^PSTM^AMT struct .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 15510 SEM^FRMT^AMT^TO^PSTM^AMT int num^adnl^amts := 0; #ADD 15690 SEM^FRMT^AMT^TO^PSTM^AMT movd( tkn^id, adnl^amts^tkn^id^d ); call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^amts^tkn ); if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end else begin cnt := 0; end; num^adnl^amts := 0; for i := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ i ].amt^typ = bnet^amt^typ^gratuity^d then begin ! ! Amount type eligible for inclusion in Additional ! Amounts (SE) token ! move( adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, sem.addl^amt.info[ i ].amt^typ ); move( adnl^amts^tkn.info[ num^adnl^amts ]. crncy^cde, sem.addl^amt.info[ i ].crncy^cde ); move( adnl^amts^tkn.info[ num^adnl^amts ]. amt^sign, sem.addl^amt.info[ i ].typ^amt ); move( adnl^amts^tkn.info[ num^adnl^amts ].amt, sem.addl^amt.info[ i ].amt ); num^adnl^amts := num^adnl^amts + 1; end; ! of if amount type is included in SE token end; ! of for i := 0 if num^adnl^amts > 0 then begin ! ! Add the Additional Amounts (SE) token ! tkn^add^lgth := $len( adnl^amts^tkn.info[ i ] ) * num^adnl^amts; call integer^ascii^( adnl^amts^tkn.num^amts, num^adnl^amts ); tkn^add^lgth := tkn^add^lgth + $len( adnl^amts^tkn.num^amts ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^amts^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3163, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! of if tkn^result = over^max^limit^l else begin call log^message^( 3164, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3164 ); end; ! of NOT if result = over^max^limit end; ! of if token result end; ! of add the Additional Amounts (SE) token #DELETE 17537e00/17538 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 17560 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = paypass^mapped^cntctlss^chip or sem.pos^entry^mde = remote^ecomm^d then #DELETE 17561 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #REPLACE 17975 SEM^FRMT^RESP^CDE^TO^PSTM "57",! Tran not allowed to issuer ! "056",! No support for tran! #ADD 18466 SEM^FRMT^XRESP^TO^PSTM^0210 int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int ntwk^tkn^srvc^tkn^lgth; #ADD 19395G1a SEM^FRMT^XRESP^TO^PSTM^0210 movd( tkn^id, ntwk^tkn^srvc^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^lgth ) and ntwk^tkn^srvc^tkn.frmt^cde = "01" then begin if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag = "01" then begin movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^ind ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag = "05" then begin movl( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl, sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. pan^acct^range.tag = "07" then begin ! ! PAN account range is present ! if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" then begin ! ! Move the last 4 digits of PAN token data to ! the SC token field PAN^LAST^FOUR^DIGIT ! i := 0; while i < $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data ) and sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data. byte[ i ] <> " " do begin ! ! Set the index to the location of first ! blank character, which is the end of ! the PAN data ! i := i + 1; end; i := i - $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ); movl( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data.byte[ i ], $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ) ); end; ! of move last four digits of PAN if sem.addl^data.info.paypass^mapping^sub^fld^33. pan^acct^range.tag = "07" then begin movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, sem.addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data ) ); end; if sem.addl^data.info. visa^acct^stat^sub^fld^85.tag = "85" then begin movl( ntwk^tkn^srvc^tkn.genrc.acct^stat, sem.addl^data.info. visa^acct^stat^sub^fld^85.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. acct^stat ) ); end; end ! of PAN account range is present else begin ! ! PAN account range is NOT present ! if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" then begin movl( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data ) ); end; ! of acct^num.tag = "02" if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" and pstm.tran.tran^cde <> "16" and not sem^transit^d( sem ) then begin ! ! Move the last 4 digits of PAN token data to ! the SC token field PAN^LAST^FOUR^DIGIT ! i := 0; while i < $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data ) and sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data. byte[ i ] <> " " do begin ! ! Set the index to the location of first ! blank character, which is the end of ! the PAN data ! i := i + 1; end; i := i - $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ); movl( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data.byte[ i ], $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ) ); end; ! of move last four digits of PAN if sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag = "03" then begin movl( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat, sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag = "06" then begin movl( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, $len( ntwk^tkn^srvc^tkn.genrc. tkn^rq^id ) ); end; if pstm.tran.tran^cde = "16" and ntwk^tkn^srvc^tkn.genrc.tkn^maint^data <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^maint^data ) and mbr^def^bit^d then begin movl( ntwk^tkn^srvc^tkn.genrc.tkn^maint^data. tkn^stat, sem.mbr^def.token^maint^resp. pan^tkn^stat, $len( ntwk^tkn^srvc^tkn.genrc. tkn^maint^data.tkn^stat ) ); end; end; ! of PAN account range is NOT present end; ! of found Network Token Services Token (SC) #REPLACE 20387 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #REPLACE 20434 SEM^FRMT^XRQST^TO^PSTM^0200 int fnd^ntwk^tkn^srvc^tkn; #ADD 20437 SEM^FRMT^XRQST^TO^PSTM^0200 int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); #ADD 20570 SEM^FRMT^XRQST^TO^PSTM^0200 sem.proc^cde = sem^purchase^d and sem.tran^amt <> zeroes for $len( sem.tran^amt ) then #DELETE 20571 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21397M00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.paypass^mapping^sub^fld^33. tag = "33" and sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id <> blanks for $len( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id ) then begin ! ! Transaction uses network token service ! tkn^add^lgth := 0; ! ! Get the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^get^tkn, tkn^lgth ); if not fnd^ntwk^tkn^srvc^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^tkn ); tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); end ! of if not fnd^ntwk^tkn^srvc^tkn then else begin @ntwk^tkn^srvc^tkn := @ntwk^tkn^srvc^get^tkn; end; movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag = "01" then begin movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data, $len( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" then begin movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag^data, $len( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag = "03" then begin movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat, sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag^data, $len( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag = "05" then begin movl( ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, $len( ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag = "06" then begin movl( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ); end; if tkn^add^lgth > 0 then begin ! ! Add the network token service token (SC) ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3273, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3274, ! routing code !, @erradd^tkn^, net.myname, evt^msg^severity^crit^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3242 ); end; end; ! of if tkn^result end; ! of add the ntwk^tkn^srvc^tkn end ! of network token service processing else #ADD 21424 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 9 ] = "9" then begin movd( pos^data1^tkn.term^typ, "9" ); add^pos^data1 := true; end; ! MPOS ! #ADD 22010 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "9" then begin move( pos^data^tkn.crdhldr^actvt^term^ind, sem.ntl^pos^data.cond^cde.byte[ 9 ] ); end; #DELETE 22011 /22012 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22091 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "0" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "9" then #DELETE 22092 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22187 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "223" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "225" or #DELETE 22188 /22189 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22209 SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec.ucaf^ind <> "0" and sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind <> "6" then #DELETE 22210 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22268 SEM^FRMT^XRQST^TO^PSTM^0200 ucaf^ind <> " " then #DELETE 22269 /22276 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22496 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = mobile^ecomm^d and sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "52" then begin movd( pstm.pt^srv^entry^mde, pan^auto^cntctlss^mag^stripe ); end; #ADD 22497X03 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "02" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "03" or #ADD 22788f05 SEM^FRMT^XRQST^TO^PSTM^0200 ucaf^ind = "3" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "5" ) and #DELETE 22788f06 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 23367X00/23367X0F SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 26109 UTIL^COLLAPSE^SEM ! ! ! Terminal Compliant Indicator ! ! ! if hdr.addl^data.info. term^cmplnt^ind^sub^fld^65.tag = "65" then begin call ascii^integer( hdr.addl^data.info. term^cmplnt^ind^sub^fld^65. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. term^cmplnt^ind^sub^fld^65.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! ! MoneySend Information ! ! ! if hdr.addl^data.info. moneysend^info^sub^fld^67. tag = "67" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. moneysend^info^sub^fld^67.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Sanction Screening Score ! ! ! if hdr.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.tag = "01" then begin call ascii^integer( hdr.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! end; ! of if hdr...tag = "67" #REPLACE 26313 UTIL^COLLAPSE^SEM visa^acct^stat^sub^fld^85. #REPLACE 26318 UTIL^COLLAPSE^SEM visa^acct^stat^sub^fld^85. #REPLACE 26322 UTIL^COLLAPSE^SEM visa^acct^stat^sub^fld^85.tag, #ADD 26667 UTIL^COLLAPSE^SEM ! ! ! Move Subfield 5-Token Assurance Level ! ! ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag = "05" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 05 ! ! ! ! Move Subfield 6-Token Requestor Id ! ! ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag = "06" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 06 ! ! ! ! Move Subfield 7-PAN Account Range ! ! ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.tag = "07" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 07 ! #ADD 26889X0g UTIL^COLLAPSE^SEM ! ! ! Move Subfield 2 - Reserved ! ! ! if hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. rsrvd.tag = "02" then begin call ascii^integer( hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. rsrvd.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. rsrvd.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Mobile Phone Number ! ! ! if hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag = "03" then begin call ascii^integer( hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! ! ! ! Move Subfield 4 - Convenience Fee ! ! ! if hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag = "04" then begin call ascii^integer( hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! #DELETE 27672X00/27672X02 UTIL^EXPAND^SEM #DELETE 27804X00/27804X0O UTIL^EXPAND^SEM #ADD 28022X0T UTIL^EXPAND^SEM ! ! ! Move Subfield 2 - Reserved ! ! ! if sub^ptr = "02" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48. rsrvd.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Mobile Phone Number ! ! ! if sub^ptr = "03" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 03 ! ! ! ! Move Subfield 4 - Convenience Fee ! ! ! if sub^ptr = "04" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 04 ! #ADD 28064 UTIL^EXPAND^SEM if ptr[ length ] = "65" then begin ! ! ! Terminal Compliant Indicator ! ! ! movl( sem^ptr.addl^data.info. term^cmplnt^ind^sub^fld^65. tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else if ptr[ length ] = "67" then begin ! ! ! MoneySend Information ! ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. moneysend^info^sub^fld^67.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! ! Move Subfield 1 - ! ! Sanction Screening Score ! ! ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! subfield 01 ! length := length + tag^length + 4; end ! of if ptr[ length ] = "67" else #REPLACE 28311 UTIL^EXPAND^SEM visa^acct^stat^sub^fld^85. #ADD 28512 UTIL^EXPAND^SEM ! ! ! Move Subfield 5-Token Assurance Level ! ! ! if sub^ptr = "05" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! ! Move Subfield 6-Token Requestor Id ! ! ! if sub^ptr = "06" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! ! Move Subfield 6-PAN Account Range ! ! ! if sub^ptr = "07" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; #DELETE 28756X00/28756X0A UTIL^EXPAND^SEM #ADD 32746 UTIL^ILF^UPDT wlform( fail, "FAILURE on UPDATE, ILF File \f, Error \e " ) #DELETE 32747 UTIL^ILF^UPDT #REPLACE 32755 UTIL^ILF^UPDT int .filename[ 0:11 ]; #ADD 32972 UTIL^ILF^UPDT call fileinfo( fnum,, filename ); call log^message^( 2412,, @fail , net.myname, 1, @filename, error ); call log^message ( 2413,, ilf, $min( max^logger^l, ilf^lgth ), net.myname, 1 ); #DELETE 32973 /32974 UTIL^ILF^UPDT #ADD 33008 UTIL^ILF^UPDT call fileinfo( fnum,, filename ); call log^message^( 2414,, @fail , net.myname, 1, @filename, error ); call log^message ( 2415,, ilf, $min( max^logger^l, ilf^lgth ), net.myname, 1 ); #DELETE 33009 /33010 UTIL^ILF^UPDT #ADD 33022 UTIL^ILF^UPDT call fileinfo( fnum,, filename ); call log^message^( 2416,, @fail , net.myname, 1, @filename, error ); call log^message ( 2417,, ilf, $min( max^logger^l, ilf^lgth ), net.myname, 1 ); #DELETE 33023 /33024 UTIL^ILF^UPDT #REPLACE 36343M01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "17"; #REPLACE 36466 UTIL^SWI^TKN^INIT visa^acct^stat^sub^fld^85.tag = "85" then #REPLACE 36468 UTIL^SWI^TKN^INIT movl( bnet^tkn^buf.visa^acct^stat^ind, #REPLACE 36470 /36471 UTIL^SWI^TKN^INIT visa^acct^stat^sub^fld^85.tag^data, $len( bnet^tkn^buf.visa^acct^stat^ind ) ); #ADD 36635 UTIL^SWI^TKN^INIT if sem.addl^data.info. term^cmplnt^ind^sub^fld^65.tag = "65" then begin move( bnet^tkn^buf.tle^cmplnt^ind, sem.addl^data.info.term^cmplnt^ind^sub^fld^65. certified.tle ); move( bnet^tkn^buf.ukpt^cmplnt^ind, sem.addl^data.info.term^cmplnt^ind^sub^fld^65. certified.ukpt ); end; if sem.addl^data.info. moneysend^info^sub^fld^67.tag = "67" then begin move( bnet^tkn^buf.sanction^scrn^score, sem.addl^data.info.moneysend^info^sub^fld^67. sanction^scrn^score.tag^data ); end; #DELETE 36680M00/36680M0L UTIL^SWI^TKN^INIT #REPLACE 36875 /36876 UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.visa^acct^stat^ind <> blanks for $len( bnet^tkn^buf.visa^acct^stat^ind ) ) then #REPLACE 36878 /36879 UTIL^SWI^TKN^UPDT move( bnet^tkn.visa^acct^stat^ind, bnet^tkn^buf.visa^acct^stat^ind ); #ADD 37095 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.tle^cmplnt^ind <> blanks for $len( bnet^tkn^buf.tle^cmplnt^ind ) then begin movl( bnet^tkn.tle^cmplnt^ind, bnet^tkn^buf.tle^cmplnt^ind, $len( bnet^tkn.tle^cmplnt^ind ) ); end; ! of if bnet^tkn^buf.tle^cmplnt^ind if bnet^tkn^buf.ukpt^cmplnt^ind <> blanks for $len( bnet^tkn^buf.ukpt^cmplnt^ind ) then begin movl( bnet^tkn.ukpt^cmplnt^ind, bnet^tkn^buf.ukpt^cmplnt^ind, $len( bnet^tkn.ukpt^cmplnt^ind ) ); end; ! of if bnet^tkn^buf.ukpt^cmplnt^ind if bnet^tkn^buf.sanction^scrn^score <> blanks for $len( bnet^tkn^buf.sanction^scrn^score ) then begin movl( bnet^tkn.sanction^scrn^score, bnet^tkn^buf.sanction^scrn^score, $len( bnet^tkn.sanction^scrn^score ) ); end; ! of if bnet^tkn^buf.sanction^scrn^score ! #ENDSCN = SW0I266 !#CMP2.28 08/20/14 BNETS 6126 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6126 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6126 * ******************************************************************************** #SCN = SW0I269 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6126 #NEWVERSION = 6127 #ADD 03821Z0E ! 20AUG2014 bensone ! Symptom: Banknet Release 14.Q4 Functional Enhancements ! Problem: None ! Fix: Case #01591744 - ensure that a new ILF record is added ! if the ILF record cannot be updated. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fixes to: ! AT60IATH: AUTHEMVS ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLFSTF, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS ! OK60LIB: OKLIBTS ! PS60IRTA: RTAUEMVS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60STF: RQSTFS, SCRNSTF ! Run Make. ! Replace BNETMNWD, BNETLOGM, BNETUPDT ! New files: ILB0814M, ILB0814R, ILB0814S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0814M. Run the ILF conversion using ILB0814R. ! Reference: WO #007328 #ADD 17037 PSTM^0420^REVERSAL if not util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ) then begin call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len(ilf.prikey), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^format^error^l ); end; #DELETE 17038 /17042 PSTM^0420^REVERSAL #ENDSCN = SW0I269 !#CMP2.28 08/20/14 BNETDDLS6048 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6048 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6048 * ******************************************************************************** #SCN = SW0I273 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6048 #NEWVERSION = 6049 #ADD 00262v0U * 20AUG2014 bensone * Symptom: Banknet Release 14.Q4 Mandates * Problem: None * Fix: Global 125-Visa Gateway Enhancements * Changed the name of DE 48 SE 85 in the SEM to * visa-acct-stat-sub-fld-85. Changed the name in the * switch token to visa-acct-stat-ind. * Global 557-Introduction of Terminal Compliance Indicator * for Transactions Acquired in India * Added DE 48 SE 65 to the SEM. * Added DE 48 SE 65 subfields 1, 2 to the switch token. * Global 590-MoneySend Enhancements * Added DE 48 SE 67 to the SEM. * Added DE 48 SE 67 subfield 1 to the switch token. * Added DE 48 SE 48 subfields 2, 3, 4 to the SEM. * Global 596-Introduction and Service Enablement of * MasterCard Card on File Tokenization * Added DE 48 SE 33 subfields 5, 6, 7 to the SEM. * Moved DE 124 to the area of the SEM that is not * logged to the ILF, increased length to 299 bytes. * Global 598-Addition of ATC Validation for the MasterCard * Digital Enablement Service and M/Chip * Cryptogram Services * Removed the lists of valid values for DE 48 SE 71 * subfield 1 and for DE 48 SE 74 subfield 2. * Token Changes for Compatibility with BASE24-eps * Changed the switch token version to "17". * Removed the gratuity amount from the Switch token. * Dependency: Apply fixes to: * AT60IATH: AUTHEMVS * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLFSTF, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, BAUTILS * OK60LIB: OKLIBTS * PS60IRTA: RTAUEMVS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * SW60STF: RQSTFS, SCRNSTF * Run Make. * Replace BNETMNWD, BNETLOGM, BNETUPDT * New files: ILB0814M, ILB0814R, ILB0814S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0814M. Run the ILF conversion using ILB0814R. * Reference: WO #007328 #ADD 01157H0N SEM * Visa Account Status #DELETE 01157H0O SEM #ADD 01157H0P SEM 06 visa-acct-stat-sub-fld-85. #DELETE 01157H0Q SEM #ADD 01157R05 SEM * Valid values positions 1-2 (on-behalf service) and #DELETE 01157R06/01157k03 SEM #ADD 01157W0O SEM * may have up to 10 occurrences. #DELETE 01157W0P SEM #ADD 01157W0V SEM * 90 = Chip Fall-back Transaction Downgrade Process * * Valid values position 3 (Processing Information) and * valid position 1-2 and position 3 value combinations * are documented in MasterCard's Customer Interface Specification. #DELETE 01157W0W/01157W0e SEM #ADD 01157f0g SEM 08 tkn-assurance-lvl. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 tkn-rq-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(11). 08 pan-acct-range. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). #ADD 01157v05 SEM * Subfield 2 is reserved for future use. * Subfield 3 contains the customer mobile phone number. * Subfield 4 contains customer convenience fee data. #ADD 01157v0D SEM 08 rsrvd. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. 08 mobile-phn-num. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). 08 convenience-fee. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(40). * * Terminal Compliant Indicator * Subfield tag = 65 * Subfield 1 indicates whether or not the POS terminal is Terminal * Line Encryption (TLE)-certified. * Subfield 2 indicates whether or not the POS terminal is Unique Key * Per Terminal/Derived Unique Key Per Terminal (UKPT/DUKPT)-certified. * 06 term-cmplnt-ind-sub-fld-65. 08 tag pic 99. 08 lgth pic 99. 08 certified. 10 tle pic x. 10 ukpt pic x. * * MoneySend Information * Subfield tag = 67 * Subfield 1 contains the sanction screening score. * 06 moneysend-info-sub-fld-67. 08 tag pic 99. 08 lgth pic 99. 08 sanction-scrn-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). #REPLACE 01157v0G SEM 04 user-fld pic x(80). #DELETE 01403M01/01403v06 SEM #ADD 01411bA8 SEM * * member defined data * bit map position = 124 * EBCDIC in transmission, variable in length * * used when an acquirer or issuer needs to send data about the * transaction to the recepient of the message. * 02 mbr-def. 04 lgth pic 999. 04 info pic x(299). * * Format for request data only. * 04 rqst redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 provider-id. 10 tag pic x(2). ! 01 ! 10 lgth pic x(2). 10 tag-data pic x(9). 08 typ-cde. 10 tag pic x(2). ! 02 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(184). * * Format for response data only. * 04 resp redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 payer-id. 10 tag pic x(2). ! 03 ! 10 lgth pic x(2). 10 tag-data pic x(6). 08 rsn-cde. 10 tag pic x(2). ! 04 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(199). * * Format for request and response data. * 04 hlth redefines info. 06 srvc occurs 5 times. 08 tag pic x(2). 08 lgth pic x(2). 08 provider-id. 10 tag pic x(2). ! 01 ! 10 lgth pic x(2). 10 tag-data pic x(9). 08 typ-cde. 10 tag pic x(2). ! 02 ! 10 lgth pic x(2). 10 tag-data pic x(2). 08 payer-id. 10 tag pic x(2). ! 03 ! 10 lgth pic x(2). 10 tag-data pic x(6). 08 rsn-cde. 10 tag pic x(2). ! 04 ! 10 lgth pic x(2). 10 tag-data pic x(2). 06 filler pic x(104). * * Format for sender identification data. * 04 sender redefines info. 06 unique-ref-num pic x(19). 06 nam pic x(24). 06 addr pic x(91). 06 phn-num pic x(20). 06 dob pic x(8). 06 msg pic x(37). 06 filler pic x(100). * * Format for token maintenance/inquiry request data. * 04 token-maint-rqst redefines info. 06 act-ind pic x. 06 replace-pan-exp-dat pic x(4). 06 filler pic x(294). * * Format for token maintenance/inquiry response data. * 04 token-maint-resp redefines info. 06 pan-tkn pic x(19). 06 pan-tkn-exp-dat pic x(4). 06 pan-tkn-stat pic x. 06 filler pic x(275). #REPLACE 02760u06 SAF-BNET * Switch token version (ver-id) will be "17". #REPLACE 02760H04 SAF-BNET 02 visa-acct-stat-ind pic x. #ADD 02760u08 SAF-BNET 02 tle-cmplnt-ind pic x. 02 ukpt-cmplnt-ind pic x. 02 sanction-scrn-score pic x(3). 02 user-fld-aci pic x. #DELETE 02760u09 SAF-BNET #ENDSCN = SW0I273 !#CMP2.28 09/11/14 BNETLIBS6237 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6237 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6237 * ******************************************************************************** #SCN = SW0I304 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6237 #NEWVERSION = 6238 #ADD 07850k1J ! 11SEP2014 wielerk ! Symptom: Interface incorrectly identifies presence of CH token ! which causes memory corruption. ! Problem: A previous fix incorrectly invoked tkn^get^info to ! identify the presence of the CH token. ! Fix: Modified code to invoke hiswtkn^get^tkn to return true ! or false when searching for the CH token. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1722438. #ADD 18913e01 SEM^FRMT^XRESP^TO^PSTM^0210 if hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn^ptr, pos^data1^tkn^lgth ) then #DELETE 18913e02/18913e09 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0I304 !#CMP2.28 09/26/14 BNETDDLS6049 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6049 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6049 * ******************************************************************************** #SCN = SW0I319 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6049 #NEWVERSION = 6050 #ADD 00262w0k * 26SEP2014 wielerk * Symptom: Base24 acquired ATM PIN Change transactions result in * corrupting the STM. * Problem: SEM increased beyond the definition of SUSP.EXTRN^MSG. * Moving data into the last SEM fields causes data to * overflow into subsequent memory locations. * Fix: Increase SUSP.EXTRN^MSG to 2000 words. * Dependency: Apply fix to BNETDDLS. Run Make. * Reference: Case #1749821. #REPLACE 02719V01 SAF-BNET 02 extrn-msg type binary 16 occurs 2000 times. #ENDSCN = SW0I319 !#CMP2.28 10/24/14 BNETLIBS6238 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6238 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6238 * ******************************************************************************** #SCN = SW0I331 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6238 #NEWVERSION = 6239 #ADD 07850l0B ! 24OCT2014 saderc ! Symptom: The interface is adding the POS Data1 token (CH) to ! the response message with an invalid value in the ! auth-msg-ind field. ! Problem: The interface currently initializes the DE 48 SE 61 to ! zeroes in the proc that formats the external request. ! In subsequent processing, it formats DE 48 SE 61 using ! the data in the internal message. If DE 48 61 does not ! contain zeroes after external request is formatted, then ! the subelement is sent in the outbound request message. ! The problem is that DE 48 SE 61 is used to format the ! internal response message. The logic that formats the ! response is checking for a non-spaces in final^auth^ind ! field in SE 61 as one of the conditions for adding the ! CH token. Since SE 61 has been initialized to zeroes in ! the request processing, the CH token is being added when ! it should not be added. ! Fix: The interface was modifed to reset DE 48 SE 61 to ! spaces, if the field still contains zeroes after the ! request processing has been completed. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1778958 #ADD 13941 PSTM^FRMT^SEM^ADDL^DATA end ! of SE61 <> "00000" else begin sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data ':=' [ $len(sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data ) * [" "] ]; end; ! of else SE61 <> "00000" #DELETE 13942 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I331 !#CMP2.28 10/28/14 BNETLIBS6239 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6239 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6239 * ******************************************************************************** #SCN = SW0I332 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6239 #NEWVERSION = 6240 #ADD 07850m0O ! 28OCT2014 saderc ! Symptom: The interface is sending a MOTO recurring transaction to ! the interchange with a zero transaction amount (DE 4) ! when the original amount is less than $1 in certain ! cases. ! Problem: The interface currently contains logic to identify a ! TEST recurring payment. This logic checks for an amount ! of $1 dollar sent in pstm.tran.amt^1. The processing ! adjust the amount per the value configured for the ! decimal place and places the result in the local ! variable tran^amt. The logic incorrectly checks for a ! value of zero in tran^amt to determine if the ! transaction is a TEST recurring payment i.e. amount $1. ! As a result, any amount of less than $1 in the amt^1 ! field will be identified as a TEST recurring payment, ! which means the external request is being sent with a ! zero amount. ! Fix: The interface was modified to check for a value of zero ! in the pstm.tran.amt^1 field, instead of checking for a ! value in tran^amt. Also, the 2 case statements that are ! used to check for a $1 dollar amount have beem modified ! to correctly check for the exact amount. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1783389 #ADD 09686 PSTM^FRMT^0200^TO^XRQST tran^amt := 0f; #ADD 09688 PSTM^FRMT^0200^TO^XRQST !0! begin if pstm.tran.amt^1 = 1f then begin tran^amt := 1f; end; end; !1! begin if pstm.tran.amt^1 = 10f then begin tran^amt := 1f; end; end; !2! begin if pstm.tran.amt^1 = 100f then begin tran^amt := 1f; end; end; !3! begin if pstm.tran.amt^1 = 1000f then begin tran^amt := 1f; end; end; !?! otherwise call programmatic^dump( 310 ); #DELETE 09689 /09694 PSTM^FRMT^0200^TO^XRQST #REPLACE 09698 PSTM^FRMT^0200^TO^XRQST pstm.tran.amt^1 = 0f then #ADD 09708M0x PSTM^FRMT^0200^TO^XRQST tran^amt := 0f; #ADD 09708M0z PSTM^FRMT^0200^TO^XRQST !0! begin if pstm.tran.amt^1 = 1f then begin tran^amt := 1f; end; end; !1! begin if pstm.tran.amt^1 = 10f then begin tran^amt := 1f; end; end; !2! begin if pstm.tran.amt^1 = 100f then begin tran^amt := 1f; end; end; !3! begin if pstm.tran.amt^1 = 1000f then begin tran^amt := 1f; end; end; !?! otherwise call programmatic^dump( 311 ); #DELETE 09708M10/09708M15 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0I332 !#CMP2.28 11/03/14 BNETLIBS6240 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6240 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6240 * ******************************************************************************** #SCN = SW0I334 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6240 #NEWVERSION = 6241 #ADD 07850n0Q ! 03NOV2014 wielerk ! Symptom: The interface is only updating amount 2 in the BE (orig ! ^crncy^60^tkn ) when formatting an inbound reversal. ! Problem: The interface currently only updates amount 2 in the ! token, but there are instances where amount 1 can be ! different and that needs to be reflected in the token. ! Fix: Modified logic to update amount1 in the token using ! DE-4 ( tran amount ) and to also update the remaining ! token fields from the SEM. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1759115. #ADD 23652 SEM^FRMT^XRVSL^TO^PSTM^0420 fixed orig^crncy^60^amt := 0f; #DELETE 23653 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 23911 SEM^FRMT^XRVSL^TO^PSTM^0420 movl( amt^1, rvsl.tran^amt, $len( rvsl.tran^amt ) ); ascii^fixed( amt^1, $occurs( amt^1 ), orig^crncy^60^amt ); orig^crncy^60^get^tkn.amt^1 := orig^crncy^60^amt; ascii^fixed( amt^2, $occurs( amt^2 ), orig^crncy^60^amt ); orig^crncy^60^get^tkn.amt^2 := orig^crncy^60^amt; movl( orig^crncy^60^get^tkn.conv^rate, rvsl.conv^rate^crd^iss, $len( rvsl.conv^rate^crd^iss ) ); movl( orig^crncy^60^get^tkn.conv^dat, rvsl.conv^dat, $len ( rvsl.conv^dat ) ); movl( orig^crncy^60^get^tkn.crncy^cde, rvsl.tran^crncy^cde, $len( rvsl.tran^crncy^cde ) ); #DELETE 23912 /23914 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 23916 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0I334 !#CMP2.28 11/03/14 BNETLIBS6241 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6241 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6241 * ******************************************************************************** #SCN = SW0I336 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6241 #NEWVERSION = 6242 #ADD 07850o0D ! 03NOV2014 saderc ! Symptom: The value in the pmnt-ind field of the POS Data1 token ! (CH) does not reflect the value returned in DE 48 SE 77 ! (Payment Transaction Type Indicator) from the switch. ! Problem: The interface does not format the pmnt-ind field of the ! CH token with the value returned in DE 48 SE 77 when ! processing a response from the switch. ! Fix: The interface was modified to format the pmnt-ind field ! of the CH token with the value returned in DE 48 SE 77 ! when processing a response from the switch. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1769584 #ADD 18487e02 SEM^FRMT^XRESP^TO^PSTM^0210 string pmnt^typ^ind[ 0:2 ] := 3 * [ " " ]; #ADD 18913 SEM^FRMT^XRESP^TO^PSTM^0210 movl( pmnt^typ^ind, rqst.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, $occurs ( pmnt^typ^ind) ); #ADD 18913e0H SEM^FRMT^XRESP^TO^PSTM^0210 movl( pos^data1^tkn^ptr.pmnt^typ^ind, pmnt^typ^ind, $len( pos^data1^tkn^ptr.pmnt^typ^ind ) ); #ADD 18913e0P SEM^FRMT^XRESP^TO^PSTM^0210 pmnt^typ^ind <> " " or #ADD 18913e0Z SEM^FRMT^XRESP^TO^PSTM^0210 move( pos^data1^tkn.resp^src^rsn^cde, resp^src^rsn^cde ); movl( pos^data1^tkn.pmnt^typ^ind, pmnt^typ^ind, $len( pos^data1^tkn.pmnt^typ^ind ) ); #ENDSCN = SW0I336 !#CMP2.28 11/11/14 BNETG 6091 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6091 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6091 * ******************************************************************************** #SCN = SW0I339 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F000260g ! 04NOV2014 PandeyA ! Symptom: BASE24 Banknet Issuer ATM Contactless EMV Transaction ! support. ! Problem: None. ! Fix: Modified the define sem^atm^allwd^entry^mde^d, ! it specifies the allowed POS entry mode for ! ATM transactions. ! Dependency: Apply fixes to: ! SW60BNET.BNETG ! SW60IBNT.BNETEMVS ! AT60IATH.AUTHEMVS ! Replace SW60BNET.BNETUPDT and run MAKE. ! Reference: WO #007663 #ADD C0023305 x.pos^entry^mde = pan^auto^cntctlss^m^chip or x.pos^entry^mde = paypass^mapped^cntctlss^chip or #ENDSCN = SW0I339 !#CMP2.28 11/11/14 ILB0814M6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0814M ILB0814M 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0814M ILB0814M 6000 * ******************************************************************************** #SCN = SW0I340 , FILEID = ILB0814M #VOLUME = $ROOK.SW60BNET #FILE = ILB0814M #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6000 #NEWVERSION = 6001 #ADD 0041 # 11NOV2014 bensone # Symptom: ILF conversion abends when opening ILFs that are # Format 2 and greater than 4 Gigabytes in size. # Problem: The conversion program uses OPEN instead of File_Open_. # Fix: The file access layer on the BA10SC04 subvolume was # modified to use lib_file_open ( OKLIBTS ). # Modified the Bind section to include oklib_oklibto in # the dependency list and the Bind search list. # Dependency: Apply fixes to: # BA10SC04: CNVG, CNVLIBS, CNVM # Run Make on the BA10SC04 subvolume using CNVM # SW60BNET: ILB0814M # Make the ILF conversion using ILB0814M. # Run the ILF conversion using ILB0814R. # Reference: Case #1799444 #ADD 0101 $(oklib_oklibto) \ #ADD 0115 = #APPEND :var select search $(oklib_oklibto) #ENDSCN = SW0I340 !#CMP2.28 11/20/14 BNETLIBS6242 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6242 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6242 * ******************************************************************************** #SCN = SW0I371 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6242 #NEWVERSION = 6243 #ADD 07850p0E ! 20NOV2014 wielerk ! Symptom: The interface is not setting the length of DE-48 ( addl ! data ) in outbound reversal messages. ! Problem: The interface is sending DE 48 SE 43 (Visa CAVV) even ! though there is no data. This is causing the length ! of field 48 to be set incorrectly. ! The edit using the global blanks was insufficient as ! an operator when the token area is 200 bytes. ! Fix: Modified logic to not send DE 48 SE 43 if there is no ! data present in the Authentication Date (CE) token. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1782121. #ADD 14428j03 PSTM^FRMT^SEM^ADDL^DATA if authn^data^tkn.authn^ind^data <> [($len(authn^data^tkn.authn^ind^data) - 2) * [" "] ] then #DELETE 14428j04/14428j05 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I371 !#CMP2.28 11/24/14 BNETLIBS6243 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6243 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6243 * ******************************************************************************** #SCN = SW0I392 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6243 #NEWVERSION = 6244 #ADD 07850q0E ! 24NOV2014 saderc ! Symptom: The interface is formatting subfields in DE 48.61 (Addl ! Data:POS Data, Extended Condition Codes) with invalid ! data. ! Problem: The interface was modified for SCN SW0I332 to set DE ! 48.61 to spaces after processing the associated fields ! in the PSTM that could potentially format this field, if ! DE 48.61 contains zeroes. The location of this new code ! was premature since there is subsequent processing that ! could cause DE 48.61 to be formatted. As a result, some ! of the subfields could contain a space, which maybe an ! invalid value. ! Fix: The interface was modified to move the block of code ! that sets DE 48.61 to spaces to a location after the ! relevant fields in the PSTM have been interrogatted. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1806918 #ADD 09708M1W PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data = "00000" then begin sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data ':=' [ $len(sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data ) * [" "] ]; end; ! of if SE61 = "00000" #ADD 13941m00 PSTM^FRMT^SEM^ADDL^DATA end; ! of SE61 <> "00000" #DELETE 13941m01/13941m07 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0I392 !#CMP2.28 02/18/15 BNETDDLS6050 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6050 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6050 * ******************************************************************************** #SCN = SW0J032 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6050 #NEWVERSION = 6051 #ADD 00262x0A * 18FEB2015 bensone * Symptom: Banknet Release 15.Q2 Functional Enhancements * Problem: None. * Fix: Change the name of DE 48 SE 48 subfield 2 to * remt-pmnt-txn-typ. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNID, BATKNCVS * PS60RTAU: AUTHLIBS, RTAUG * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Run Make. * Reference: WO #007657 #ADD 01157w0o SEM 08 remt-pmnt-txn-typ. #DELETE 01157w0p SEM #ENDSCN = SW0J032 !#CMP2.28 02/18/15 BNETG 6092 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6092 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6092 * ******************************************************************************** #SCN = SW0J033 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G000260E ! 18FEB2015 bensone ! Symptom: Banknet Release 15.Q2 Functional Enhancements ! Problem: None. ! Fix: Source in mobile payments token definition. ! Add new define visa^recur^pmnt^txt^d. ! Add new define sem^moneysend^txn^ind^d. ! Modified define sem^moneysend^d. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS ! PS60RTAU: AUTHLIBS, RTAUG ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #007657 #ADD 0002620O ? mobile^pmnts^tkn #ADD 0002620k ! mobile^pmnts^tkn #ADD 00194W02 define visa^recur^pmnt^txt^d = "PARTIAL SHIPMENT "#; #ADD 00233}02 define sem^moneysend^txn^ind^d ( x ) = ( x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C07" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C52" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C53" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C54" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C55" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C56" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C67" )#; #ADD 00233z06 sem^moneysend^txn^ind^d( x ) )#; #DELETE 00233z07/B0023303 #ENDSCN = SW0J033 !#CMP2.28 02/18/15 BNETLIBS6244 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6244 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6244 * ******************************************************************************** #SCN = SW0J034 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6244 #NEWVERSION = 6245 #ADD 07850r0K ! 18FEB2015 bensone ! Symptom: Banknet Release 15.Q2 Functional Enhancements ! Problem: None. ! Fix: Global 125-Visa Gateway Tokenization Enhancements ! Global 510-Funding and Payment Transaction Type ! Indicator Enhancement ! Add indicator "C67" Inter Platform Person-to-Person. ! Global 550-Miscellaneous Core System Updates ! Map new MCCs to the appropriate TCC. ! Global 560-MasterCard Mobile Remote Payment Program ! Enhancements ! Support MasterCard Mobile Remote Payment Transaction ! Types in DE 48 SE 48 subfield 2. ! Global Operations Bulletin No. 11, 3 November 2014 ! Use MCC 7801 or 7802 instead of MCC 9754 to identify ! a U.S. region merchant conducting non-sports ! intrastate internet gambling activity or horse or dog ! racing gambling activity. ! Europe Operations Bulletin No. 12, 1 December 2014 ! Ensure appropriate response code is used in 0110 and ! 0120 messages sent outbound to the network. ! Enhancement to Release 14.Q4 Europe Region 582- ! Installment Payment Processing in Europe Region ! Countries (Case #01765925) ! Ensure installment transactions are supported under ! LCONF parameter SW-BNET-SPPT-INSTL-TXN. ! AVS Support for Canadian Cards at U.S. AFDs ! Remove two trailing zeros from postal code in AVS ! data, if transaction originates from a U.S. AFD, and ! the BASE24 operated by a Canadian institution. ! Miscellaneous Cases (#01722438, #01754724, #01791846, ! #01855352) ! Remove the duplicated logic when formatting internal ! response message to a Banknet response message. ! Use default of '0' instead of '1' for DE 48 SE 42 SF 1 ! position 3, when merchant indicates UCAF data has been ! collected, but no UCAF data is present. ! Set ACQ-PROC-CDE field as well as the ISS-PROC-CDE ! field when populating Transaction Subtype token ! (Token ID = "BM"). ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS ! PS60RTAU: AUTHLIBS, RTAUG ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #007657 #DELETE 09404 PSTM^FRMT^0200^TO^XRQST #REPLACE 09405 PSTM^FRMT^0200^TO^XRQST if sem.merch^typ = "7995" then #ADD 09705M02 PSTM^FRMT^0200^TO^XRQST if visa_tran_g and sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" and found^pos^data1^tkn and pos^data1^tkn.recur^pmnt^info = "1" then begin call ascii^integer^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.ucaf^sub^fld^43.tag, "43" ); movd( sem.addl^data.info.ucaf^sub^fld^43.lgth, "28" ); movd( sem.addl^data.info.ucaf^sub^fld^43.tag^data, visa^recur^pmnt^txt^d ); call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43.lgth, 2, se^lgth ); lgth := lgth + se^lgth + 4; movd( sem.addl^data.info.ecom^sec^sub^fld^42.tag, "42"); movd( sem.addl^data.info.ecom^sec^sub^fld^42.lgth, "07" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.subfld^id, "01" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.data^lgth, "03" ); movd( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec, "210" ); call ascii^integer( sem.addl^data.info. ecom^sec^sub^fld^42.lgth, 2, se^lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end; #ADD 10020 PSTM^FRMT^0200^TO^XRQST sem.merch^typ = "7801" or sem.merch^typ = "7802" or #ADD 10026 PSTM^FRMT^0200^TO^XRQST manual^entry and #ADD 10194X00 PSTM^FRMT^0200^TO^XRQST if ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) and hgm^instl^cntry^cde^d( sem ) and #DELETE 10194X01 PSTM^FRMT^0200^TO^XRQST #ADD 11549X00 PSTM^FRMT^0420^TO^ACQ^XRVSL if ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) and hgm^instl^cntry^cde^d( sem ) and #DELETE 11549X01 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 13095 PSTM^FRMT^RESP^CDE^TO^SEM "064",! Bad Track2 ! "57",! Tran not supp/permit ! #DELETE 13096 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13097 PSTM^FRMT^RESP^CDE^TO^SEM #DELETE 13098 /13139 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13140 PSTM^FRMT^RESP^CDE^TO^SEM "093",! Delinquent ! "14",! Invalid Card Number ! #DELETE 13141 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13143 PSTM^FRMT^RESP^CDE^TO^SEM "095",! Amount over maximum ! "61",! Exceeds wdl limits ! #DELETE 13144 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13145 PSTM^FRMT^RESP^CDE^TO^SEM #DELETE 13146 /13199 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13200 PSTM^FRMT^RESP^CDE^TO^SEM "400",! ARQC failure ! "57",! Tran not supp/permit ! #DELETE 13201 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13204 PSTM^FRMT^RESP^CDE^TO^SEM "404",! ATC check failure ! "57",! Tran not supp/permit ! "405",! CVR decline ! "57",! Tran not supp/permit ! "406",! TVR decline ! "57",! Tran not supp/permit ! "407",! Rsn Online Cde decline ! "57",! Tran not supp/permit ! "408",! Fallback decline ! "57",! Tran not supp/permit ! #DELETE 13205 /13209 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13387 PSTM^FRMT^SEM^ADDL^DATA "4722" , "4722" , "X" , #DELETE 13388 PSTM^FRMT^SEM^ADDL^DATA #ADD 13389 PSTM^FRMT^SEM^ADDL^DATA "4789" , "4789" , "X" , #DELETE 13390 PSTM^FRMT^SEM^ADDL^DATA #ADD 13391 PSTM^FRMT^SEM^ADDL^DATA "4812" , "4821" , "T" , #DELETE 13392 /13393 PSTM^FRMT^SEM^ADDL^DATA #ADD 13394 PSTM^FRMT^SEM^ADDL^DATA "4829" , "4829" , "U" , "4899" , "5735" , "R" , #DELETE 13395 /13399 PSTM^FRMT^SEM^ADDL^DATA #ADD 13401 PSTM^FRMT^SEM^ADDL^DATA "5815" , "5999" , "T" , #DELETE 13402 /13407 PSTM^FRMT^SEM^ADDL^DATA #ADD 13410 PSTM^FRMT^SEM^ADDL^DATA "6012" , "6012" , "R" , #DELETE 13411 PSTM^FRMT^SEM^ADDL^DATA #ADD 13413 PSTM^FRMT^SEM^ADDL^DATA "6211" , "6513" , "R" , #DELETE 13414 /13417 PSTM^FRMT^SEM^ADDL^DATA #ADD 13423 PSTM^FRMT^SEM^ADDL^DATA "7012" , "7399" , "R" , #DELETE 13424 /13427 PSTM^FRMT^SEM^ADDL^DATA #ADD 13430 PSTM^FRMT^SEM^ADDL^DATA "7523" , "7800" , "R" , "7801" , "7802" , "U" , "7829" , "7994" , "R" , #DELETE 13431 /13433 PSTM^FRMT^SEM^ADDL^DATA #ADD 13438 PSTM^FRMT^SEM^ADDL^DATA "8071" , "8211" , "R" , #DELETE 13439 PSTM^FRMT^SEM^ADDL^DATA #ADD 13440 PSTM^FRMT^SEM^ADDL^DATA "8241" , "9405" , "R" , #DELETE 13441 /13452 PSTM^FRMT^SEM^ADDL^DATA #ADD 13536 PSTM^FRMT^SEM^ADDL^DATA int .mobile^pmnts^tkn( mobile^pmnts^tkn^def ); #REPLACE 14428j1C PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, "0" ); #REPLACE 14488 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, "0" ); #DELETE 14491X08/14491X0B PSTM^FRMT^SEM^ADDL^DATA #ADD 14491X0L PSTM^FRMT^SEM^ADDL^DATA sub^lgth := $len( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind ); if e^com^addl^data^tkn.mobile^txn^typ <> " " then begin movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ.tag, "02" ); movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ.lgth, "01" ); move( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ.tag^data, e^com^addl^data^tkn.mobile^txn^typ ); sub^lgth := sub^lgth + $len( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ ); end; tkn^id ':=' mobile^pmnts^tkn^id^d; if hiswtkn^get^tkn ( pstm, tkn^id, @mobile^pmnts^tkn, tkn^lgth ) then begin if mobile^pmnts^tkn.mc^remt.mobile^phn^num <> [ $len( mobile^pmnts^tkn.mc^remt. mobile^phn^num ) * [" "] ] then begin ! ! Move subtag "03" Mobile Phone Number ! movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag, "03" ); i := $len( mobile^pmnts^tkn.mc^remt. mobile^phn^num ) - 1; while i >= 0 and mobile^pmnts^tkn.mc^remt. mobile^phn^num.byte[ i ] = " " do begin decrement^d( i ); end; increment^d( i ); call integer^ascii^( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.lgth, i ); movl( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag^data, mobile^pmnts^tkn.mc^remt. mobile^phn^num, i ); sub^lgth := sub^lgth + 4 + i; end; ! of mobile^phn^num <> spaces if mobile^pmnts^tkn.mc^remt.convenience^fee <> [ $len( mobile^pmnts^tkn.mc^remt. convenience^fee ) * [" "] ] then begin ! ! Move subtag "04" Convenience Fee ! movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag, "04" ); i := $len( mobile^pmnts^tkn.mc^remt. convenience^fee ) - 1; while i >= 0 and mobile^pmnts^tkn.mc^remt. convenience^fee.byte[ i ] = " " do begin decrement^d( i ); end; increment^d( i ); call integer^ascii^( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.lgth, i ); movl( sem.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag^data, mobile^pmnts^tkn.mc^remt. convenience^fee, i ); sub^lgth := sub^lgth + 4 + i; end; ! of mobile^phn^num <> spaces end; movd( sem.addl^data.info. mobile^pgm^inds^sub^fld^48.tag, "48" ); call integer^ascii^( sem.addl^data.info. mobile^pgm^inds^sub^fld^48.lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; #ADD 14491X0d PSTM^FRMT^SEM^ADDL^DATA lgth := lgth + 6; #DELETE 14491X0e PSTM^FRMT^SEM^ADDL^DATA #ADD 15774 SEM^FRMT^AMT^TO^PSTM^AMT move( txn^subtyp^tkn.acq^proc^cde, sem.proc^cde ); #DELETE 18914 /19106 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20386 SEM^FRMT^XRQST^TO^PSTM^0200 struct .mobile^pmnts^tkn( mobile^pmnts^tkn^def ); #ADD 20735 SEM^FRMT^XRQST^TO^PSTM^0200 move( txn^subtyp^tkn.acq^proc^cde, sem.proc^cde ); #ADD 20864 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^txn^ind^d( sem ) then #DELETE 20865 /20866e01 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 21397k27 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 3274 ); #ADD 21468X06 SEM^FRMT^XRQST^TO^PSTM^0200 sem.adnl^data^natl.hgmins.sub^fld^9.tag = "009" and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) then #DELETE 21468X07 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22320X03 SEM^FRMT^XRQST^TO^PSTM^0200 move( e^com^addl^data^tkn.mobile^txn^typ, sem.addl^data.info.mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ.tag^data ); #ADD 22320X07 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag = "03" or sem.addl^data.info.mobile^pgm^inds^sub^fld^48. convenience^fee.tag = "04" then begin movd( tkn^id, mobile^pmnts^tkn^id^d ); call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, mobile^pmnts^tkn ); move( mobile^pmnts^tkn.mc^remt.mobile^phn^num, sem.addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag^data ); move( mobile^pmnts^tkn.mc^remt.convenience^fee, sem.addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag^data ); tkn^add^lgth := $len( mobile^pmnts^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, mobile^pmnts^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3275, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data. ref^num, @sem.setl^dat ); end else begin call log^message^( 3276, ! routing code !, @erradd^tkn^, net.myname, evt^msg^severity^crit^l, @tkn^id, @pstm.seq^num, @sem.banknet^data. ref^num, @sem.setl^dat, tkn^result ); call abend^( 3276 ); end; end; ! of if tkn^result end; ! of tag 03 or 04 if sem.addl^data.info. mobile^pgm^inds^sub^fld^48.tag = "48" or sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag = "23" then begin movd( pstm.pt^srv^entry^mde, pan^auto^cntctlss^m^chip ); end; end; ! of sem.pos^entry^mde = mobile^ecomm^d #DELETE 22321 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22326 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' e^com^addl^data^tkn^id^d; #REPLACE 22370 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 3261 ); #ADD 23152X01 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.ntl^pos^data.cntry^cde = "124" or ! Canada ! sem.ntl^pos^data.cntry^cde = "840" ) and ! U.S. ! pct.dflt.cntry^cde = "124" and ! Canada ! #DELETE 23152X02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 26889k01 UTIL^COLLAPSE^SEM ! Move Subfield 2 - ! ! Mobile Remote Payment Transaction Type ! #DELETE 26889k02 UTIL^COLLAPSE^SEM #ADD 26889k05 UTIL^COLLAPSE^SEM remt^pmnt^txn^typ.tag = "02" then #DELETE 26889k06 UTIL^COLLAPSE^SEM #ADD 26889k09 UTIL^COLLAPSE^SEM remt^pmnt^txn^typ.lgth, #DELETE 26889k0A UTIL^COLLAPSE^SEM #ADD 26889k0F UTIL^COLLAPSE^SEM remt^pmnt^txn^typ.tag, #DELETE 26889k0G UTIL^COLLAPSE^SEM #ADD 28022k01 UTIL^EXPAND^SEM ! Move Subfield 2 - Mobile Remote ! ! Payment Transaction Type ! #DELETE 28022k02 UTIL^EXPAND^SEM #ADD 28022k0A UTIL^EXPAND^SEM remt^pmnt^txn^typ.tag, #DELETE 28022k0B UTIL^EXPAND^SEM #ENDSCN = SW0J034 !#CMP2.28 02/26/15 BNETLIBS6245 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6245 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6245 * ******************************************************************************** #SCN = SW0J061 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6245 #NEWVERSION = 6246 #ADD 07850s0y ! 27FEB2015 bensone ! Symptom: The interface is missing response code mappings. ! Problem: During the BNET 15.Q2 mandate, response codes were ! incorrectly removed from the mapping table. ! Fix: The interface was modified to restore the response codes ! that were removed during the mandate. ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1927583 #ADD 13097 PSTM^FRMT^RESP^CDE^TO^SEM "065",! Adjustment Not Allowed ! "57",! Tran not supp/permit "066",! Invalid CCD Advance Incr! "13",! Invalid Amount "067",! Invalid Tran Date ! "05",! Do not Honor "068",! TLF Error ! "96",! System problem "069",! Message Edit Error ! "57",! Tran not supp/permit "070",! No IDF ! "96",! System problem "071",! Invalid Auth Dest ! "92",! Insuff routing info "072",! Card on Nat'l Neg ! "62",! Restricted card "073",! Invalid Service Dest ! "92",! Insuff routing info "074",! Unable to Authorize ! "05",! Do not Honor "075",! Invalid PAN length ! "14",! Invalid Card Number "076",! Low Funds ! "51",! Not sufficient funds "077",! Pre-Auth limit reached ! "61",! Exceeds wdl limits "078",! Duplicate Tran ! "*2",! A - 70, P - 94 "079",! Refund Max reached ! "57",! Tran not supp/permit "080",! Offline Refund Max reach! "57",! Tran not supp/permit "081",! Max Credit/Refund reach ! "57",! Tran not supp/permit "082",! Usage exceeded ! "65",! Exceeds withdraw count "083",! Max Refund Credit reach ! "57",! Tran not supp/permit "084",! Cust-selected Neg reason! "62",! Restricted card "085",! Inquiry not allowed ! "57",! Tran not supp/permit "086",! Over Floor Limit ! "57",! Tran not supp/permit "087",! Max # of refunds reached! "57",! Tran not supp/permit "088",! Place Call ! "70",! Contact Card Issuer "089",! CAF Status - 09 ! "62",! Restricted card "090",! Referral file full ! "96",! System problem "091",! Neg file problem ! "96",! System problem "092",! Advance less than minimu! "13",! Invalid Amount #ADD 13145 PSTM^FRMT^RESP^CDE^TO^SEM "096",! PIN required ! "55",! Invalid PIN! "097",! mod 10 check ! "14",! Invalid card number "099",! bad PBF ! "62",! Restricted card "100",! Referral; unable to proc! "*1",! A - 57, P - 01 "101",! Referral; issue call ! "*1",! A - 57, P - 01 "102",! Referral; call ! "*1",! A - 57, P - 01 "103",! Referral; NEG file prob ! "*1",! A - 57, P - 01 "104",! Referral; CAF file prob ! "*1",! A - 57, P - 01 "105",! Referral; No support ! "*1",! A - 57, P - 01 "106",! Referral; Amt over max ! "*1",! A - 57, P - 01 "107",! Referral; Over daily lim! "*1",! A - 57, P - 01 "108",! Referral; CAPF not found! "*1",! A - 57, P - 01 "109",! Referral; Advance < min ! "*1",! A - 57, P - 01 "110",! Referral; Number times ! "*1",! A - 57, P - 01 "111",! Referral; Delinquent ! "*1",! A - 57, P - 01 "112",! Referral; Over limit ! "*1",! A - 57, P - 01 "113",! Referral; Timeout ! "*1",! A - 57, P - 01 "115",! Referral; PTLF Full ! "*1",! A - 57, P - 01 "120",! UAF File Problem ! "*1",! A - 57, P - 01 "121",! Admin File Problem ! "*1",! A - 57, P - 01 "122",! Admin File Problem ! "*1",! A - 57, P - 01 "130",! ARQC failure referral ! "*1",! A - 57, P - 01 "131",! CVR referral ! "*1",! A - 57, P - 01 "132",! TVR referral ! "*1",! A - 57, P - 01 "133",! Rsn Online Cde referral ! "*1",! A - 57, P - 01 "134",! Fallback Reverral ! "*1",! A - 57, P - 01 "150",! Invalid Service Code ! "*3",! Invalid merchant "200",! Error; account ! "14",! Invalid card number "201",! Error; incorrect PIN ! "55",! PIN incorrect "202",! Error; advance < minimum! "13",! Invalid Amount "203",! Error; need admin card ! "14",! Invalid card number "204",! Error; enter less amt ! "61",! Exceeds wdl limits "205",! Error; invalid adv amt ! "13",! Invalid Amount "206",! Error; CAF not found ! "14",! Invalid card number "207",! Error; invalid tran date! "05",! Do not Honor "208",! Error; invalid exp date ! "05",! Do not Honor "209",! Error; invalid trancode ! "05",! Do not Honor "251",! Purchase w/cash back-nsf! "51",! Not sufficient funds #ENDSCN = SW0J061 !#CMP2.28 03/10/15 BNETLIBS6246 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6246 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6246 * ******************************************************************************** #SCN = SW0J081 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6246 #NEWVERSION = 6247 #ADD 07850t0B ! 10MAR2015 wielerk ! Symptom: The interface has an incorrect case statement used for ! response code mappings. ! Problem: Some external responde code value differ by product. ! To allow for a match on the PSTM.TRAN.RESP^CDE yet be ! able to pass a different value in the SEM dependent on ! product, the external side of the response code table ! contains entries that begin with an asterisk followed ! by a number. A case statement was then used to set the ! ATM external values. Sometime awhile ago, entries in ! the middle were removed causing mismatches and possibly ! programmatic dumps. ! Fix: Modified logic to remove the case statement and use if ! statements to resolve the external values that begin ! with an asterisk. ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #1935361. #REPLACE 13251 /13252 PSTM^FRMT^RESP^CDE^TO^SEM if rcode[0] = "*" then begin #ADD 13255 PSTM^FRMT^RESP^CDE^TO^SEM if rcode = "*1" or rcode = "*3" or rcode = "*4" or rcode = "*8" then begin rcode ':=' "57"; end; if rcode = "*2" then begin rcode ':=' "70"; end; end #DELETE 13256 /13270 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13286 PSTM^FRMT^RESP^CDE^TO^SEM end; #ENDSCN = SW0J081 !#CMP2.28 04/27/15 BNETDDLS6051 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6051 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6051 * ******************************************************************************** #SCN = SW0J119 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6051 #NEWVERSION = 6052 #ADD 00262y0G * 27APR2015 bensone * Symptom: Banknet Release 15.Q2 Phase 2 Functional Enhancements * Problem: None * Fix: Global 125-Visa Gateway Tokenization Enhancements * Add a redefinition of the DE 48 SE 43 structure. * Extend the length of DE 48 SE 78 in the SEM from 5 to * 10 bytes and make the name of structure more generic. * Move DE 102 and DE 103 replacing DE 67 and DE 73. * Global 520-MasterCard Embedded Security Service Platform * Enhancements * Add definition for DE 48 SE 56. * Global 545: Service Provider and Merchant Identification * Enhancements * Add definition for DE 48 SE 37. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN * BA60SRC: BATKNCVS, BATKNID * PS60AFT: RQPTDS, SVPTDTS * PS60DDL: DDLFPTD, DDLGPTD * PS60RTAU: ROUTERS, RTAUG * PS60SPDH: ASPDHS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Run Make. * Replace file: * PS60AFT: SCRNPTD * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0415M, ILB0415R, ILB0415S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0415M. Run the ILF conversion using ILB0415R. * Reference: WO #007740 #DELETE 01157A09/01157A0J SEM #ADD 01157L0A SEM 06 cert redefines ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 merch. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(16). 08 crd-hldr. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(16). 08 user-fld pic x(1). #ADD 01157I00 SEM * Visa Payment Service Indicators * Subfield tag = 78 06 visa-pmnt-srvcs-sub-fld-78. #DELETE 01157I01/01157I03 SEM #ADD 01157I05 SEM 08 spend-qualified-ind pic x. 08 dcc-ind pic x. 08 def-bill-ind pic x. 08 rsrvd pic x(3). #DELETE 01157I06 SEM #ADD 01157w1U SEM * * Additional Merchant Data * Subfield tag = 37 * Subfield 1 contains the Payment Facilitator ID. * Subfield 2 contains the Independent Sales Organization ID. * Subfield 3 contains the Sub-Merchant ID. * 06 adnl-mrch-data-sub-fld-37. 08 tag pic 99. 08 lgth pic 99. 08 pmnt-facilitator-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(11). 08 idpnt-sales-org-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(11). 08 sub-mrch-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). * * Security Services Additional Data for Issuers * Subfield tag = 56 * Subfield 1 contains the security services indicator. * Subfield 2 contains additional data supporting the fraud score. * 06 sec-srvc-iss-sub-fld-56. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 16 times. 10 ss-ind pic x(3). 10 ss-data pic x(3). 04 user-fld pic x(26). #DELETE 01157w1V SEM #DELETE 01355 /01376 SEM #ADD 01411b9U SEM * * account identification 1 * bit map position = 102 * EBCDIC in transmission, variable in length * * lgth: number of bytes in acct-id1.num * num: "FROM" account number * 02 acct-id1. 04 lgth pic 99. 04 num pic x(28). * * account identification 2 * bit map position = 103 * EBCDIC in transmission, variable in length * * lgth: number of bytes in acct-id2.num * num: "TO" account number * 02 acct-id2. 04 lgth pic 99. 04 num pic x(28). #DELETE 01411b9V/01411b9j SEM #ADD 02760w05 SAF-BNET 02 user-fld-aci2 pic x(2). #DELETE 02760H05/02760I01 SAF-BNET #ADD 02760w09 SAF-BNET 02 visa-spend-qualified-ind pic x. #DELETE 02760w0A SAF-BNET #ENDSCN = SW0J119 !#CMP2.28 04/27/15 BNETG 6093 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6093 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6093 * ******************************************************************************** #SCN = SW0J120 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H000260I ! 27APR2015 bensone ! Symptom: Banknet Release 15.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Add merchant type "4784" to define sem^transit^aggr^d. ! Add num^mcc^tbl^g to bnet^glbl^def. ! Add mcc^tbl^g to bnet^array^def. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN ! BA60SRC: BATKNCVS, BATKNID ! PS60AFT: RQPTDS, SVPTDTS ! PS60DDL: DDLFPTD, DDLGPTD ! PS60RTAU: ROUTERS, RTAUG ! PS60SPDH: ASPDHS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! PS60AFT: SCRNPTD ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0415M, ILB0415R, ILB0415S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0415M. Run the ILF conversion using ILB0415R. ! Reference: WO #007740 #ADD 0002620E ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE 0002620F/0002620a #ADD F000260o ! adnl^mrch^data^tkn #ADD 0002620i ! fraud^data^tkn #DELETE 00233700/00233706 #ADD F0023305 x.merch^typ = "4784" or #ADD B0043503 int num^mcc^tbl^g; #ADD 0043530G string mcc^tbl^g[ 0:67 ]; #ADD 01010i00 73, -1, 0, 0, ! Not used ! #DELETE 01010i01 #ADD 01366N52 ? tkn^updt^info, #ADD 01366N5M ! tkn^updt^info, #ENDSCN = SW0J120 !#CMP2.28 04/27/15 BNETLIBS6247 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6247 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6247 * ******************************************************************************** #SCN = SW0J121 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6247 #NEWVERSION = 6248 #ADD 07850u0J ! 27APR2015 bensone ! Symptom: Banknet Release 15.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Global 120-Visa Gateway Enhancements ! Set DE 48 SE 78 in Visa authorization request message. ! Allow DE 103 to be moved to the PSTM. ! Reference the new name of DE 48 SE 78. ! DE 48 SE 86 no longer included in the switch token. ! Add DE 48 SE 78 SF 1 to the switch token. ! Remove DE 48 SE 78 SF 3 from the switch token. ! Global 515-MoneySend Enhancement ! Ensure DE 48 SE 77 is not moved to the Transaction ! Specific Data token in a funding transaction. ! Global 520-MasterCard Embedded Security Service Platform ! Enhancements ! Add new Fraud Data token to include data from ! DE 48 SE 56 and/or DE 48 SE 75. ! Global 545-Service Provider and Merchant Identification ! Enhancements ! Move DE 48 SE 37 subfields 1, 2 and 3 from/to new ! Additional Merchant Data Token. ! Populate DE 48 SE 37 SF 2 from the STF if need be. ! Italy Operations Bulletin No. 1, dated 19 March, 2013 ! Revised Standards for Maestro No-CVM Acceptance at ! Vending Machines in Italy ! Process new LCONF parameter SW-BNET-FAILED-CVM-MCCS. ! Procs added: util^build^failed^cvm^mcc^tbl ! util^failed^cvm^alwd ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN ! BA60SRC: BATKNCVS, BATKNID ! PS60AFT: RQPTDS, SVPTDTS ! PS60DDL: DDLFPTD, DDLGPTD ! PS60RTAU: ROUTERS, RTAUG ! PS60SPDH: ASPDHS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! PS60AFT: SCRNPTD ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0415M, ILB0415R, ILB0415S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0415M. Run the ILF conversion using ILB0415R. ! Reference: WO #007740 #ADD 08758 PSTM^FRMT^0200^TO^XRQST int manual^entry^txn := false; #DELETE 08759 PSTM^FRMT^0200^TO^XRQST #ADD 09062F02 PSTM^FRMT^0200^TO^XRQST set( manual^entry^txn, true ); #DELETE 09062F03 PSTM^FRMT^0200^TO^XRQST #ADD 09233 PSTM^FRMT^0200^TO^XRQST if manual^entry^txn and #DELETE 09234 PSTM^FRMT^0200^TO^XRQST #ADD 09299i07 PSTM^FRMT^0200^TO^XRQST if manual^entry^txn then #DELETE 09305 PSTM^FRMT^0200^TO^XRQST #ADD 09316k0C PSTM^FRMT^0200^TO^XRQST sem.pos^entry^mde = manual^entry and #ADD 09316k1L PSTM^FRMT^0200^TO^XRQST sem.pos^entry^mde = manual^entry and #ADD 09806 PSTM^FRMT^0200^TO^XRQST not manual^entry^txn then #DELETE 09807 PSTM^FRMT^0200^TO^XRQST #ADD 09830X00 PSTM^FRMT^0200^TO^XRQST if manual^entry^txn and #DELETE 09830X01 PSTM^FRMT^0200^TO^XRQST #ADD 10013 PSTM^FRMT^0200^TO^XRQST if manual^entry^txn then #DELETE 10014 PSTM^FRMT^0200^TO^XRQST #ADD 10026s00 PSTM^FRMT^0200^TO^XRQST manual^entry^txn and #DELETE 10026s01 PSTM^FRMT^0200^TO^XRQST #DELETE 13495 /13496 PSTM^FRMT^SEM^ADDL^DATA #ADD 13530 PSTM^FRMT^SEM^ADDL^DATA int .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); int adnl^mrch^data^tkn^fnd := false; #ADD 13532 PSTM^FRMT^SEM^ADDL^DATA int term^id^numeric := true; #ADD 13536k03 PSTM^FRMT^SEM^ADDL^DATA int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); int orig^crncy^60^lgth; int orig^crncy^tkn^fnd := false; int .pos^mrch^tkn( pos^mrch^tkn^def ); int pos^mrch^tkn^lgth; int pos^mrch^tkn^fnd := false; #ADD 13538 PSTM^FRMT^SEM^ADDL^DATA int sub^fld^lgth; #ADD 13540 PSTM^FRMT^SEM^ADDL^DATA string .swi^term^id[ 0:10 ] := [ 11 * [ " " ] ]; #ADD 14491s0R PSTM^FRMT^SEM^ADDL^DATA tkn^lgth ) and mobile^pmnts^tkn.pmnt^typ = "01" then #DELETE 14491s0S PSTM^FRMT^SEM^ADDL^DATA #ADD 14806k1L PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' orig^crncy^60^tkn^id^d; orig^crncy^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^tkn, orig^crncy^60^lgth ); #ADD 14810 PSTM^FRMT^SEM^ADDL^DATA pos^mrch^tkn^fnd := true; #ADD 14828 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g and sem.typ = sem^auth^request^d then begin if orig^crncy^tkn^fnd and orig^crncy^60^tkn.conv^ind = "1" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. dcc^ind, "Y" ); end; if pos^mrch^tkn^fnd and pos^mrch^tkn.deferred^billing^ind = "1" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. def^bill^ind, "D" ); end; if sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78 <> blanks for $len( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78 ) then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78.tag, "78" ); movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78.lgth, "06" ); lgth := lgth + 10; end; end; #ADD 14930 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' adnl^mrch^data^tkn^id^d; adnl^mrch^data^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^tkn, tkn^lgth ); ! ! If the Additional Merchant Data token (FA) is found, ! then use it to populate DE 48 SE 37 ! sub^fld^lgth := 0; if adnl^mrch^data^tkn^fnd and ( adnl^mrch^data^tkn.pmnt^facilitator^id <> [ $len( adnl^mrch^data^tkn. pmnt^facilitator^id ) * [ " " ] ] and adnl^mrch^data^tkn.pmnt^facilitator^id <> [ $len( adnl^mrch^data^tkn. pmnt^facilitator^id ) * [ "0" ] ] and adnl^mrch^data^tkn.sub^mrch^id <> [ $len( adnl^mrch^data^tkn. sub^mrch^id ) * [ " " ] ] and adnl^mrch^data^tkn.sub^mrch^id <> [ $len( adnl^mrch^data^tkn. sub^mrch^id ) * [ "0" ] ] and ( pstm.term^owner^name.byte[ 3 ] = "*" or pstm.term^owner^name.byte[ 7 ] = "*" or pstm.term^owner^name.byte[ 12 ] = "*" ) ) then begin movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. tag, "37" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag, "01" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.lgth, "11" ); move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data, adnl^mrch^data^tkn.pmnt^facilitator^id ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag, "03" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.lgth, "15" ); move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data, adnl^mrch^data^tkn.sub^mrch^id ); move( sem.crd^acpt.reg^e^loc, pstm.term^owner^name ); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id ) + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id ); end; ! of if adnl^mrch^data^tkn^fnd and if adnl^mrch^data^tkn^fnd and adnl^mrch^data^tkn.idpnt^sales^org^id <> [ $len( adnl^mrch^data^tkn. idpnt^sales^org^id ) * [ " " ] ] and adnl^mrch^data^tkn.idpnt^sales^org^id <> [ $len( adnl^mrch^data^tkn. idpnt^sales^org^id ) * [ "0" ] ] then begin movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. tag, "37" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag, "02" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.lgth, "11" ); move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data, adnl^mrch^data^tkn.idpnt^sales^org^id ); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id ); end else begin call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) and stf.swi^term.id <> [ $len( stf.swi^term.id ) * [" "] ] then begin i := -1; while ( i := i + 1 ) < 11 and stf.swi^term.id.byte[ i ] <> " " and term^id^numeric do begin if not $numeric( stf.swi^term.id. byte[ i ] ) then begin term^id^numeric := false; end; end; if i > 0 and term^id^numeric then begin swi^term^id ':=' stf.swi^term.id for i; movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37. tag, "37" ); movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag, "02" ); movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.lgth, "11" ); call hiswutil^justify^field( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id. tag^data, $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id. tag^data ), swi^term^id, $occurs( swi^term^id ), right^justify^l ); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id ); if pstm.crd^accpt^id^num = $len( pstm.crd^accpt^id^num ) * [ " " ] or pstm.crd^accpt^id^num = $len( pstm.crd^accpt^id^num ) * [ "0" ] then begin movl( pstm.crd^accpt^id^num, sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id. tag^data, $len( pstm.crd^accpt^id^num ) ); end; ! of if pstm.crd^accpt^id^num = end; ! of if i > 0 end; ! of if util^stf^get( stf ) and end; ! of else if adnl^mrch^data^tkn^fnd and if sem.addl^data.info.adnl^mrch^data^sub^fld^37. tag = "37" then begin ! ! Set SE 37 length and also adjust DE 48 length ! call integer^ascii^( sem.addl^data.info. adnl^mrch^data^sub^fld^37. lgth, sub^fld^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + 4 + sub^fld^lgth; call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! of if DE 48 SE 37 tag = "37" #ADD 18550 SEM^FRMT^XRESP^TO^PSTM^0210 end else if acct^id2^bit^d then begin mov^( pstm.tran.acct, blanks ); call ascii^integer^( sem.acct^id2.lgth, lgth ); movl ( pstm.tran.acct, sem.acct^id2.num, $min( lgth, $len( pstm.tran.acct ) ) ); #ADD 20358M07 SEM^FRMT^XRQST^TO^PSTM^0200 wlform( tkn^no^room, "No space in (P)STM for token ID '\\'" ','" PAN : \?, Seq Num : \\\\\\\\\\\\ " ) wlform( tkn^err^add, "Unable to add token ID '\\' to (P)STM," ','" PAN : \?, Seq Num : \\\\\\\\\\\\, Error : # ") wlform( tkn^err^updt, "Unable to update token ID '\\' in (P)STM, " ','"PAN : \?, Seq Num : \\\\\\\\\\\\, Error : # ") #ADD 20359 SEM^FRMT^XRQST^TO^PSTM^0200 struct .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); #ADD 20384 SEM^FRMT^XRQST^TO^PSTM^0200 struct .fraud^data^tkn( fraud^data^tkn^def ); #ADD 20430 SEM^FRMT^XRQST^TO^PSTM^0200 int .adnl^mrch^data^get^tkn( adnl^mrch^data^tkn^def ); #ADD 20433 SEM^FRMT^XRQST^TO^PSTM^0200 int evt^pan^lgth := 0; int fnd^fraud^data^tkn := false; #ADD 20444 SEM^FRMT^XRQST^TO^PSTM^0200 int sec^srvcs^info^lgth := 0; #ADD 20470 SEM^FRMT^XRQST^TO^PSTM^0200 string .pan[ 0:18 ] := [ 19 * [" "] ]; #ADD 20602 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); #ADD 20801e04 SEM^FRMT^XRQST^TO^PSTM^0200 end; if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag = "77" and sem.proc^cde = sem^pmnt^txn^d then begin #ADD 21397M1d SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag = "37" then begin tkn^id ':=' adnl^mrch^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^get^tkn, tkn^lgth ) then begin ! ! Update Additional Merchant Data Token ! move( adnl^mrch^data^get^tkn.pmnt^facilitator^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data ); move( adnl^mrch^data^get^tkn.idpnt^sales^org^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data ); move( adnl^mrch^data^get^tkn.sub^mrch^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data ); end else begin ! ! Add Additional Merchant Data Token ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, adnl^mrch^data^tkn ); move( adnl^mrch^data^tkn.pmnt^facilitator^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data ); move( adnl^mrch^data^tkn.idpnt^sales^org^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data ); move( adnl^mrch^data^tkn.sub^mrch^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data ); tkn^add^lgth := $len( adnl^mrch^data^tkn ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^mrch^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1740, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add error encountered log a ! message. ! call log^message^( 1741, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1741 ); end; ! of if tkn^result end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag = "02" then begin move( pstm.crd^accpt^id^num, sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data ); end; end; ! of adnl^mrch^data^sub^fld^37.tag = "37" if sem.addl^data.info. sec^srvc^iss^sub^fld^56.tag = "56" or sem.addl^data.info. fraud^scoring^data^sub^fld^75.tag = "75" then begin tkn^id ':=' fraud^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, fraud^data^tkn ); movd( fraud^data^tkn.frmt^cde, "02" ); tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ); if sem.addl^data.info.fraud^scoring^data^sub^fld^75. tag = "75" then begin ! ! Move the fraud scoring data into the switch token ! move( fraud^data^tkn.bnet.fraud^data.score, sem.addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.tag^data ); move( fraud^data^tkn.bnet.fraud^data.rsn^cde, sem.addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.tag^data ); move( fraud^data^tkn.bnet.fraud^data.rule^adj^score, sem.addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.tag^data ); move( fraud^data^tkn.bnet.fraud^data.rule^rsn^cde^1, sem.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag^data ); move( fraud^data^tkn.bnet.fraud^data.rule^rsn^cde^2, sem.addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag^data ); end; ! of subfield tag = "75" if sem.addl^data.info.sec^srvc^iss^sub^fld^56. tag = "56" then begin ! ! Determine the total length of data in 1 occurrence ! of DE 48 SE 56 ! sec^srvcs^info^lgth := $len( sem.addl^data.info. sec^srvc^iss^sub^fld^56.tag^data ); ! ! Determine the total length of data in DE 48 SE 56 ! call ascii^integer^( sem.addl^data.info. sec^srvc^iss^sub^fld^56.lgth, temp^lgth ); ! ! Determine the total number of services sent in DE 48 ! SE 56 ! if sec^srvcs^info^lgth > 0 then begin num^srvcs := temp^lgth / sec^srvcs^info^lgth; end else begin num^srvcs := 0; end; call integer^ascii^( fraud^data^tkn.bnet.sec^srvc.num^srvcs, num^srvcs ); movl( fraud^data^tkn.bnet.sec^srvc.info, sem.addl^data.info.sec^srvc^iss^sub^fld^56. tag^data, temp^lgth ); tkn^add^lgth := tkn^add^lgth + $len( fraud^data^tkn.bnet. sec^srvc.num^srvcs ) + ( sec^srvcs^info^lgth * num^srvcs ); end; ! ! Add the Fraud Data token to the internal message ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the Fraud Data token ! if tkn^result = tkn^exist^l then begin fnd^fraud^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1742, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^fraud^data^tkn then begin call log^message^( 1743, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1743 ); end else begin call log^message^( 1744, ! routing code !, @tkn^err^updt, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1744 ); end; end; ! of if tkn^result end; ! of if ( DE 48 SE 56 or DE 48 SE 75 ) #ADD 21468M03 SEM^FRMT^XRQST^TO^PSTM^0200 util^failed^cvm^alwd( sem.merch^typ ) then #DELETE 21468M04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22320s0I SEM^FRMT^XRQST^TO^PSTM^0200 movd( mobile^pmnts^tkn.pmnt^typ, "01" ); #ADD 25033e02 SUB^VALID^CARD^TYPE ?section util^build^failed^cvm^mcc^tbl ?page "util^build^failed^cvm^mcc^tbl" !##################################################################### !# # !# util^build^failed^cvm^mcc^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# SW-BNET-FAILED-CVM-MCCS into the global table mcc^tbl^g. # !# The table contains the MCC codes returned by Banknet # !# for which failed CVM is allowed. # !# # !# INPUT PARAMETERS: # !# mcc^list - Pointer to the LCONF parameter # !# SW-BNET-FAILED-CVM-MCCS text. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^build^failed^cvm^mcc^tbl( mcc^list, list^lgth ); string .mcc^list; int list^lgth; begin wlform( bad^mcc^cde, "Invalid MCC Code '\?' detected in param " ',' "SW-BNET-FAILED-CVM-MCCS. Value will be ignored" ) wlform( inv^param, "SW-BNET-FAILED-CVM-MCCS param contains" ',' " invalid data. Default values will be used." ) int i; int j; string mcc^swap^area[ 0:3 ]; string .in^ptr := @mcc^list; string .tbl^ptr := @bnet^array^g.mcc^tbl^g; set( bnet^g.num^mcc^tbl^g, 0 ); j := ( list^lgth ) / 4; i := j * 4; if i = list^lgth then begin ! ! list^lgth a multiple of 4 ! for i := 0 to j - 1 do begin if all^numeric( mcc^list[ 4 * i ], 4 ) then begin tbl^ptr ':=' mcc^list[ 4 * i ] for 4 -> @tbl^ptr; increment^d( bnet^g.num^mcc^tbl^g ); end else begin call log^message^( 4129, ! routing code !, @bad^mcc^cde, net.myname, evt_msg_severity_warn_l, @mcc^list[ 4 * i ], 4 ); end; end; ! of for end; if bnet^g.num^mcc^tbl^g = 0 then begin bnet^g.num^mcc^tbl^g:= 5; bnet^array^g.mcc^tbl^g ':=' [ "41114112413147847523" ]; call log^message^( 4132, ! routing code !, @inv^param, net.myname, evt_msg_severity_warn_l ); end; sort^compare^lgth^g := 4; call quicksort( bnet^array^g.mcc^tbl^g, bnet^g.num^mcc^tbl^g, sort^compare^lgth^g, mcc^swap^area, util^compare^var ); end; ! of proc util^build^failed^cvm^mcc^tbl #ADD 26021 UTIL^COLLAPSE^SEM ! ! Security Services Additional Data for Issuers ! if hdr.addl^data.info. sec^srvc^iss^sub^fld^56.tag = "56" then begin call ascii^integer( hdr.addl^data.info. sec^srvc^iss^sub^fld^56.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. sec^srvc^iss^sub^fld^56.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if tag = "56" #ADD 26222 UTIL^COLLAPSE^SEM visa^pmnt^srvcs^sub^fld^78. #DELETE 26223 UTIL^COLLAPSE^SEM #ADD 26226 UTIL^COLLAPSE^SEM visa^pmnt^srvcs^sub^fld^78.lgth, #DELETE 26227 UTIL^COLLAPSE^SEM #ADD 26230 UTIL^COLLAPSE^SEM visa^pmnt^srvcs^sub^fld^78.tag, #DELETE 26231 UTIL^COLLAPSE^SEM #ADD 26669 UTIL^COLLAPSE^SEM ! ! Additional Merchant Data. ! if hdr.addl^data.info.adnl^mrch^data^sub^fld^37. tag = "37" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - Payment Facilitator ID ! if hdr.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag = "01" then begin call ascii^integer( hdr.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! Move Subfield 2 - Independent Sales ! Organization ID ! if hdr.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag = "02" then begin call ascii^integer( hdr.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! Move Subfield 3 - Sub-Merchant ID ! if hdr.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.tag = "03" then begin call ascii^integer( hdr.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! end; #ADD 28022X0W UTIL^EXPAND^SEM if ptr[ length ] = "56" then begin movl( sem^ptr.addl^data.info. sec^srvc^iss^sub^fld^56.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end ! of if ptr[ length ] = "56" else #ADD 28255 UTIL^EXPAND^SEM visa^pmnt^srvcs^sub^fld^78. #DELETE 28256 UTIL^EXPAND^SEM #ADD 28515 UTIL^EXPAND^SEM else if ptr[ length ] = "37" then begin ! ! Additional Merchant Data ! movl( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; ! ! Move Subfield 1 - Payment Facilitator ID ! if sub^ptr = "01" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! Move Subfield 2 - Independent Sales ! Organization ID ! if sub^ptr = "02" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; ! ! Move Subfield 3 - Sub-Merchant ID ! if sub^ptr = "03" then begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.tag, sub^ptr, sub^lgth + 4 ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; end; length := length + tag^length + 4; end #ADD 28906 UTIL^EXPAND^SETL ?section util^failed^cvm^alwd ?page "util^failed^cvm^alwd" !##################################################################### !# # !# util^failed^cvm^alwd # !# # !# This procedure searchs the global table mcc^tbl^g for a # !# matching MCC code. The table is built from entries # !# in the LCONF parameter SW-BNET-FAILED-CVM-MCCS. # !# # !# INPUT PARAMETERS : # !# resp^cde - pointer to the response code to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - if the response code is found in the table. # !# false - if not found. # !# # !##################################################################### int proc util^failed^cvm^alwd( mcc ); string .mcc; begin int index; index := ut^binary^search( bnet^array^g.mcc^tbl^g , $len( sem^def.merch^typ ), bnet^g.num^mcc^tbl^g, 0, $len( sem^def.merch^typ ), mcc ); ! ! ut^binary^search returns -1 for not found which is incremented ! by 1 in order to return false. ! return increment^d( index ); end; ! of proc util^failed^cvm^alwd #DELETE 36474 /36481 UTIL^SWI^TKN^INIT #ADD 36487 UTIL^SWI^TKN^INIT visa^pmnt^srvcs^sub^fld^78.tag = "78" then begin movl( bnet^tkn^buf.visa^spend^qualified^ind, sem.addl^data.info. visa^pmnt^srvcs^sub^fld^78.spend^qualified^ind, $len( bnet^tkn^buf.visa^spend^qualified^ind ) ); #DELETE 36488 /36496 UTIL^SWI^TKN^INIT #DELETE 36862 /36867 UTIL^SWI^TKN^UPDT #DELETE 36882 /36887 UTIL^SWI^TKN^UPDT #ADD 37095k0N UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.visa^spend^qualified^ind <> blanks for $len( bnet^tkn^buf.visa^spend^qualified^ind ) ) then begin move( bnet^tkn.visa^spend^qualified^ind, bnet^tkn^buf.visa^spend^qualified^ind ); end; #ENDSCN = SW0J121 !#CMP2.28 04/30/15 BNETS 6127 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6127 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6127 * ******************************************************************************** #SCN = SW0J144 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6127 #NEWVERSION = 6128 #ADD 03821a0N ! 27APR2015 bensone ! Symptom: Banknet Release 15.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Italy Operations Bulletin No. 1, dated 19 March, 2013 ! Revised Standards for Maestro No-CVM Acceptance at ! Vending Machines in Italy ! Process new LCONF parameter SW-BNET-FAILED-CVM-MCCS. ! Procs modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN ! BA60SRC: BATKNCVS, BATKNID ! PS60AFT: RQPTDS, SVPTDTS ! PS60DDL: DDLFPTD, DDLGPTD ! PS60RTAU: ROUTERS, RTAUG ! PS60SPDH: ASPDHS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! PS60AFT: SCRNPTD ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0415M, ILB0415R, ILB0415S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0415M. Run the ILF conversion using ILB0415R. ! Reference: WO #007740 #ADD 10428V04 INIT^BNET^G bnet^g.num^mcc^tbl^g:= 0; #ADD 10428Y03 INIT^BNET^G bnet^g.num^mcc^tbl^g:= 5; bnet^array^g.mcc^tbl^g ':=' [ 68 * [ " " ] ]; bnet^array^g.mcc^tbl^g ':=' [ "41114112413147847523" ]; #ADD 12676Y02 INIT^PARAMPROC "P", "SW-BNET-FAILED-CVM-MCCS ", #ADD 13500Y0m INIT^PARAMPROC ! ! SW-BNET-FAILED-CVM-MCCS ! if not ferror then begin call util^build^failed^cvm^mcc^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; #ENDSCN = SW0J144 !#CMP2.28 05/07/15 ILB0415S6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0415S ILB0415S 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0415S ILB0415S 6000 * ******************************************************************************** #SCN = SW0J154 , FILEID = ILB0415S #VOLUME = $ROOK.SW60BNET #FILE = ILB0415S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00043 ! 07MAY2015 bensone ! Symptom: DE 48 SE 40 buffer not being moved by conversion. ! Problem: If DE 48 SE 43 tag is empty, we should move the DE 48 ! SE 40 buffer into this location. The move define was ! coded with source and destination in the wrong order. ! Fix: Change the parameters in the move to correct order. ! Proc modified: convert ! Dependency: Apply fix to ILB0415S. Make the ILF conversion program ! using ILM0215M. Run the ILF conversion using ILB0415R. ! Reference: Case #1994999 #ADD 00549 CONVERT move( de48^se40^buf, dest[ 0 ], #DELETE 00550 /00551 CONVERT #ENDSCN = SW0J154 !#CMP2.28 06/03/15 BNETLIBS6248 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6248 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6248 * ******************************************************************************** #SCN = SW0J163 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6248 #NEWVERSION = 6249 #ADD 07850v0t ! 03JUN2015 wielerk ! Symptom: The interface is setting DE-48 ( addl data ) length ! incorrectly after recent enhancements. ! Problem: When adding data for DE-48.SE-37, the overall length ! of DE-48 is formatted to a local variable, increased ! and reset into DE-48 length. This is incorrect, the ! local variable is the running accumulation of byte ! length and only set into overall length at the end ! of the proc. ! Fix: The interface was modified to remove code that causes a ! reset of DE-48 length. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2010190. #REPLACE 14930v38 PSTM^FRMT^SEM^ADDL^DATA #REPLACE 14930v3C PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0J163 !#CMP2.28 06/18/15 BNETLIBS6249 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6249 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6249 * ******************************************************************************** #SCN = SW0J171 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6249 #NEWVERSION = 6250 #ADD 07850w0F ! 18JUN2015 saderc ! Symptom: The interface is setting the lvl-of-sec.ucaf-ind field ! in DE 48 SE 42 (Electronic Commerce Secrity Level ! Indicator and UCAF Collection Indicator) to "0" (UCAF ! data collection is not supported by the merchant or a ! SecureCode merchant has chosen not to undertake ! SecureCode on this transaction) in the absence of UCAF ! data i.e. SSL only. ! Problem: The interface is in compliance with MasterCard's ! Customer Interface Specification. However, Product ! Management has decided to modify the interface to set ! the lvl-of-sec.ucaf-ind field in DE 48 SE 42 to "1" ! (UCAF data collection is supported by the merchant, and ! UCAF data must be present (DE 48, subelement 43 must be ! present and contain an attempt AAV for MasterCard ! SecureCode)). ! Fix: The interface was modified to set lvl-of-sec.ucaf-ind in ! DE 48 SE 42 to "1" if no UCAF data present. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2027157 #REPLACE 14428s01 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, "1" ); #REPLACE 14488s01 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, "1" ); #ENDSCN = SW0J171 !#CMP2.28 06/25/15 BNETG 6094 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6094 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6094 * ******************************************************************************** #SCN = SW0J179 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD I000260P ! 25JUN2015 bensone ! Symptom: Banknet Issuer ATM Contactless Magnetic Stripe ! Transaction Support. ! Problem: None. ! Fix: Modify define sem^atm^allwd^entry^mde^d. ! Source in cntctlss^txn^data^tkn definition. ! Dependency: Apply fixes to: ! AT60AUTH: AUTHD, AUTHG, AUTHLIBS, AUTHM, AUTHS ! AT60SRC: ATMFM, ATMMM ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN ! BA60MAKE: CUSTMACS ! BA60SRC: ATTKNCVS, ATTKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETG ! New files: ! AT60QATH: ATQATHFM, ATQATHMM, AUTHDCVG, AUTHDCVM, ! AUTHDCVS ! Replace files: ! BA60LOGM: ATAUTH ! BA60MAKE: FLGSDOC ! SW60BNET: BNETMNWD, BNETLOGM, BNETUPDT ! Reference: WO #007761 #ADD 0002620E ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? cntctlss^txn^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE I000260Q/I000260Q OFFSET 35 #ADD B000260i ! cntctlss^txn^data^tkn #ADD G0023303 x.pos^entry^mde = pan^auto^cntctlss^mag^stripe or x.pos^entry^mde = paypass^mapped^pan^d or #ENDSCN = SW0J179 !#CMP2.28 06/30/15 BNETLIBS6250 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6250 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6250 * ******************************************************************************** #SCN = SW0J185 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6250 #NEWVERSION = 6251 #ADD 07850x0M ! 30JUN2015 wielerk ! Symptom: Mastercard rejects 0400 sent by Base24 with a 0620. ! Problem: MasterCard can't answer why they reject the 0400, but ! we think it's because DE-48.SE-43 is sent with a zero ! length. ! Fix: The interface was modified to not send DE-48.SE-43 with ! a zero length. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2022845. #REPLACE 14428j01 PSTM^FRMT^SEM^ADDL^DATA authn^data^tkn^lgth ) then #DELETE 14428j02 PSTM^FRMT^SEM^ADDL^DATA #ADD 14428q00 PSTM^FRMT^SEM^ADDL^DATA if authn^data^tkn^lgth > 2 and ( authn^data^tkn.authn^ind^data <> " " and authn^data^tkn.authn^ind^data <> "0" ) then begin ! ! The edit above is checking the first ! byte of authn^ind^data because to ! compare against blanks isn't sufficient ! as the length could exceed 100. ! The new standard method of editing for ! blanks requires using $len, which only ! works if the entire token is passed and ! that can't be guaranteed. ! If the first byte is <> 0 or " ", there ! is data to parse below. ! #DELETE 14428q01/14428j06 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0J185 !#CMP2.28 07/23/15 BNETS 6128 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6128 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6128 * ******************************************************************************** #SCN = SW0J198 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6128 #NEWVERSION = 6129 #ADD 03821b0S ! 23JUL2015 wielerk ! Symptom: Interface can drop a 0120 AFD completion advice if it ! arrives after a 0120 STIP AFD advice. ! Problem: If an issuer is in Stand-In at MasterCard, there is no ! way to order the 0120 AFD messages. The 0120 STIP AFD ! advice can be marked as a duplicate and logged, but ! the 0120 AFD completion advice needs to generate a ! PSTM 0220 and be delivered to Base24. ! Fix: Added logic to the duplicate edit to cause the STIP ! AFD advice to be marked as a duplicate. ! Proc modified: sem^advice^pos ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #2022314. #REPLACE 18588 /18588 OFFSET 0 SEM^ADVICE^POS if pos^preauth^comp^d( ilf.pos ) and ( ( sem.advice^cde.reason^cde = ilf.sem.rvsl^cde for $len( sem.advice^cde.reason^cde ) ) or ( ilf.sem.rvsl^cde = "190" or ilf.sem.rvsl^cde = "191" ) ) then #ENDSCN = SW0J198 !#CMP2.28 08/21/15 BNETLIBS6251 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6251 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6251 * ******************************************************************************** #SCN = SW0J241 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6251 #NEWVERSION = 6252 #ADD 07850y0B ! 21AUG2015 wielerk ! Symptom: Interface can pass incorrect PSTM.TRAN.AMT^2 when ! formatting a reversal. ! Problem: When determining which amount field in DE-95 ( repl ! amt ) should be placed in PSTM.TRAN.AMT^2 the logic ! incorrectly uses DE-51 ( iss crncy cde ) when DE-50 ! ( setl crncy cde ) should be used. ! Fix: The interface was modified to use DE-50 when ! determining to use DE-95 replacement settlement amount. ! Proc modified: sem^frmt^amt^to^pstm^amt ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2058015. #REPLACE 16605 SEM^FRMT^AMT^TO^PSTM^AMT if sem.setl^crncy^cde = pct.crncy.in^cde for #ENDSCN = SW0J241 !#CMP2.28 08/26/15 BNETDDLS6052 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6052 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6052 * ******************************************************************************** #SCN = SW0J252 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6052 #NEWVERSION = 6053 #ADD 00262z0X * 25AUG2015 meyersc * Symptom: Banknet Release 15.Q4 Functional Enhancements * Problem: None. * Fix: Global 554-New Cardholder Authentication Indicator * Added field for DE 48 SE 17. * Global 581-Introduction of MoneySend Specific Data * Added field for DE 108. * Global 590-MasterCard Digital Enablement Service * Transaction Details Service Enhancement * Added field for DE 48 SE 30. * Global 593-MasterCard Card on File Tokenization * Specifications Enhancement * Added redefine for DE 48 SE 51. * LAC 541-MasterCard Brazil BNDES Card Enhancements * Added redefine for MasterCard Brazilian Development * Bank (BNDES) card transactions (DE 112 SE 012). * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Run Make. * Replace BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0815M, ILB0815R, ILB0815S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0815M. Run the ILF conversion using ILB0815R. * Reference: WO #008019 #ADD 01157R0Z SEM 06 on-behalf-svc-sub-fld-51 redefines on-behalf-svc-sub-fld-71. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 svc pic x(2). 10 rslt-1 pic x(1). 10 rslt-2 pic x. #ADD 01157z17 SEM * * Authentication Indicator * Subfield tag = 17 * Contains the Authentication Indicator * 06 authn-ind-sub-fld-17. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. * * Token Transaction Id * Subfield tag = 30 * Contains the Token Transaction Id * 06 tkn-txn-id-sub-fld-30. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(44). #ADD 01411z0Q SEM * * MoneySend Reference Data * bit map position = 108 * EBCDIC in transmission, variable in length * Used by acquirers to provide the issuer with Sender, Receiver, * and Transaction level data in MoneySend transactions * 02 moneysend-ref-data. 04 lgth pic x(3). 04 info pic x(500). #REPLACE 01411b9s SEM 04 info pic x(233). #REPLACE 01411v04 SEM 06 user-fld-aci pic x(188). #REPLACE 01411v0L SEM 06 user-fld-aci pic x(168). #ADD 01411v0M SEM 04 bndes redefines info. 06 sub-fld-12. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 fncl-typ pic x(20). 10 buyer-id-typ pic x(1). 10 buyer-tax-id pic x(14). 10 user-fld-bndes1 pic x(75). 10 mrch-tax-id pic x(20). 10 user-fld-bndes2 pic x(40). 06 user-fld-aci pic x(57). #ADD 02760z00 SAF-BNET 02 authn-ind pic x(1). 02 user-fld-aci2 pic x(1). #DELETE 02760z01 SAF-BNET #ENDSCN = SW0J252 !#CMP2.28 08/26/15 BNETG 6095 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6095 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6095 * ******************************************************************************** #SCN = SW0J253 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J000260O ! 25AUG2015 meyersc ! Symptom: Banknet Release 15.Q4 Functional Enhancements ! Problem: None. ! Fix: Added define moneysend^ref^data^bit^d. ! Added entry for DE 108 to sem^bit^map^tbl^g. ! Added define to identify an installment transaction ! from Brazil sem^bndes^instl^txn^d. ! Added literals used for Subelement/TLV field ! processing. ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0815M, ILB0815R, ILB0815S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0815M. Run the ILF conversion using ILB0815R. ! Reference: WO #008019 #ADD 0002620E ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? cntctlss^txn^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? iss^tknztn^data^tkn ? language^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^addl^data^tkn ? p2p^rcv^data^tkn ? p2p^sender^data^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE J000260P/J0002613 #ADD 0002620k ! iss^tknztn^data^tkn ! language^tkn #ADD F000260s ! p2p^addl^data^tkn ! p2p^rcv^data^tkn ! p2p^sender^data^tkn #ADD 00233)05 define sem^bndes^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "BNDES1" ) )#; #ADD 00338 ! ! Literals used for Subelement/TLV field processing ! literal subelement^id^lgth^l = 2; literal subelement^lgth^fld^lgth^l = 3; literal tag^id^lgth^l = 2; literal tag^lgth^fld^lgth^l = 2; #ADD 00612 moneysend^ref^data^bit^d = sbit^map[2].<11> #, !bit 108 ! #REPLACE 01045 108, 3, sem^field( moneysend^ref^data ), #ENDSCN = SW0J253 !#CMP2.28 08/26/15 BNETLIBS6252 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6252 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6252 * ******************************************************************************** #SCN = SW0J254 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6252 #NEWVERSION = 6253 #ADD 07850z0D ! 25AUG2015 meyersc ! Symptom: Banknet Release 15.Q4 Functional Enhancements ! Problem: None. ! Fix: Global 508-Chip On-behalf Services Enhancements ! Added support for new values "K", "X" and "Z" in ! DE 48 SE 71. ! Global 554-New Cardholder Authentication Indicator ! Added support for DE48 SE 17. ! Global 581-Introduction of MoneySend Specific Data ! Added support for 4 new tokens for DE 108: ! P2P Sender Data Token (Token ID = "SI") ! P2P Receiver Data Token (Token ID = "SJ") ! P2P Additional Data Token (Token ID = "SK") ! Language Token (Token ID = "SL") ! Global 590-MasterCard Digital Enablement Service ! Transaction Details Service Enhancement ! Added support for DE 48 SE 30. Add support for Issuer ! Tokenization Data Token (Token ID = "SH"). ! Global 591-Digital Secure Remote Payment Enhancements - ! Reminder ! Added support for new value "4" in DE 48 SE 42 ! subfield 1 position 2 and new value "7" in DE 48 SE 42 ! subfield 1 position 3. ! Global 593-MasterCard Card on File Tokenization ! Specifications Enhancement ! Added support for DE 48 SE 51. The field currently ! used for DE 48 SE 71 will also be used to hold DE 48 ! SE 51. ! LAC 541-MasterCard Brazil BNDES Card Enhancements ! Added redefine for in the Installment Country Data ! token (Token ID = "F8") for the installment data in ! DE112 SE 012. ! Enhanced Processing for Tokenized Transactions ! Added support for DE 48 SE 33 subfield 1 to identify ! a tokenized transaction. ! Proc modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^instl^pmnt^to^pstm ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xack ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! New proc: util^add^moneysend^tkns ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0815M, ILB0815R, ILB0815S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0815M. Run the ILF conversion using ILB0815R. ! Reference: WO #008019 #ADD 09707M03 PSTM^FRMT^0200^TO^XRQST not pos^preauth^comp^d( pstm ) and #ADD 10194s02 PSTM^FRMT^0200^TO^XRQST ( hgm^instl^cntry^cde^d( sem ) or sem.ntl^pos^data.cntry^cde = "076" ) and #DELETE 10194s03 PSTM^FRMT^0200^TO^XRQST #ADD 11361 PSTM^FRMT^0220^TO^XADV if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "8" then begin if sem^approved^d( sem ) and emv^data^bit^d then begin movd ( sem.advice^cde.reason^cde, "192" ); end else begin return resp^tran^bad^pos^l; end; end; #ADD 11549s02 PSTM^FRMT^0420^TO^ACQ^XRVSL ( hgm^instl^cntry^cde^d( sem ) or sem.ntl^pos^data.cntry^cde = "076" ) and #DELETE 11549s03 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 12804X02 PSTM^FRMT^INSTL^PMNT^TO^SEM int found^instl^cntry^data^tkn := false; #ADD 12814 PSTM^FRMT^INSTL^PMNT^TO^SEM if sem.ntl^pos^data.cntry^cde = "076" then begin tkn^id ':=' pos^data1^tkn^id^d; found^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, lgth ); tkn^id ':=' instl^cntry^data^tkn^id^d; found^instl^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^cntry^data^tkn, lgth ); if found^pos^data1^tkn and found^instl^cntry^data^tkn and pos^data1^tkn.pmnt^ind = "I" and instl^cntry^data^tkn.cntry^cde = "BR" then begin found^instl^data := true; end else begin return false; end; if instl^cntry^data^tkn.brazil.fncl^typ = "1" then begin movd( sem.adnl^data^natl.bndes.sub^fld^12.tag^data. fncl^typ, "CBN" ); end else begin movd( sem.adnl^data^natl.bndes.sub^fld^12.tag^data. fncl^typ, "CBN" ); end; move( sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^id^typ, instl^cntry^data^tkn.brazil.buyer^id^typ ); move( sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^tax^id, instl^cntry^data^tkn.brazil.buyer^tax^id ); move( sem.adnl^data^natl.bndes.sub^fld^12.tag^data. mrch^tax^id, instl^cntry^data^tkn.brazil.mrch^tax^id ); movd( sem.adnl^data^natl.bndes.sub^fld^12.tag, "012" ); movd( sem.adnl^data^natl.bndes.sub^fld^12.lgth, "227" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag^data, "BNDES1" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); return found^instl^data; end; #ADD 14368 PSTM^FRMT^SEM^ADDL^DATA e^com^addl^data^tkn.crdhldr^authn^ind = "2" or e^com^addl^data^tkn.crdhldr^authn^ind = "4" ) then #DELETE 14369 PSTM^FRMT^SEM^ADDL^DATA #ADD 14413 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "7" then begin ! ! Partial shipment or recurring transaction ! movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth, "4" ); end else #ADD 14422k01 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.authn^coll^ind <> "7" and #ADD 14428j18 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> "1" then begin movd( sem.addl^data.info. ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "0" ); end else #ADD 14485 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> "1" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "0" ); end else #ADD 17092X1C SEM^FRMT^INSTL^PMNT^TO^PSTM if sem^bndes^instl^txn^d( sem ) then begin movd( pos^data1^tkn.pmnt^ind, "I" ); movd( pos^data1^tkn.instl^plan^typ, "20" ); movd( pos^data1^tkn.num^instl, "00" ); movd( pos^data1^tkn.instl^gratuity^prd, "00" ); movd( pos^data1^tkn.num^mm^gratuity, "0" ); tkn^id ':=' instl^cntry^data^tkn^id^d; tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @instl^cntry^get^tkn, lgth, ! tkn^dspy^frmt^flg !, pos^userdata ); if tkn^result = compl^no^err^l then begin if sem.ntl^pos^data.cntry^cde = "076" then begin if sem.adnl^data^natl.bndes.sub^fld^12.tag^data. fncl^typ = "CBN" then begin movd( instl^cntry^get^tkn.brazil.fncl^typ, "1" ); end else begin movd( instl^cntry^get^tkn.brazil.fncl^typ, "0" ); end; move( instl^cntry^get^tkn.brazil.buyer^id^typ, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^id^typ ); move( instl^cntry^get^tkn.brazil.buyer^tax^id, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^tax^id ); move( instl^cntry^get^tkn.brazil.mrch^tax^id, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. mrch^tax^id ); movd( instl^cntry^get^tkn.cntry^cde, "BR" ); end else begin return false; end; end else if tkn^result = tkn^does^not^exist^l then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^cntry^data^tkn ); if sem.adnl^data^natl.bndes.sub^fld^12.tag^data.fncl^typ = "CBN" then begin movd( instl^cntry^data^tkn.brazil.fncl^typ, "1" ); end else begin movd( instl^cntry^data^tkn.brazil.fncl^typ, "0" ); end; move( instl^cntry^data^tkn.brazil.buyer^id^typ, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^id^typ ); move( instl^cntry^data^tkn.brazil.buyer^tax^id, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. buyer^tax^id ); move( instl^cntry^data^tkn.brazil.mrch^tax^id, sem.adnl^data^natl.bndes.sub^fld^12.tag^data. mrch^tax^id ); movd( instl^cntry^data^tkn.cntry^cde, "BR" ); lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^cntry^data^tkn, $len( instl^cntry^data^tkn ), ! max^tkn^buf^lgth !, lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1754, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1755, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 1755 ); end; end; end else begin call log^message^( 1756, ! routing code !, @err^get^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1756 ); end; return true; end; ! of if sem^bndes^instl^txn^d #ADD 17536 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM sem.pos^entry^mde = remote^ecomm^d or #ADD 17560k00 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = paypass^mapped^cntctlss^chip then #DELETE 17560k01/17560k02 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 18321 SEM^FRMT^XADV^TO^SEM^XACK moneysend^ref^data^bit^d := 0; #ADD 20386 SEM^FRMT^XRQST^TO^PSTM^0200 struct .iss^tknztn^data^tkn( iss^tknztn^data^tkn^def ); #ADD 20430v02 SEM^FRMT^XRQST^TO^PSTM^0200 int .iss^tknztn^data^get^tkn( iss^tknztn^data^tkn^def ); #ADD 21397k02 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" or sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "F" ) then #DELETE 21397k03/21397k06 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21397k1P SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "02" ); end else if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "F" then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "01" ); end else begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "00" ); end; #ADD 21397M1d SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.tkn^txn^id^sub^fld^30.tag = "30" then begin tkn^id ':=' iss^tknztn^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @iss^tknztn^data^get^tkn, tkn^lgth ) then begin ! ! Update Issuer Tokenization Data Token ! movd( iss^tknztn^data^get^tkn.frmt^cde, "01" ); call ascii^integer^( sem.addl^data.info. tkn^txn^id^sub^fld^30.lgth, lgth ); lgth := lgth + 4; call integer^ascii^( iss^tknztn^data^get^tkn.lgth, lgth ); movl( iss^tknztn^data^get^tkn.info, sem.addl^data.info.tkn^txn^id^sub^fld^30, lgth ); end else begin ! ! Add Issuer Tokenization Data Token ! call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, iss^tknztn^data^tkn ); movd( iss^tknztn^data^tkn.frmt^cde, "01" ); call ascii^integer^( sem.addl^data.info. tkn^txn^id^sub^fld^30.lgth, lgth ); lgth := lgth + 4; call integer^ascii^( iss^tknztn^data^tkn.lgth, lgth ); movl( iss^tknztn^data^tkn.info, sem.addl^data.info.tkn^txn^id^sub^fld^30, lgth ); tkn^add^lgth := lgth + $len( iss^tknztn^data^tkn.lgth ) + $len( iss^tknztn^data^tkn.frmt^cde ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, iss^tknztn^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1757, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin ! ! If any other token add error encountered ! log a message. ! call log^message^( 1758, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1758 ); end; end; ! of if tkn^result end; ! add token end; ! of iss^tknztn^data^sub^fld^30.tag = "30" #ADD 21468X00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^bndes^instl^txn^d( sem ) then begin ! ! ! Installment Payment for Brazil ! ! ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.bndes.sub^fld^12.tag = "012" and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) then begin call sem^frmt^instl^pmnt^to^pstm( pstm, sem, pos^data1^tkn ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end; end else #ADD 22187 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "242" or #ADD 22209 SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec.ucaf^ind = "1" then #DELETE 22209k00/22210k01 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 22222 SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec = "2" then #ADD 22240Y00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ <> sem^auth^request^d then #DELETE 22240Y01/22240U02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22244 SEM^FRMT^XRQST^TO^PSTM^0200 movd( ps51^tkn^data.e^com^flg, "7" ); #DELETE 22245 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 22247e09 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde <> mobile^ecomm^d then #ADD 22317 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = mobile^ecomm^d and sem.addl^data.info.ecom^sec^sub^fld^42 = "42" then #DELETE 22318 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 22320s1M/22320s1T SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22930 SEM^FRMT^XRQST^TO^PSTM^0200 if moneysend^ref^data^bit^d then begin util^add^moneysend^tkns( sem, pstm, ofst, pos^userdata ); end; #ADD 23968 SEM^FRMT^XRVSL^TO^PSTM^0420 if moneysend^ref^data^bit^d then begin util^add^moneysend^tkns( sem, pstm, ofst, pos^userdata ); end; #REPLACE 24116 SEM^FRMT^XRVSL^TO^SEM^XACK moneysend^ref^data^bit^d := 0; #ADD 24513 UTIL^^EXPAND ?section util^add^moneysend^tkns ?page "util^add^moneysend^tkns" !##################################################################### !# # !# util^add^moneysend^tkns # !# # !# This procedure adds or updates the P2P Sender Data token (SI), # !# P2P Receiver Data token (SJ), P2P Additional Data token (SK) and # !# Language token (SL) in the internal message. The tokens are used # !# used for MoneySend processing. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Pstm/stm. # !# ofst - Length of the pstm or stm. # !# pos^userdata - Optional flag indicating that a pos tran has # !# userdata included. # !# # !# OUTPUT PARAMETERS: # !# sim - Internal message with the MoneySend tokens # !# added or updated. # !# # !# RETURN: # !# # !##################################################################### proc util^add^moneysend^tkns( sem, sim, ofst, pos^userdata ) extensible; int .sem; int .sim; int ofst; int pos^userdata; begin wlform( err^add^tkn, "UNABLE TO ADD TOKEN, TOKEN ID \\, ERROR: #, " ','" PAN : \?, Seq Num : \\\\\\\\\\\\ " ) wlform( err^updt^tkn, "ERROR WHILE ATTEMPTING TO UPDATE TOKEN \\, ERROR: #," ','" PAN : \?, Seq Num : \\\\\\\\\\\\ " ) wlform( no^room, "UNABLE TO ADD TOKEN, TOKEN ID \\, NO ROOM AVAILABLE." ','" PAN : \?, Seq Num : \\\\\\\\\\\\ " ) define moneysend^ref^data^d = sem^.moneysend^ref^data.info.byte#; struct .language^tkn( language^tkn^def ); struct .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); struct .p2p^rcv^data^tkn( p2p^rcv^data^tkn^def ); struct .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); int data^idx; int evt^pan^lgth := 0; int moneysend^ref^data^lgth; int processed^tag^lgth; int .pstm( pstm^def ) := @sim; int .sem^( sem^def ) := @sem; int subelement^lgth; int tag^hex^lgth; int tag^lgth; int tag^mov^lgth; int temp^tkn^add^lgth; int tkn^add^lgth; int tkn^fld^lgth; int tkn^fld^ofst; int tkn^found; int tkn^lgth; int tkn^rslt; int .pbit^map := wordaddr( @sem^.pbit^map ); int .sbit^map := wordaddr( @sem^.sbit^map ); string tkn^id[ 0:1 ]; string .pan[ 0:18 ] := [ 19 * [" "] ]; ?page "subproc sub^mov^ext^to^tkn of util^add^moneysend^tkns" !################################################################# !# # !# sub^mov^ext^to^tkn # !# # !# This subprocedure moves fields from subelements in the # !# external message into tokens. # !# # !# INPUT PARAMETERS: # !# tkn^fld - The token field that will receive the data# !# tkn^fld^lgth - The length of the token field # !# tkn^fld^ofst - The offset of the token field within the # !# token # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^mov^ext^to^tkn( tkn^fld, tkn^fld^lgth, tkn^fld^ofst ); string .tkn^fld; int tkn^fld^lgth; int tkn^fld^ofst; begin data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); tag^mov^lgth := $min( tag^lgth, tkn^fld^lgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( tkn^fld, moneysend^ref^data^d[ data^idx ], tag^mov^lgth ); data^idx := data^idx + tag^lgth; temp^tkn^add^lgth := tkn^fld^ofst + tkn^fld^lgth; if temp^tkn^add^lgth > tkn^add^lgth then begin tkn^add^lgth := temp^tkn^add^lgth; end; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; ! of subproc sub^mov^ext^to^tkn ?page "subproc sub^process^addl^data of util^add^moneysend^tkns" !################################################################# !# # !# sub^process^addl^data # !# # !# This subprocedure will format and add or update the # !# Person-to-Person Additional Data token (SK) if the # !# associated data is present in DE 108. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^addl^data; begin tkn^add^lgth := 0; tkn^id ':=' p2p^addl^data^tkn^id^d;; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, p2p^addl^data^tkn ); data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! Process the tag data within the subelement id ! if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^mov^ext^to^tkn( p2p^addl^data^tkn.mc.unique^ref^num, $len( p2p^addl^data^tkn.mc.unique^ref^num ), $offset( p2p^addl^data^tkn.mc. unique^ref^num ) ); end else if moneysend^ref^data^d[ data^idx ] = "02" then begin call sub^mov^ext^to^tkn( p2p^addl^data^tkn.mc.addl^msg, $len( p2p^addl^data^tkn.mc.addl^msg ), $offset( p2p^addl^data^tkn.mc.addl^msg ) ); end else if moneysend^ref^data^d[ data^idx ] = "03" then begin call sub^mov^ext^to^tkn( p2p^addl^data^tkn.mc.fund^src, $len( p2p^addl^data^tkn.mc.fund^src ), $offset( p2p^addl^data^tkn.mc.fund^src ) ); end else if moneysend^ref^data^d[ data^idx ] = "04" then begin call sub^mov^ext^to^tkn( p2p^addl^data^tkn.mc.participant^id, $len( p2p^addl^data^tkn.mc.participant^id ), $offset( p2p^addl^data^tkn.mc. participant^id ) ); end else begin ! ! Bypass any unrecognized tags ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; !of while processed^tag^lgth < subelement^lgth if tkn^add^lgth > 0 then begin ! ! Add the P2P Additional Data token to the internal ! message ! tkn^found := false; p2p^addl^data^tkn.frmt^cde ':=' "01"; call integer^ascii^( p2p^addl^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^addl^data^tkn.frmt^cde ) - $len( p2p^addl^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1759, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 1760, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1760 ); end else begin call log^message^( 1761, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1761 ); end; end; ! of if tkn^rslt end; ! of if tkn^add^lgth > 0 end; ! of subproc sub^process^addl^data ?page "subproc sub^process^language^descr of util^add^moneysend^tkns" !################################################################# !# # !# sub^process^language^descr # !# # !# This subprocedure will format and add or update the # !# Language token (SL) if the associated data is present in # !# DE 108. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^language^descr; begin tkn^add^lgth := 0; tkn^id ':=' language^tkn^id^d;; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, language^tkn ); data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! Process the tag data within the subelement id ! if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^mov^ext^to^tkn( language^tkn.lang^id, $len( language^tkn.lang^id ), $offset( language^tkn.lang^id ) ); end else if moneysend^ref^data^d[ data^idx ] = "02" then begin ! ! The data in this tag is in binary, and needs to be ! converted to hex in the token field. ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); tag^mov^lgth := $min( tag^lgth, $len( language^tkn.lang^info ) / 2 ); tag^hex^lgth := tag^mov^lgth * 2; data^idx := data^idx + tag^lgth^fld^lgth^l; call binary^hexchar( language^tkn.lang^info, tag^hex^lgth, moneysend^ref^data^d[ data^idx ] ); call integer^ascii^( language^tkn.lgth, tag^hex^lgth ); data^idx := data^idx + tag^lgth; temp^tkn^add^lgth := $offset( language^tkn.lang^info ) + tag^hex^lgth; if temp^tkn^add^lgth > tkn^add^lgth then begin tkn^add^lgth := temp^tkn^add^lgth; end; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end else begin ! ! Bypass any unrecognized tags ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; !of while processed^tag^lgth < subelement^lgth if tkn^add^lgth > 0 then begin ! ! Add the Language token to the internal message ! tkn^found := false; ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, language^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, language^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1762, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 1763, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1763 ); end else begin call log^message^( 1764, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1764 ); end; end; ! of if tkn^rslt end; ! of if tkn^add^lgth > 0 end; ! of subproc sub^process^language^descr ?page "subproc sub^process^rcv^data of util^add^moneysend^tkns" !################################################################# !# # !# sub^process^rcv^data # !# # !# This subprocedure will format and add or update the # !# Person-to-Person Receiver Data token (SJ) if the associated # !# data is present in DE 108. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^rcv^data; begin tkn^add^lgth := 0; tkn^id ':=' p2p^rcv^data^tkn^id^d;; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, p2p^rcv^data^tkn ); data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! Process the tag data within the subelement id ! if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.first^nam, $len( p2p^rcv^data^tkn.mc.first^nam ), $offset( p2p^rcv^data^tkn.mc.first^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "02" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.middle^nam, $len( p2p^rcv^data^tkn.mc.middle^nam ), $offset( p2p^rcv^data^tkn.mc.middle^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "03" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.last^nam, $len( p2p^rcv^data^tkn.mc.last^nam ), $offset( p2p^rcv^data^tkn.mc.last^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "04" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.street^addr, $len( p2p^rcv^data^tkn.mc.street^addr ), $offset( p2p^rcv^data^tkn.mc.street^addr ) ); end else if moneysend^ref^data^d[ data^idx ] = "05" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.city, $len( p2p^rcv^data^tkn.mc.city ), $offset( p2p^rcv^data^tkn.mc.city ) ); end else if moneysend^ref^data^d[ data^idx ] = "06" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.st, $len( p2p^rcv^data^tkn.mc.st ), $offset( p2p^rcv^data^tkn.mc.st ) ); end else if moneysend^ref^data^d[ data^idx ] = "07" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.cntry, $len( p2p^rcv^data^tkn.mc.cntry ), $offset( p2p^rcv^data^tkn.mc.cntry ) ); end else if moneysend^ref^data^d[ data^idx ] = "08" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.postal^cde, $len( p2p^rcv^data^tkn.mc.postal^cde ), $offset( p2p^rcv^data^tkn.mc.postal^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "09" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.phn^num, $len( p2p^rcv^data^tkn.mc.phn^num ), $offset( p2p^rcv^data^tkn.mc.phn^num ) ); end else if moneysend^ref^data^d[ data^idx ] = "10" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.dob, $len( p2p^rcv^data^tkn.mc.dob ), $offset( p2p^rcv^data^tkn.mc.dob ) ); end else if moneysend^ref^data^d[ data^idx ] = "11" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.acct^num, $len( p2p^rcv^data^tkn.mc.acct^num ), $offset( p2p^rcv^data^tkn.mc.acct^num ) ); end else begin ! ! Bypass any unrecognized tags ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; !of while processed^tag^lgth < subelement^lgth if tkn^add^lgth > 0 then begin ! ! Add the P2P Receiver Data token to the internal message ! tkn^found := false; p2p^rcv^data^tkn.frmt^cde ':=' "01"; call integer^ascii^( p2p^rcv^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^rcv^data^tkn.frmt^cde ) - $len( p2p^rcv^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1765, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 1766, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1766 ); end else begin call log^message^( 1767, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1767 ); end; end; ! of if tkn^rslt end; ! of if tkn^add^lgth > 0 end; ! of subproc sub^process^rcv^data ?page "subproc sub^process^sender^data of util^add^moneysend^tkns" !################################################################# !# # !# sub^process^sender^data # !# # !# This subprocedure will format and add or update the # !# Person-to-Person Sender Data token (SI) if the associated # !# data is present in DE 108. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^sender^data; begin tkn^add^lgth := 0; tkn^id ':=' p2p^sender^data^tkn^id^d;; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, p2p^sender^data^tkn ); data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! Process the tag data within the subelement id ! if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.first^nam, $len( p2p^sender^data^tkn.mc.first^nam ), $offset( p2p^sender^data^tkn.mc. first^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "02" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.middle^nam, $len( p2p^sender^data^tkn.mc.middle^nam ), $offset( p2p^sender^data^tkn.mc. middle^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "03" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.last^nam, $len( p2p^sender^data^tkn.mc.last^nam ), $offset( p2p^sender^data^tkn.mc.last^nam ) ); end else if moneysend^ref^data^d[ data^idx ] = "04" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.street^addr, $len( p2p^sender^data^tkn.mc.street^addr ), $offset( p2p^sender^data^tkn.mc. street^addr ) ); end else if moneysend^ref^data^d[ data^idx ] = "05" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.city, $len( p2p^sender^data^tkn.mc.city ), $offset( p2p^sender^data^tkn.mc.city ) ); end else if moneysend^ref^data^d[ data^idx ] = "06" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.st, $len( p2p^sender^data^tkn.mc.st ), $offset( p2p^sender^data^tkn.mc.st ) ); end else if moneysend^ref^data^d[ data^idx ] = "07" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.cntry, $len( p2p^sender^data^tkn.mc.cntry ), $offset( p2p^sender^data^tkn.mc.cntry ) ); end else if moneysend^ref^data^d[ data^idx ] = "08" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.postal^cde, $len( p2p^sender^data^tkn.mc.postal^cde ), $offset( p2p^sender^data^tkn.mc. postal^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "09" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.phn^num, $len( p2p^sender^data^tkn.mc.phn^num ), $offset( p2p^sender^data^tkn.mc.phn^num ) ); end else if moneysend^ref^data^d[ data^idx ] = "10" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.dob, $len( p2p^sender^data^tkn.mc.dob ), $offset( p2p^sender^data^tkn.mc.dob ) ); end else if moneysend^ref^data^d[ data^idx ] = "11" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.acct^num, $len( p2p^sender^data^tkn.mc.acct^num ), $offset( p2p^sender^data^tkn.mc.acct^num ) ); end else begin ! ! Bypass any unrecognized tags ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; !of while processed^tag^lgth < subelement^lgth if tkn^add^lgth > 0 then begin ! ! Add the P2P Sender Data token to the internal message ! tkn^found := false; p2p^sender^data^tkn.frmt^cde ':=' "01"; call integer^ascii^( p2p^sender^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^sender^data^tkn.frmt^cde ) - $len( p2p^sender^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1768, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 1769, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1769 ); end else begin call log^message^( 1770, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1770 ); end; end; ! of if tkn^rslt end; ! of if tkn^add^lgth > 0 end; ! of subproc sub^process^sender^data ?page "util^add^moneysend^tkns" !################################################################# !# # !# This is the main body of PROC util^add^moneysend^tkns # !# # !################################################################# if not $param( sem ) or not $param( sim ) or not $param( ofst ) then begin call abend^( 1765 ); end; ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem^.pan.lgth, evt^pan^lgth ); movl( pan, sem^.pan.num, evt^pan^lgth ); call ascii^integer^( sem^.moneysend^ref^data.lgth, moneysend^ref^data^lgth ); data^idx := 0; while data^idx < moneysend^ref^data^lgth do begin if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^process^rcv^data; end ! of subelement = "01" else if moneysend^ref^data^d[ data^idx ] = "02" then begin call sub^process^sender^data; end ! of subelement = "02" else if moneysend^ref^data^d[ data^idx ] = "03" then begin call sub^process^addl^data; end ! of subelement = "03" else if moneysend^ref^data^d[ data^idx ] = "04" then begin call sub^process^language^descr end ! of subelement = "04" else begin ! ! Bypass any unrecognized subelements ! data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^lgth; end; ! of unrecognized subelement end; ! of while data^idx < moneysend^ref^data^lgth do end; ! of proc util^add^moneysend^tkns #REPLACE 25479 /25481 UTIL^COLLAPSE^SEM index, length, offset; int processed^tag^lgth; int .sub^lgth; int t^length, #ADD 25572 UTIL^COLLAPSE^SEM if index <> 47 and index <> 107 and index <> 111 then #DELETE 25573 UTIL^COLLAPSE^SEM #ADD 25665 UTIL^COLLAPSE^SEM ! ! Authentication Indicator ! if hdr.addl^data.info. authn^ind^sub^fld^17.tag = "17" then begin call ascii^integer( hdr.addl^data.info. authn^ind^sub^fld^17.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. authn^ind^sub^fld^17.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 25787 UTIL^COLLAPSE^SEM ! ! Token Transaction Identifier ! if hdr.addl^data.info. tkn^txn^id^sub^fld^30.tag = "30" then begin call ascii^integer( hdr.addl^data.info. tkn^txn^id^sub^fld^30.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. tkn^txn^id^sub^fld^30.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26021 UTIL^COLLAPSE^SEM ! ! Merchant On-behalf Services. ! if hdr.addl^data.info.on^behalf^svc^sub^fld^51. tag = "51" then begin call ascii^integer( hdr.addl^data.info. on^behalf^svc^sub^fld^51.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. on^behalf^svc^sub^fld^51.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26893 UTIL^COLLAPSE^SEM if index = 107 then ! field 108 begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then begin ! ! External message is too long ! return ( index + 1 ); end; length := $len( hdr.moneysend^ref^data.lgth ); movl( ptr, hdr.moneysend^ref^data.lgth, length ); call ascii^integer( hdr.moneysend^ref^data.lgth, 3, t^length ); call translate( ptr, length, ascii^to^ebcdic^l ); @ptr := @ptr '+' length; length := 0; while length < t^length do begin movl( ptr, hdr.moneysend^ref^data.info. byte[ length ], subelement^id^lgth^l + subelement^lgth^fld^lgth^l ); call ascii^integer( hdr.moneysend^ref^data.info.byte [ length + subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, sub^lgth ); if ptr = "04" then begin call translate( ptr, subelement^id^lgth^l + subelement^lgth^fld^lgth^l, ascii^to^ebcdic^l ); @ptr := @ptr + subelement^id^lgth^l + subelement^lgth^fld^lgth^l; length := length + subelement^id^lgth^l + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < sub^lgth do begin call ascii^integer( hdr.moneysend^ref^data.info. byte[ length + tag^id^lgth^l ], tag^lgth^fld^lgth^l, tag^length ); movl( ptr, hdr.moneysend^ref^data.info. byte[ length ], tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length ); if ptr = "02" then begin ! ! The tag data is in binary, so ! only translate the tag and ! tag length ! call translate( ptr, tag^id^lgth^l + tag^lgth^fld^lgth^l, ascii^to^ebcdic^l ) end else begin ! ! Translate the entire field ! call translate( ptr, tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length, ascii^to^ebcdic^l ) end; tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; length := length + tag^length; processed^tag^lgth := processed^tag^lgth + tag^length; @ptr := @ptr + tag^length; end; end ! of subelement 04 else begin ! ! Move the entire subelement to ptr and ! convert the contents to ebcdic ! sub^lgth := subelement^id^lgth^l + subelement^lgth^fld^lgth^l + sub^lgth; movl( ptr, hdr.moneysend^ref^data.info. byte[ length ], sub^lgth ); call translate( ptr, sub^lgth, ascii^to^ebcdic^l ); length := length + sub^lgth; @ptr := @ptr + sub^lgth; end; end; ! of while length < t^length end ! index = 107 else #ADD 26945 UTIL^COLLAPSE^SEM if hdr.adnl^data^natl.bndes. sub^fld^12.tag = "012" then begin call ascii^integer( hdr.adnl^data^natl.bndes. sub^fld^12.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.bndes.sub^fld^12.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; #ADD 26950 UTIL^COLLAPSE^SEM if index <> 47 and index <> 107 and index <> 111 then #DELETE 26951 UTIL^COLLAPSE^SEM #REPLACE 27662 /27666 UTIL^EXPAND^SEM cert^lgth; int data^idx; int index, length, offset; int processed^tag^lgth; int t^length, #ADD 27794 UTIL^EXPAND^SEM if index <> 47 and index <> 107 and index <> 111 then #DELETE 27795 UTIL^EXPAND^SEM #ADD 27873 UTIL^EXPAND^SEM else if ptr[ length ] = "17" then begin ! ! Authentication Indicator ! movl( sem^ptr.addl^data.info. authn^ind^sub^fld^17.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 27944 UTIL^EXPAND^SEM else if ptr[ length ] = "30" then begin ! ! Token Transaction Identifier ! movl( sem^ptr.addl^data.info. tkn^txn^id^sub^fld^30.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 28022X0W UTIL^EXPAND^SEM if ptr[ length ] = "51" then begin ! ! On-behalf Services. ! movl( sem^ptr.addl^data.info. on^behalf^svc^sub^fld^51. tag, ptr[ length ], 4 ); num^idx := tag^length / 4; @on^behalf^ptr := @ptr[ length '+' 4 ]; cnt := 0; while cnt < num^idx do begin movl( sem^ptr.addl^data.info. on^behalf^svc^sub^fld^51. tag^data[ cnt ], on^behalf^ptr, 4 ); @on^behalf^ptr := @on^behalf^ptr '+' 4; cnt := cnt + 1; end; length := length + tag^length + 4; end else #REPLACE 28079 UTIL^EXPAND^SEM cnt := 0; #ADD 28620 UTIL^EXPAND^SEM if index = 107 then ! field 108 begin length := $len( hdr.moneysend^ref^data.lgth ); call translate( ptr, length, ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for length; if not ascii^integer( ptr, 3, t^length ) then begin ! ! The SEM has invalid data ! return ( index + 1 ); end; @ptr := @ptr + 3; data^idx := 0; while ( length < ( t^length + 3 ) ) do begin call translate( ptr, subelement^id^lgth^l + subelement^lgth^fld^lgth^l, ebcdic^to^ascii^l ); call ascii^integer( ptr[ subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, sub^lgth ); length := length + subelement^id^lgth^l + subelement^lgth^fld^lgth^l + sub^lgth; if length > ( t^length + 3 ) then begin ! ! error ! return index + 1; end; if ptr = "04" then begin ! ! Subelement 04 requires special ! processing as tag 02 contains binary ! data that will not be converted. ! ! Move data, pointer and data^idx past ! the subelement ID and length ! movl( sem^ptr.moneysend^ref^data.info. byte[ data^idx ], ptr, subelement^id^lgth^l + subelement^lgth^fld^lgth^l ); data^idx := data^idx + subelement^id^lgth^l + subelement^lgth^fld^lgth^l; @ptr := @ptr[ subelement^id^lgth^l + subelement^lgth^fld^lgth^l ]; processed^tag^lgth := 0; while processed^tag^lgth < sub^lgth do begin call translate( ptr, tag^id^lgth^l + tag^lgth^fld^lgth^l, ebcdic^to^ascii^l ); call ascii^integer( ptr[ tag^id^lgth^l ], tag^lgth^fld^lgth^l, tag^length ); if ptr = "02" then begin ! ! tag 2 contains binary data and ! will not be translated ! end else begin call translate( ptr[ tag^id^lgth^l + tag^lgth^fld^lgth^l ], tag^length, ebcdic^to^ascii^l ); end; tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( sem^ptr.moneysend^ref^data.info. byte[ data^idx ], ptr, tag^length ); data^idx := data^idx + tag^length; @ptr := @ptr + tag^length; processed^tag^lgth := processed^tag^lgth + tag^length; end; ! of while end ! of subelemnt = "04" else begin call translate( ptr[ subelement^id^lgth^l + subelement^lgth^fld^lgth^l ], sub^lgth, ebcdic^to^ascii^l ); sub^lgth := subelement^id^lgth^l + subelement^lgth^fld^lgth^l + sub^lgth; movl( sem^ptr.moneysend^ref^data.info. byte[ data^idx ], ptr, sub^lgth ); data^idx := data^idx + sub^lgth; @ptr := @ptr + sub^lgth; end; end; ! of while end ! index = 107 else #ADD 28674X0J UTIL^EXPAND^SEM if ptr[ length ] = "012" then begin movl( sem^ptr.adnl^data^natl.bndes. sub^fld^12.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 28713 UTIL^EXPAND^SEM if index <> 47 and index <> 107 and index <> 111 then #DELETE 28714 UTIL^EXPAND^SEM #ADD 36443 UTIL^SWI^TKN^INIT end ! of if sem.addl^data.info...tag = "71" else if sem.addl^data.info.on^behalf^svc^sub^fld^51.tag = "51" then begin if ascii^integer^( sem.addl^data.info. on^behalf^svc^sub^fld^51.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^data.info. on^behalf^svc^sub^fld^51. tag^data[ 0 ] ); i := 0; if cnt > 10 then begin cnt := 10; end; ! of if cnt > 10 ! while i < cnt do begin move( bnet^tkn^buf.on^behalf[ i ].svc, sem.addl^data.info.on^behalf^svc^sub^fld^51. tag^data[ i ].svc ); move( bnet^tkn^buf.on^behalf[ i ].rslt^1, sem.addl^data.info.on^behalf^svc^sub^fld^51. tag^data[ i ].rslt^1 ); i := i + 1; end; ! of while i < cnt do ! end; ! of if ascii^integer^( sem.addl^data.info. ! #REPLACE 36444 UTIL^SWI^TKN^INIT end; ! of if sem.addl^data.info...tag = "51" ! #ADD 36474v02 UTIL^SWI^TKN^INIT if sem.addl^data.info.authn^ind^sub^fld^17.tag = "17" then begin movl( bnet^tkn^buf.authn^ind, sem.addl^data.info.authn^ind^sub^fld^17.tag^data, $len( bnet^tkn^buf.authn^ind ) ); end; ! of if tag = "17" #ADD 36882v02 UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.authn^ind <> blanks for $len( bnet^tkn^buf.authn^ind ) ) then begin move( bnet^tkn.authn^ind, bnet^tkn^buf.authn^ind ); end; #ENDSCN = SW0J254 !#CMP2.28 08/26/15 BNETS 6129 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6129 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6129 * ******************************************************************************** #SCN = SW0J257 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6129 #NEWVERSION = 6130 #ADD 03821c0E ! 25AUG2015 meyersc ! Symptom: Banknet Release 15.Q4 Functional Enhancements ! Problem: None. ! Fix: Modified the source code to ensure card verify ! transactions can be processed as an advice message. ! Proc modified: pstm^0220^force^post ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0815M, ILB0815R, ILB0815S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0815M. Run the ILF conversion using ILB0815R. ! Reference: WO #008019 #DELETE 16120 PSTM^0220^FORCE^POST #ENDSCN = SW0J257 !#CMP2.28 08/27/15 BNETLIBS6253 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6253 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6253 * ******************************************************************************** #SCN = SW0J259 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6253 #NEWVERSION = 6254 #ADD 07850#0z ! 27AUG2015 wielerk ! Symptom: Interface can pass incorrect data in DE-48.SE-61. ! ( addl-data.pos-data, extended condition codes ). ! Problem: When determining to send DE-48.SE-61, the interface ! edits the CH token auth-msg-ind <> " " which isn't ! specific enough to determine data is present and can ! allow spaces to be sent. ! Fix: The interface was modified to only pass final-auth-ind ! data in DE-48.SE-61 when the CH token auth-msg-ind is ! set to "1". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2080161. #ADD 09708N0D PSTM^FRMT^0200^TO^XRQST pos^data1^tkn.auth^msg^ind = "1" and #DELETE 09708M0O PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0J259 !#CMP2.28 09/10/15 ILB0814S6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0814S ILB0814S 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0814S ILB0814S 6000 * ******************************************************************************** #SCN = SW0J277 , FILEID = ILB0814S #VOLUME = $ROOK.SW60BNET #FILE = ILB0814S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00042 ! ! 10SEP2015 wielerk ! Symptom: Interface abends with Trap #2010 while processing a ! reversal from Mastercard. ! Problem: New length of the converted file was not accounted for ! when setting ILF.EXTRN^MSG^LGTH or in the placement of ! the token buffer. ! Fix: Modified code to add new sem length and adjust the ! offset in dest pointer. ! Dependency: Apply fix to ILB0814S. Run Make ! Make the ILF conversion program using ILB0814M. ! Run the ILF conversion using ILB0814R. ! Reference: Case #2079328. #ADD 01746 CONVERT ! add the net 1 byte here so the new length can be set, we will ! adjust the dest pointer with this also ! #REPLACE 01747 CONVERT new^sem^lgth := ( sem^lgth + 1 ); #REPLACE 01857 CONVERT @dest := @dest[ lgth + 1 ]; #ENDSCN = SW0J277 !#CMP2.28 09/24/15 ILB0814S6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0814S ILB0814S 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0814S ILB0814S 6001 * ******************************************************************************** #SCN = SW0J298 , FILEID = ILB0814S #VOLUME = $ROOK.SW60BNET #FILE = ILB0814S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6001 #NEWVERSION = 6002 #ADD 00042A0E ! 24SEP2015 wielerk ! Symptom: Conversion program truncates token buffer by 2 bytes. ! Problem: Final move of data to the dest did not account for the ! 2 bytes added by the previous fix. ! Fix: Modified code to add new sem length. ! Dependency: Apply fix to ILB0814S. Run Make ! Make the ILF conversion program using ILB0814M. ! Run the ILF conversion using ILB0814R. ! Reference: Case #2097328. #ADD 01756 CONVERT ! Add the net new byte here ! out_file_rec_lgth := cnt + 1; !01757 #DELETE 01757 CONVERT #ENDSCN = SW0J298 !#CMP2.28 09/24/15 ILB0815S6000 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0815S ILB0815S 6000 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0815S ILB0815S 6000 * ******************************************************************************** #SCN = SW0J299 , FILEID = ILB0815S #VOLUME = $ROOK.SW60BNET #FILE = ILB0815S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00037 ! 24SEP2015 wielerk ! Symptom: Banknet process abends while processing a reversal ! after running this conversion. ! Problem: The token buffer was not located at the end of the ! ILF.SEM as the token utilities expect. ! Fix: Modified the calculation of the final move length to ! use the original SEM length and not the new length. ! This leaves SRC pointing at the token buffer and ! not part way into the token buffer. ! Dependency: Apply this fix to ILB0815S. ! Make the ILF conversion program using ILB0815M. ! Run the ILF conversion using ILB0815R. ! Reference: Case #2097328. #REPLACE 00488 CONVERT final^move^lgth := $max( ( sem^lgth - ofst1 ), #ENDSCN = SW0J299 !#CMP2.28 09/30/15 ILB0814S6002 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0814S ILB0814S 6002 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0814S ILB0814S 6002 * ******************************************************************************** #SCN = SW0J303 , FILEID = ILB0814S #VOLUME = $ROOK.SW60BNET #FILE = ILB0814S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6002 #NEWVERSION = 6003 #ADD 00042B0A ! 30SEP2015 wielerk ! Symptom: Conversion program contains extra null byte and ILF ! external message lengths are incorrect. ! Problem: Final move of data to the dest was byte addressed ! causing token buffer misplacement and incorrect SEM ! offsets. ILF external message length is incorrect ! for EMV records. ! Fix: Modified code to make the final move for the SEM fields ! and make the token buffer a separate move. ! Dependency: Apply fix to ILB0814S. Run Make ! Make the ILF conversion program using ILB0814M. ! Run the ILF conversion using ILB0814R. ! Reference: Case #2097328. #REPLACE 01662 CONVERT int tkn^move^lgth := 0; #ADD 01746 CONVERT if sem^lgth > 1876 then begin new^sem^lgth := sem^lgth + 2; out_file_rec_lgth := cnt + 2; end else begin new^sem^lgth := sem^lgth; out_file_rec_lgth := cnt; end; #DELETE 01746A00/01747A02 CONVERT #DELETE 01756B01/01756B03 CONVERT #REPLACE 01857A01 CONVERT @dest := @dest[ lgth ]; #ADD 01857A02 CONVERT ! ! Move de-127 ! lgth := $len( sem.private^data ); movl( dest[ 0 ], src[ 0 ], lgth ); @src := @src[ lgth + 1 ]; @dest := @dest[ lgth ]; ! ! Move de-55 ! if sem^lgth > 1876 then begin lgth := $len( sem.emv^data ); movl( dest[ 0 ], src[ 0 ], lgth ); @src := @src[ lgth ]; ! bump this address to account for the 2 bytes added so the ! token buffer is placed correctly @dest := @dest[ lgth + 2 ]; end; #REPLACE 01865 CONVERT tkn^move^lgth := cnt - ( data^ptr + sem^lgth ); #ADD 01866 CONVERT if tkn^move^lgth then begin movl( dest, src, tkn^move^lgth ); end; #DELETE 01867 CONVERT #ENDSCN = SW0J303 !#CMP2.28 09/30/15 ILB0815S6001 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0815S ILB0815S 6001 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0815S ILB0815S 6001 * ******************************************************************************** #SCN = SW0J304 , FILEID = ILB0815S #VOLUME = $ROOK.SW60BNET #FILE = ILB0815S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6001 #NEWVERSION = 6002 #ADD 00037A0E ! 30SEP2015 wielerk ! Symptom: Installations that extract the ILF require a record ! that matches what the BNET process creates currently. ! Problem: EMV records are currently created as 2446 bytes for ! the ILF external message length. Non-EMV records have ! a single null byte prior to the token buffer. ! Fix: Modified the calculation of the ILF external message ! length for EMV records. Add spaces after ILF external ! message to clear null before token buffer. ! Dependency: Apply this fix to ILB0815S. ! Make the ILF conversion program using ILB0815M. ! Run the ILF conversion using ILB0815R. ! Reference: Case #2097328. #ADD 00437 CONVERT if new^sem^lgth > 2446 then begin new^sem^lgth := new^sem^lgth - 2; end; #ADD 00497 CONVERT if new^sem^lgth < 2446 then begin dest[ final^move^lgth ] ':=' " "; end; #REPLACE 00516 /00516 OFFSET 0 CONVERT if sem^lgth > 1930 then begin @dest := @dest[ final^move^lgth - 2 ]; out_file_rec_lgth := out_file_rec_lgth - 2; end else begin @dest := @dest[ final^move^lgth ]; end; #DELETE 00517 CONVERT #ENDSCN = SW0J304 !#CMP2.28 10/05/15 ILB0814S6003 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0814S ILB0814S 6003 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0814S ILB0814S 6003 * ******************************************************************************** #SCN = SW0J306 , FILEID = ILB0814S #VOLUME = $ROOK.SW60BNET #FILE = ILB0814S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6003 #NEWVERSION = 6004 #ADD 00042C0E ! 05OCT2015 wisharJ/GruberG ! Symptom: Converted EMV records do not have the ! end^of^mand^ilf^flds field present. EMV data appears ! to be two bytes too long. ! Problem: End^of^mand^ilf^flds field was not moved into the dest ! buffer after DE 127. Token buffer was not word aligned ! after this additional move. ! Fix: Modified code to move end^of^mand^ilf^flds field ! after DE 127, and ensure the token buffer is ! word-aligned. ! Dependency: Apply fix to ILB0814S. Run Make ! Make the ILF conversion program using ILB0814M. ! Run the ILF conversion using ILB0814R. ! Reference: Case #2123391. #REPLACE 01857C07 CONVERT lgth := $len( sem.private^data ) + 1; #REPLACE 01857C09 CONVERT @src := @src[ lgth ]; #DELETE 01857C0K/01857C0L CONVERT #REPLACE 01857C0M/01857C0M OFFSET 0 CONVERT @dest := @dest[ lgth ]; dest ':=' " "; @dest := @dest[1]; #ENDSCN = SW0J306 !#CMP2.28 10/06/15 ILB0815S6002 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.ILB0815S ILB0815S 6002 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.ILB0815S ILB0815S 6002 * ******************************************************************************** #SCN = SW0J308 , FILEID = ILB0815S #VOLUME = $ROOK.SW60BNET #FILE = ILB0815S #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6002 #NEWVERSION = 6003 #ADD 00037B0E ! 05OCT2015 wisharJ/GruberG ! Symptom: Converted non-EMV records have an additional blank byte ! before the token buffer. ! Problem: An additional blank byte was being moved into the dest ! by the previous fix. ! Fix: Modified code to move only a single blank byte into the ! dest before the token buffer. Ensured the actual length ! of the external message area matches the value in the ! entrn^msg^lgth. ! Dependency: Apply fix to ILB0815S. Run Make ! Make the ILF conversion program using ILB0815M. ! Run the ILF conversion using ILB0815R. ! Reference: Case #2123391. #REPLACE 00497B03/00497B03 OFFSET 0 CONVERT dest[ final^move^lgth ] ':=' " "; @dest := @dest[ 1 ]; #REPLACE 00516B08 CONVERT @dest := @dest[ final^move^lgth - 1]; #ENDSCN = SW0J308 !#CMP2.28 10/07/15 BNETLIBS6254 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6254 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6254 * ******************************************************************************** #SCN = SW0J311 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6254 #NEWVERSION = 6255 #ADD 07850$0E ! 07OCT2015 wielerk ! Symptom: Interface does not correctly identify a duplicate 0120 ! AFD advice. ! Problem: The PSTM.TRAN^CDE.TC is set to "10" ( purchase ) when ! formatting the 0120 AFD advice. This does not allow ! duplicate checking to work correctly when the process ! is receiving 0120 AFD advices along with stand-in 0120 ! AFD advices. ! Fix: The interface was modified to set PSTM.TRAN^CDE.TC to ! "11" ( pre-auth ) when processing an AFD 0120. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2108321. #REPLACE 17709 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN int .pbit^map := wordaddr( @sem.pbit^map ); #ADD 17849V00 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if ( sem.typ = sem^auth^request^d or ( sem.typ = sem^auth^advice^d and advice^cde^bit^d and sem.advice^cde.reason^cde <> "190" and sem.advice^cde.reason^cde <> "191" ) and #DELETE 17849V01 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #REPLACE 17849V05 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) ) then #DELETE 17849V06 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0J311 !#CMP2.28 11/05/15 BNETLIBS6255 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6255 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6255 * ******************************************************************************** #SCN = SW0J354 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6255 #NEWVERSION = 6256 #ADD 07850%0E ! 05NOV2015 wielerk ! Symptom: Interface does not correctly expand DE-48.SE-37 ( addl ! data.addl merch data ). ! Problem: The interface assumes that the subfield tags are passed ! in ascending order, so when the order is different not ! all tags are expanded. This causes 2 of the subfields to ! not be present for token population. ! Fix: The interface was modified to loop through the SEs that ! contain multiple subtags when expanding. ! Procs modified: util^expand^sem ! util^frmt^addl^data^to^xresp ! Sub Proc added: util^expand^sem.sub^move^subfield ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2137488. #REPLACE 27672k02 UTIL^EXPAND^SEM int loop^lgth := 0; #REPLACE 27686 /27686 OFFSET 0 UTIL^EXPAND^SEM ?page "subproc sub^move^subfield" !################################################################# !# This subprocedure moves subtag data for data elements that # !# contain multiple subtags that can occur in any order. # !# # !# INPUT PARAMETERS: n/a # !# OUTPUT PARAMETERS: # !# sub^field - the sem field destination # !# RETURN: n/a # !# # !################################################################# subproc sub^move^subfield( sub^field ); string .sub^field; begin call ascii^integer( sub^ptr[ 2 ], 2, sub^lgth ); movl( sub^field, sub^ptr, ( sub^lgth + 4 ) ); @sub^ptr := @sub^ptr[ sub^lgth '+' 4 ]; loop^lgth := loop^lgth + ( sub^lgth + 4 ); end; ! of subproc sub^move^subfield ?page "util^expand^sem" !***************************************************************** !# # !# This is the main body of PROC util^expand^sem # !# # !***************************************************************** #ADD 28022X0C UTIL^EXPAND^SEM loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Remote Payments ! Program Type Identifier ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnts^pgm^typ^ind.tag ); end ! subfield 01 ! else ! ! Move Subfield 2 - Mobile Remote ! Payment Transaction Type ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. mobile^pgm^inds^sub^fld^48. remt^pmnt^txn^typ.tag ); end ! subfield 02 ! else ! ! Move Subfield 3 - Mobile Phone Num ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. mobile^pgm^inds^sub^fld^48. mobile^phn^num.tag ); end ! subfield 03 ! else ! ! Move Subfield 4 - Convenience Fee ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. mobile^pgm^inds^sub^fld^48. convenience^fee.tag ); end ! subfield 04 ! else ! ! bad data, clear sem de-48.se-48, ! end loop ! begin init( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48, " ", $len( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48 )); loop^lgth := tag^length; end; end; ! of loop #DELETE 28022X0D/28022k0p UTIL^EXPAND^SEM #ADD 28137 UTIL^EXPAND^SEM loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Fraud Score ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. fraud^scoring^data^sub^fld^75. fraud^score.tag ); end ! subfield 01 ! else ! ! Move Subfield 2 - Score Reason Code ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. fraud^scoring^data^sub^fld^75. score^rsn^cde.tag ); end ! subfield 02 ! else ! ! Move Subfield 3 - Rule Adj. Score ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. fraud^scoring^data^sub^fld^75. rule^adj^score.tag ); end ! subfield 03 ! else ! ! Move Subfield 4 - Rule Reason Code 1 ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^1.tag ); end ! subfield 04 ! else ! ! Move Subfield 5 - Rule Reason Code 2 ! if sub^ptr = "05" then begin call sub^move^subfield( sem^ptr. addl^data.info. fraud^scoring^data^sub^fld^75. rule^rsn^cde^2.tag ); end ! subfield 05 ! else ! ! bad data, clear sem de-48.se-75, ! end loop ! begin init( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75, " ", $len( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75 )); loop^lgth := tag^length; end; end; ! of loop #DELETE 28138 /28221 UTIL^EXPAND^SEM #ADD 28438 UTIL^EXPAND^SEM loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1-Account Number Ind ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag ); end else ! ! Move Subfield 2-Account Number ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag ); end else ! ! Move Subfield 3-Expiration Date ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag ); end else ! ! Move Subfield 4-Product Code ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. prod^cde.tag ); end else ! ! Move Subfield 5-Token Assurance ! Level ! if sub^ptr = "05" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag ); end else ! ! Move Subfield 6-Token Requestor Id ! if sub^ptr = "06" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag ); end else ! ! Move Subfield 7-PAN Account Range ! if sub^ptr = "07" then begin call sub^move^subfield( sem^ptr. addl^data.info. paypass^mapping^sub^fld^33. pan^acct^range.tag ); end else ! ! bad data, clear sem de-48.se-33, ! end loop ! begin init( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33, " ", $len( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33 )); loop^lgth := tag^length; end; end; ! of loop #DELETE 28439 /28512k0s UTIL^EXPAND^SEM #ADD 28515v0D UTIL^EXPAND^SEM loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Payment ! Facilitator ID ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag ); end else ! ! Move Subfield 2 - Independent Sales ! Organization ID ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag ); end else ! ! Move Subfield 3 - Sub-Merchant ID ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.tag ); end else ! ! bad data, clear sem de-48.se-37, ! end loop ! begin init( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37, " ", $len( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37 ) ); loop^lgth := tag^length; end; end; #DELETE 28515v0E/28515v19 UTIL^EXPAND^SEM #ADD 28962 UTIL^FRMT^ADDL^DATA^TO^XRESP if sem.addl^data.info.paypass^mapping^sub^fld^33.tag = "33" and sem.addl^data.info.paypass^mapping^sub^fld^33.acct^num^ind. tag^data = "E" then #DELETE 28963 UTIL^FRMT^ADDL^DATA^TO^XRESP #ENDSCN = SW0J354 !#CMP2.28 02/18/16 BNETDDLS6053 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6053 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6053 * ******************************************************************************** #SCN = SW0K050 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6053 #NEWVERSION = 6054 #ADD 00262#0Q * 18FEB2016 bensone * Symptom: Banknet Release 16.Q2 Functional Enhancements * Problem: None * Fix: Global 515-Installment Payment Processing * Increase the length of the INFO field for DE 112 from * 233 to 779 bytes. * Add redefinition MCINST to support SE 021, 022, 023 * in DE 112. * Add definition for DE 123, Receipt Free Text * Global 525-Introducing Transaction Integrity * Classification * Add definition for DE 48 SE 52. * Add 61 bytes to the DE 48 user field for future * expansion. * Add new field TXN-INTGTY-CLAS to the Switch token. * Global 576-Introduction of MoneySend Specific Data * Increase the length of the INFO field for DE 108 from * 500 to 999 bytes. * Global 580-MasterCard Digital Enablement Service * Dynamic Magnetic Stripe Data * Add definition for DE 48 SE 49. * Global 582-MasterCard Digital Enablement Service Data * Enhancements * Add definition for DE 48 SE 33 subfield 8. * AP 110-DE 112 Update to Support Japan National Data * Add redefinition JP to support SE 030 and 031 * in DE 112. * Removal of EMV Data from the Interchange Log File * Remove field END-OF-MAND-ILF-FLDS from the SEM. * Remove EMV-DATA.INFO.PAN-SEQ-NO from DE 55. * Remove EMV-DATA.USER-FLD from DE 55. * Remove field END-OF-OPT-ILF-FLDS from the SEM. * Miscellaneous Cases (#02136482, #02149281) * Increase the external message in the suspense record * to 6K from 4K. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * BP60AFT: RQNNFS, SVNNFS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Run Make. * Replace file: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0216M, ILB0216R, ILB0216S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0216M. Run the ILF conversion using ILB0216R. * Reference: WO #008239 #ADD 01157w0i SEM 08 storage-technology. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). #ADD 01157#0X SEM * * Time Validation Information * Subfield tag = 49 * Contains the Time Validation Information * 06 tim-valid-info-sub-fld-49. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(15). * * Transaction Integrity Class * Subfield tag = 52 * Contains the Transaction Integrity Class * 06 txn-intgty-clas-sub-fld-52. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 04 user-fld pic x(66). #DELETE 01157z18 SEM #ADD 01411b00 SEM ********************************************************************** * * * THESE FIELDS WILL NOT BE LOGGED TO THE ILF * * * ********************************************************************** #DELETE 01411b01/01411b06 SEM #DELETE 01411b87/01411b8G SEM #DELETE 01411b8g/01411b8n SEM #ADD 01411#09 SEM 04 info pic x(999). #DELETE 01411#0A SEM #ADD 01411#0C SEM 04 info pic x(779). #DELETE 01411#0D SEM #ADD 01411#0F SEM 06 user-fld-aci pic x(734). #DELETE 01411#0G SEM #REPLACE 01411#0J SEM 06 user-fld-aci pic x(714). #ADD 01411#0W SEM 06 user-fld-aci pic x(603). #DELETE 01411#0X SEM #ADD 01411#0Y SEM 04 mcinst redefines info. 06 sub-fld-21. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-typ pic x(2). 10 pmnt-opt pic x(1). 06 sub-fld-22. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data occurs 12 times. 10 num-instl pic x(2). 10 intrst-rat pic x(5). 10 instl-fee pic x(12). 10 annual-pctg-rat pic x(5). 10 first-instl-amt pic x(12). 10 instl-amt pic x(12). 10 ttl-amt-due pic x(12). 06 sub-fld-23. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 min-num-instl pic x(2). 10 max-num-instl pic x(2). 10 intrst-rat pic x(5). 10 instl-fee pic x(12). 10 annual-pctg-rat pic x(5). 10 ttl-amt-due pic x(12). 04 jp redefines info. 06 sub-fld-30. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 term-id pic x(13). 10 jis-ii pic x(69). 10 prod-cde pic x(7). 10 card-cat pic x(1). 06 sub-fld-31. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 err-cde pic x(3). 06 user-fld-aci pic x(674). #ADD 01411bA8 SEM * * Receipt Free Text * bit map position = 123 * EBCDIC in transmission, variable in length * Used by issuers to provide receipt data to acquirers * lgth: number of bytes contained in the INFO field * info: receipt data 02 rcpt-free-txt. 04 lgth pic 999. 04 info pic x(512). #ADD 02719x00 SAF-BNET 02 extrn-msg type binary 16 occurs 3000 times. #DELETE 02719x01 SAF-BNET #ADD 02760z0A SAF-BNET 02 txn-intgty-clas pic x(2). #ENDSCN = SW0K050 !#CMP2.28 02/18/16 BNETG 6096 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6096 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6096 * ******************************************************************************** #SCN = SW0K051 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K000260J ! 18FEB2016 bensone ! Symptom: Banknet Release 16.Q2 Functional Enhancements ! Problem: None ! Fix: Global 512-Support of Revised Standards for Processing ! Authorizations and Preauthorizations ! Add define SEM^INCR^AUTH^D that identifies an ! incremental authorization from Banknet. ! Global 515-Installment Payment Processing ! Source in INSTL^RESP^DATA^TKN and RCPT^DATA^TKN. ! Add define SEM^MC^INSTL^TXN^D that identifies a ! transaction from Banknet that could be processed as a ! MasterCard installment. ! Add a define RCPT^FREE^TXT^BIT^D to identify the bit ! setting for DE 123. ! Add entry to SEM^BIT^MAP^TBL^G to support DE 123 in ! authorization messages. ! Global 575-MoneySend for Small Business Commercial Cards ! Modify define SEM^MONEYSEND^TXN^IND^D to identify ! MoneySend transaction type indicators to include a ! check for a value of "C57". ! AP 110-DE 112 Update to Support Japan National Data ! Source in INTRA^CNTRY^DATA^TKN ! Miscellaneous Cases (#02136482, #02149281) ! Add new literals to identify external message fields ! for error reporting. ! Add BITTRACE text command ! Add literal BIT^MSG^TYP^L to identify the message type ! field in an external message. ! Add global BIT^TRACE^G to identify whether the ! BITTRACE facility is on or off. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! BP60AFT: RQNNFS, SVNNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0216M, ILB0216R, ILB0216S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0216M. Run the ILF conversion using ILB0216R. ! Reference: WO #008239 #ADD K000260K ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? cntctlss^txn^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? instl^resp^data^tkn ? intra^cntry^data^tkn ? iss^tknztn^data^tkn ? language^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^addl^data^tkn ? p2p^rcv^data^tkn ? p2p^sender^data^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? rcpt^data^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE K000260L/K000260L OFFSET 41 #ADD 0002620k ! instl^resp^data^tkn ! intra^cntry^data^tkn #ADD 0002620r ! rcpt^data^tkn #ADD 0023370Y define sem^incr^auth^d( x ) = ( x.proc^cde.byte[ 0 ] = sem^purchase^d and x.ntl^pos^data.cond^cde.byte[ 3 ] <> "4" and x.ntl^pos^data.cond^cde.byte[ 6 ] = "4" and x.addl^data.info.trc^id^sub^fld^63.tag = "63" )#; #ADD H002330D x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C57" or #ADD K0023305 define sem^mc^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "MCINST" ) )#; #ADD 00245|02 literal proc^cde^field^l = 3; literal trans^amt^field^l = 4; literal merch^typ^field^l = 18; literal pos^entry^field^l = 22; literal trans^fee^field^l = 28; literal track1^data^field^l = 45; literal addl^data^field^l = 48; literal trans^crncy^field^l = 49; literal pin^data^field^l = 52; literal addl^amts^field^l = 54; literal emv^data^field^l = 55; literal pos^data^field^l = 61; #DELETE 00245v0E #ADD 00340 literal bit^msg^typ^l = -1; #ADD I0043502 int bit^trace^g; #ADD 00615G01 rcpt^free^txt^bit^d = sbit^map[3].<10> #, !bit 123 #ADD 01059 123, 3, sem^field( rcpt^free^txt ), #DELETE 01060 /01060Z00 #ENDSCN = SW0K051 !#CMP2.28 02/18/16 BNETLIBS6256 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6256 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6256 * ******************************************************************************** #SCN = SW0K053 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6256 #NEWVERSION = 6257 #ADD 07850&0F ! 18FEB2016 bensone ! Symptom: Banknet Release 16.Q2 Functional Enhancements ! Problem: None ! Fix: Global 512-Support of Revised Standards for Processing ! Authorizations and Preauthorizations ! As acquirer, support the new Authorization Chargeback ! Protection Period Extension request in 0100 messages ! sent outbound to the network. ! As issuer, support the new Authorization Chargeback ! Protection Period Extension request in 0100 messages ! received inbound from the network. ! Global 515-Installment Payment Processing ! Support new value "MCINST" in DE 48 SE 95. ! Support new SEs 021, 022 and 023 in DE 112. ! Global 525-Introducing Transaction Integrity ! Classification ! Support new DE 48 SE 52. ! Map DE 48 SE 52 to new field TXN-INTGTY-CLAS in the ! Switch token. ! Global 576-Introduction of MoneySend Specific Data ! Support the new DE 108 subfields using SI, SJ and SK ! tokens. ! Global 580-MasterCard Digital Enablement Service ! Dynamic Magnetic Stripe Data ! Support the new DE 48 SE 49 using the Issuer ! Tokenization Data token (SH). ! Global 582-MasterCard Digital Enablement Service Data ! Enhancements ! Support new DE 48 SE 33 subfield 8 in Issuer ! Tokenization Data token (SH). ! Global 586-MasterCard Digital Enablement Service Point ! of Sale Entry Mode and Card Data Input Mode ! Support new MasterCard Digital Enablement Service ! (MDES) data requirements: ! - Contactless M/Chip (DE 22 subfield 1 = "07" ! instead of "82"); ! - Contactless Magnetic Stripe (DE 22 subfield 1 = ! "91" instead of "82"); ! - DSRP containing UCAF data (DE 22 subfield 1 = "81" ! instead of "09"); ! - Dynamic Magnetic Stripe Data (DE 22 subfield 1 = ! "90" instead of "82"). ! Support new MasterCard Contactless Mapping Service ! requirements: ! - Contact M/Chip (DE 22 subfield 1 = "05" ! instead of "06"); ! - Contactless M/Chip (DE 22 subfield 1 = "07" ! instead of "08"); ! - Contactless Magnetic Stripe (DE 22 subfield 1 = ! "91" instead of "92"). ! AP 110-DE 112 Update to Support Japan National Data ! Support new SEs 030 and 031 in DE 112 using Intra ! Country Data token (S0). ! Removal of EMV Data from the Interchange Log File ! No longer log the contents of DE 55 to the ILF. ! Miscellaneous Cases (#02136482, #02149281) ! Change SEM structures that use MSG^DEF are changed to ! use SEM^DEF to ensure that a SEM structure of more ! than 4K bytes can be processed successfully. ! Identify the field in error when an acquired POS ! transaction is declined with a format error, and then ! output an appropriate EMS message. Add new subproc ! sub^log^error to procedure pstm^frmt^0200^to^xrqst. ! Add BITTRACE text command ! Add a new BITTRACE ON/OFF text command. ! Output an EMS message diplaying the data for each data ! element in the bitmap when the bittrace is on. ! New subproc trace^admin in proc util^collapse^admin. ! New subproc trace^frqst in proc util^collapse^frqst. ! New subproc trace^nmm in proc util^collapse^nmm. ! New subproc trace^sem in proc util^collapse^sem. ! New subproc trace^admin in proc util^expand^admin. ! New subproc trace^frqst in proc util^expand^frqst. ! New subproc trace^nmm in proc util^expand^nmm. ! New subproc trace^sem in proc util^expand^sem. ! Proc added: sem^frmt^natl^data^to^pstm ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^instl^pmnt^to^pstm ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^pstm^0420 ! util^add^moneysend^tkns ! util^collapse^admin ! util^collapse^frqst ! util^collapse^nmm ! util^collapse^sem ! util^expand^admin ! util^expand^frqst ! util^expand^nmm ! util^expand^sem ! util^ilf^add ! util^sdf^send ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! BP60AFT: RQNNFS, SVNNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0216M, ILB0216R, ILB0216S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0216M. Run the ILF conversion using ILB0216R. ! Reference: WO #008239 #ADD 08711 PSTM^FRMT^0200^TO^XRQST wlform( err^1, "Unable to format external \\\\ message due to invalid " ',' "data in field \\\, PAN: \?, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^2, "Unable to format external \\\\ message due to " ',' "inconsistent data in fields \\\ and \\\," ',' " PAN: \?, SEQ NUM: \\\\\\\\\\\\" ) #ADD 08813 PSTM^FRMT^0200^TO^XRQST ?page "subproc sub^log^error of pstm^frmt^0200^to^xrqst" !################################################################# !# # !# sub^log^error # !# # !# This subprocedure is called when a format error is detected. # !# The subprocedure will format up to two integers into # !# the ascii representation of the field in error or question. # !# An appropriate EMS messaage is displayed to allow the # !# customer to research the field or fields in question. # !# # !# INPUT PARAMETERS: # !# err^fld1 - Field 1 in error # !# err^fld2 - Field 2 in error # !# # !# OUTPUT PARAMETERS: # !# # !# RETURNS: - resp^format^error^pos^l # !# # !################################################################# int subproc sub^log^error( err^fld1, err^fld2 ); int err^fld1; int err^fld2; begin string err^fld1^s[ 0:2 ] := [ 3 * [" "] ]; string err^fld2^s[ 0:2 ] := [ 3 * [" "] ]; call integer^ascii( err^fld1^s, $occurs( err^fld1^s ), err^fld1 ); if err^fld2 <> 0 then begin call integer^ascii( err^fld2^s, $occurs( err^fld2^s ), err^fld2 ); call log^message^( 1578, ! routing code !, @err^2, net.myname, evt^msg^severity^info^l, @sem.typ, @err^fld1^s, @err^fld2^s, @pan, panlgth, @pstm.seq^num ); end ! of if err^fld2 <> 0 else begin call log^message^( 1577, ! routing code !, @err^1, net.myname, evt^msg^severity^info^l, @sem.typ, @err^fld1^s, @pan, panlgth, @pstm.seq^num ); end; ! of if err^fld2 = 0 return resp^format^error^pos^l; end; ! of subproc sub^log^error ?page "pstm^frmt^0200^to^xrqst" !################################################################# !# # !# This is the main body of PROC pstm^frmt^0200^to^xrqst # !# # !################################################################# #ADD 08979 PSTM^FRMT^0200^TO^XRQST begin if addl^amt^bit^d then begin return sub^log^error( addl^amts^field^l, 0 ); end else begin return sub^log^error( trans^amt^field^l, 0 ); end; end; #DELETE 08980 PSTM^FRMT^0200^TO^XRQST #ADD 08985 PSTM^FRMT^0200^TO^XRQST return sub^log^error( trans^fee^field^l, 0 ); #DELETE 08986 PSTM^FRMT^0200^TO^XRQST #ADD 09116 PSTM^FRMT^0200^TO^XRQST begin return sub^log^error( track1^data^field^l, 0 ); end; #DELETE 09117 PSTM^FRMT^0200^TO^XRQST #ADD 09239 PSTM^FRMT^0200^TO^XRQST return sub^log^error( proc^cde^field^l, pos^entry^field^l ); #DELETE 09240 PSTM^FRMT^0200^TO^XRQST #ADD 09244 PSTM^FRMT^0200^TO^XRQST begin return sub^log^error( addl^data^field^l, 0 ); end; #DELETE 09245 PSTM^FRMT^0200^TO^XRQST #ADD 09267 PSTM^FRMT^0200^TO^XRQST return sub^log^error( addl^data^field^l, 0 ); #DELETE 09268 PSTM^FRMT^0200^TO^XRQST #ADD 09296 PSTM^FRMT^0200^TO^XRQST return sub^log^error( proc^cde^field^l, merch^typ^field^l ); #DELETE 09297 PSTM^FRMT^0200^TO^XRQST #ADD 09306 PSTM^FRMT^0200^TO^XRQST return sub^log^error( merch^typ^field^l, pos^entry^field^l ); #DELETE 09307 PSTM^FRMT^0200^TO^XRQST #ADD 09313 PSTM^FRMT^0200^TO^XRQST return sub^log^error( merch^typ^field^l, pin^data^field^l ); #DELETE 09314 PSTM^FRMT^0200^TO^XRQST #ADD 09684 PSTM^FRMT^0200^TO^XRQST return sub^log^error( trans^crncy^field^l, 0 ); #DELETE 09685 PSTM^FRMT^0200^TO^XRQST #ADD 09707#00 PSTM^FRMT^0200^TO^XRQST sem.typ = sem^auth^request^d and #DELETE 09707#01 PSTM^FRMT^0200^TO^XRQST #ADD 09707M05 PSTM^FRMT^0200^TO^XRQST if sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin ! Auth chargeback protection period extension request movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "4" ); end else begin ! Account status inquiry transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "8" ); end; #DELETE 09707M06/09707M07 PSTM^FRMT^0200^TO^XRQST #ADD 09708M0v PSTM^FRMT^0200^TO^XRQST return sub^log^error( trans^crncy^field^l, 0 ); #DELETE 09708M0w PSTM^FRMT^0200^TO^XRQST #ADD 09715 PSTM^FRMT^0200^TO^XRQST return sub^log^error( addl^data^field^l, pos^data^field^l ); #DELETE 09716 PSTM^FRMT^0200^TO^XRQST #ADD 09729 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^entry^field^l, addl^data^field^l ); #DELETE 09730 PSTM^FRMT^0200^TO^XRQST #ADD 09739 PSTM^FRMT^0200^TO^XRQST return sub^log^error( addl^data^field^l, pos^data^field^l ); #DELETE 09740 PSTM^FRMT^0200^TO^XRQST #ADD 09744 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^entry^field^l, addl^data^field^l ); #DELETE 09745 PSTM^FRMT^0200^TO^XRQST #ADD 09791 PSTM^FRMT^0200^TO^XRQST if response = resp^format^error^pos^l then begin return sub^log^error( emv^data^field^l, 0 ); end; #ADD 09834 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^entry^field^l, pin^data^field^l ); #DELETE 09835 PSTM^FRMT^0200^TO^XRQST #ADD 09890 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pin^data^field^l, 0 ); #DELETE 09891 PSTM^FRMT^0200^TO^XRQST #ADD 09976 PSTM^FRMT^0200^TO^XRQST return sub^log^error( merch^typ^field^l, pos^data^field^l ); #DELETE 09977 PSTM^FRMT^0200^TO^XRQST #ADD 09989 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^data^field^l, 0 ); #DELETE 09990 PSTM^FRMT^0200^TO^XRQST #ADD 10003 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^data^field^l, 0 ); #DELETE 10004 PSTM^FRMT^0200^TO^XRQST #ADD 10015 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^entry^field^l, pos^data^field^l ); #DELETE 10016 PSTM^FRMT^0200^TO^XRQST #ADD 10067 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^data^field^l, 0 ); #DELETE 10068 PSTM^FRMT^0200^TO^XRQST #ADD 10112 PSTM^FRMT^0200^TO^XRQST return sub^log^error( pos^data^field^l, 0 ); #DELETE 10113 PSTM^FRMT^0200^TO^XRQST #ADD 10194X00 PSTM^FRMT^0200^TO^XRQST if ( bnet^g.sppt^instl^txn^g = 1 or bnet^g.sppt^instl^txn^g = 3 ) and sem.typ = sem^auth^request^d and sem.proc^cde.byte[ 0 ] = sem^purchase^d and found^pos^data1^tkn and pos^data1^tkn.pmnt^plan = "MCI" then begin movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag^data, "MCINST" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); addl^data^bit^d := 1; end else #ADD 10267 PSTM^FRMT^0210^TO^XRESP int .instl^resp^data^tkn( instl^resp^data^tkn^def ); int instl^resp^data^tkn^lgth := 0; #ADD 10446a01 PSTM^FRMT^0210^TO^XRESP not sem^mc^instl^txn^d( sem ) and not sem^hgm^instl^txn^d( sem ) and sem.ntl^pos^data.cntry^cde <> "392" then #DELETE 10446a02 PSTM^FRMT^0210^TO^XRESP #ADD 10446a03 PSTM^FRMT^0210^TO^XRESP ! ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece and ! High Growth Markets, general MasterCard installments ! and domestic Japanese transactions. ! #DELETE 10446a04/10446a08 PSTM^FRMT^0210^TO^XRESP #ADD 10908 PSTM^FRMT^0210^TO^XRESP else #DELETE 10909 PSTM^FRMT^0210^TO^XRESP #ADD 11074 PSTM^FRMT^0210^TO^XRESP if base24^rel^g >= 5 and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem^mc^instl^txn^d( sem ) then begin ! ! MasterCard installment payment ! if pos^approved^d( pstm ) then begin tkn^id ':=' instl^resp^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @instl^resp^data^tkn, instl^resp^data^tkn^lgth ) then begin movd( sem.adnl^data^natl.mcinst.sub^fld^21.tag, "21" ); movd( sem.adnl^data^natl.mcinst.sub^fld^21.lgth, "003" ); move( sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. instl^typ, instl^resp^data^tkn.mc^instl^resp^data. instl^plan^typ ); move( sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. pmnt^opt, instl^resp^data^tkn.mc^instl^resp^data. pmnt^opt ); if instl^resp^data^tkn.mc^instl^resp^data. instl^opt = "1" and sem.adnl^data^natl.mcinst.sub^fld^22. tag <> "022" then begin ! ! Installment Plan Option ("1") is ! varying number of payments only ! movd( sem.adnl^data^natl.mcinst.sub^fld^23.tag, "23" ); movd( sem.adnl^data^natl.mcinst.sub^fld^23.lgth, "038" ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.min^num^instl, instl^resp^data^tkn.mc^instl^resp^data. min^num^instl ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.max^num^instl, instl^resp^data^tkn.mc^instl^resp^data. max^num^instl ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.intrst^rat, instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].intrst^rat ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.instl^fee, instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].instl^fee ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.annual^pctg^rat, instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].annual^pctg^rat ); move( sem.adnl^data^natl.mcinst.sub^fld^23. tag^data.ttl^amt^due, instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].ttl^amt^due ); end ! of if instl^opt = "1" else if instl^resp^data^tkn.mc^instl^resp^data. instl^opt = "0" and sem.adnl^data^natl.mcinst.sub^fld^23. tag <> "023" then begin ! ! Installment Plan Option ("0") is ! varying payment amounts and/or number of payments ! movd( sem.adnl^data^natl.mcinst.sub^fld^22.tag, "22" ); call ascii^integer^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^spcf, cnt ); lgth := cnt * $len( sem.adnl^data^natl.mcinst. sub^fld^22.tag^data ); call integer^ascii^( sem.adnl^data^natl.mcinst. sub^fld^22.lgth, lgth ); idx := 0; while idx < cnt do begin move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].intrst^rat, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].intrst^rat ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].instl^fee, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].instl^fee ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].annual^pctg^rat, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].annual^pctg^rat ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].ttl^amt^due, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].ttl^amt^due ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].first^instl^amt, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].first^instl^amt ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].instl^amt, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].instl^amt ); move( sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].num^instl, instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].num^instl ); idx := idx + 1; end; ! of while idx < cnt end; ! of if instl^opt = "0" end ! of if hiswtkn^get^tkn else begin movd( sem.adnl^data^natl.mcinst.sub^fld^21.tag, "21" ); movd( sem.adnl^data^natl.mcinst.sub^fld^21.lgth, "003" ); movd( sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. instl^typ, "20" ); movd( sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. pmnt^opt, "F" ); end; ! of <> hiswtkn^get^tkn adnl^data^ntl^bit^d := 1; lgth := 0; if sem.adnl^data^natl.mcinst.sub^fld^21.tag = "021" then begin call ascii^integer^( sem.adnl^data^natl.mcinst. sub^fld^21.lgth, de^lgth ); lgth := lgth + de^lgth + 6; end; if sem.adnl^data^natl.mcinst.sub^fld^22.tag = "022" then begin call ascii^integer^( sem.adnl^data^natl.mcinst. sub^fld^22.lgth, de^lgth ); lgth := lgth + de^lgth + 6; end; if sem.adnl^data^natl.mcinst.sub^fld^23.tag = "023" then begin call ascii^integer^( sem.adnl^data^natl.mcinst. sub^fld^23.lgth, de^lgth ); lgth := lgth + de^lgth + 6; end; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end ! of if pos^approved^d else begin adnl^data^ntl^bit^d := 0; end; ! of <> pos^approved^d end; ! of sem^mc^instl^txn^d #ADD 11549 PSTM^FRMT^0420^TO^ACQ^XRVSL if base24^rel^g >= 5 then begin tkn^id ':=' pos^data1^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, pos^data1^tkn^lgth ) then begin pos^data1^tkn^found := true; end; end; ! of if bas24^rel^g #ADD 11549s00 PSTM^FRMT^0420^TO^ACQ^XRVSL if pos^data1^tkn^found and pos^data1^tkn.pmnt^plan = "MCI" then begin adnl^data^ntl^bit^d := 0; end else #DELETE 11588 /11600 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 15566 SEM^FRMT^AMT^TO^PSTM^AMT if sem.typ = sem^auth^request^d and sem^incr^auth^d( sem ) and not sem^fncl^txn^d( sem ) then begin set ( pstm.tran.amt^1, 0f ); return true; end; #ADD 17092X0V SEM^FRMT^INSTL^PMNT^TO^PSTM "NO ROOM TO ADD TOKEN \\, PAN: \?, " ',' "SEQ NUM: \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " #DELETE 17092X0W/17092X0X SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X0d SEM^FRMT^INSTL^PMNT^TO^PSTM "UNABLE TO ADD TOKEN \\, PAN: \?," ',' " SEQ NUM: \\\\\\\\\\\\, ERR: # ") wlform( errupdt^tkn, "UNABLE TO UPDATE TOKEN \\, PAN: \?, " ',' "SEQ NUM: \\\\\\\\\\\\, ERR: # ") #DELETE 17092X0e/17092X0f SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X0i SEM^FRMT^INSTL^PMNT^TO^PSTM struct .instl^resp^data^tkn( instl^resp^data^tkn^def ); #ADD 17092X0j SEM^FRMT^INSTL^PMNT^TO^PSTM int cnt := 0; int datalgth := 0; #ADD 17092X0k SEM^FRMT^INSTL^PMNT^TO^PSTM int evt^pan^lgth := 0; int found^instl^resp^data^tkn := false; #DELETE 17092X0s SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X0v SEM^FRMT^INSTL^PMNT^TO^PSTM int tkn^add^lgth := 0; int tkn^lgth := 0; #ADD 17092X0z SEM^FRMT^INSTL^PMNT^TO^PSTM string .pan[ 0:18 ] := [ 19 * [" "] ]; #ADD 17092#00 SEM^FRMT^INSTL^PMNT^TO^PSTM ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); if sem^mc^instl^txn^d( sem ) then begin ! ! MasterCard installment transaction ! if sem.adnl^data^natl.mcinst.sub^fld^21.tag = "021" then begin ! ! Add the Installment Response Data Token ("FD") ! tkn^id ':=' instl^resp^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^resp^data^tkn ); move( instl^resp^data^tkn.mc^instl^resp^data. instl^plan^typ, sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. instl^typ ); move( instl^resp^data^tkn.mc^instl^resp^data. pmnt^opt, sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. pmnt^opt ); if sem.adnl^data^natl.mcinst.sub^fld^23.tag = "023" then begin movd( instl^resp^data^tkn.mc^instl^resp^data. instl^opt, "1" ); move( instl^resp^data^tkn.mc^instl^resp^data. min^num^instl, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. min^num^instl ); move( instl^resp^data^tkn.mc^instl^resp^data. max^num^instl, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. max^num^instl ); movd( instl^resp^data^tkn.mc^instl^resp^data. num^opts^spcf, "01" ); movd( instl^resp^data^tkn.mc^instl^resp^data. num^opts^avail, "12" ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].intrst^rat, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. intrst^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].instl^fee, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. instl^fee ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].annual^pctg^rat, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. annual^pctg^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].ttl^amt^due, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. ttl^amt^due ); end ! of if mcinst.sub^fld^23.tag = "023" else begin movd( instl^resp^data^tkn.mc^instl^resp^data. instl^opt, "0" ); call ascii^integer^( sem.adnl^data^natl.mcinst. sub^fld^22.lgth, lgth ); cnt := lgth / 60; call integer^ascii^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^spcf, cnt ); movd( instl^resp^data^tkn.mc^instl^resp^data. num^opts^avail, "12" ); i := 0; while i < cnt do begin move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].intrst^rat, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].intrst^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].instl^fee, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].instl^fee ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].annual^pctg^rat, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].annual^pctg^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].ttl^amt^due, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].ttl^amt^due ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].first^instl^amt, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].first^instl^amt ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].instl^amt, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].instl^amt ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ i ].num^instl, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ i ].num^instl ); i := i + 1; end; ! of while i < cnt end; ! of else mcinst.sub^fld^23.tag = "023" movd( instl^resp^data^tkn.frmt^cde, "01" ); call ascii^integer^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^avail, cnt ); datalgth := $len( instl^resp^data^tkn. mc^instl^resp^data.option ) * cnt; lgth := $len( instl^resp^data^tkn. mc^instl^resp^data.option ) * $occurs( instl^resp^data^tkn. mc^instl^resp^data.option ); lgth := $len( instl^resp^data^tkn. mc^instl^resp^data ) - lgth + datalgth; instl^resp^data^tkn.lgth := lgth; tkn^add^lgth := lgth + 4; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! found^instl^resp^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1771, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^instl^resp^data^tkn then begin call log^message^( 1772, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1772 ); end else begin call log^message^( 1773, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1773 ); end; end; ! of if tkn^result ("FD") end; ! of if adnl^data^natl.mcinst.sub^fld^21.tag = "021" return true; end ! of if sem^mc^instl^txn^d else #ADD 17092#1n SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092#1o SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092#20 SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092#21 SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092#2G SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092#2H/17092#2I SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X2j SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X2k SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X2w SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X2x SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X3C SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X3D/17092X3E SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X4L SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X4M SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X4Y SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X4Z SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X4o SEM^FRMT^INSTL^PMNT^TO^PSTM @pan, evt^pan^lgth, #DELETE 17092X4p/17092X4q SEM^FRMT^INSTL^PMNT^TO^PSTM #ADD 17092X50 SEM^FRMT^INSTL^PMNT^TO^PSTM ?section sem^frmt^natl^data^to^pstm ?page "sem^frmt^natl^data^to^pstm" !#####################################################################! !# #! !# sem^frmt^natl^data^to^pstm #! !# #! !# This proc formats Intra Country data for domestic transactions. #! !# National Additional Data from SEM DE 112 is mapped to the #! !# Intra Country Data Token ("S0") as required. #! !# #! !# INPUT PARAMETERS: #! !# PSTM - Pointer to BASE24 internal POS message #! !# SEM - Pointer to Banknet external message #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# TRUE - Always returns true #! !# #! !#####################################################################! int proc sem^frmt^natl^data^to^pstm( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin wlform( no^room, "NO ROOM TO ADD TOKEN: \\, PAN : \?, " ','"SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ " ) wlform( erradd^tkn, "UNABLE TO ADD TOKEN: \\, PAN : \?," ','" SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\," ','" SETL DATE: \\\\ ERR: # " ) wlform( errupdt^tkn, "UNABLE TO UPDATE TOKEN: \\, PAN : \?, " ','"SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ ERR: # " ) struct .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int evt^pan^lgth := 0; int fnd^intra^cntry^data^tkn := false; int ofst; int pos^userdata; int tkn^add^lgth := 0; int tkn^lgth; int tkn^result; string .pan[ 0:18 ] := [ 19 * [" "] ]; string tkn^id[ 0:1 ]; if sem.ntl^pos^data.cntry^cde <> pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) then begin ! ! If this is not a domestic transaction then return ! return true; end; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); if sem.ntl^pos^data.cntry^cde = "392" then begin ! ! Japanese domestic transaction ! tkn^id ':=' intra^cntry^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, intra^cntry^data^tkn ); move( intra^cntry^data^tkn.jp^bnet.term^id, sem.adnl^data^natl.jp.sub^fld^30.tag^data.term^id ); move( intra^cntry^data^tkn.jp^bnet.jis^ii, sem.adnl^data^natl.jp.sub^fld^30.tag^data.jis^ii ); move( intra^cntry^data^tkn.jp^bnet.prod^cde, sem.adnl^data^natl.jp.sub^fld^30.tag^data.prod^cde ); move( intra^cntry^data^tkn.jp^bnet.card^cat, sem.adnl^data^natl.jp.sub^fld^30.tag^data.card^cat ); move( intra^cntry^data^tkn.jp^bnet.err^cde, sem.adnl^data^natl.jp.sub^fld^31.tag^data.err^cde ); movd( intra^cntry^data^tkn.frmt^cde, "04" ); tkn^add^lgth := $offset( intra^cntry^data^tkn.jp^bnet. err^cde ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! ! Add the Intra Country Data Token ("S0") ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! fnd^intra^cntry^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1774, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^intra^cntry^data^tkn then begin call log^message^( 1775, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1775 ); end else begin call log^message^( 1776, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1776 ); end; end; ! of if tkn^result ("S0") return true; end; ! of if sem.ntl^pos^data.cntry^cde = "392" return true; end; ! of sem^frmt^natl^data^to^pstm #DELETE 17536#00/17536#02 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 17560#00 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = paypass^mapped^cntctlss^chip or sem.pos^entry^mde = remote^ecomm^d then #DELETE 17560#01 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 18321 SEM^FRMT^XADV^TO^SEM^XACK adnl^data^ntl^bit^d := 0; #ADD 18414G01 SEM^FRMT^XRESP^TO^PSTM^0210 "NO ROOM TO ADD TOKEN: \\, PAN : \?, " ','"SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ " ) #DELETE 18414G02/18414G03 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 18414G05 SEM^FRMT^XRESP^TO^PSTM^0210 "UNABLE TO ADD TOKEN: \\, PAN : \?," ','" SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\," ','" SETL DATE: \\\\ ERR: # " ) wlform( errupdt^tkn, "UNABLE TO UPDATE TOKEN: \\, PAN : \?, " ','"SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ ERR: # " ) #DELETE 18414G06/18414G07 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 18419 SEM^FRMT^XRESP^TO^PSTM^0210 struct .instl^resp^data^tkn( instl^resp^data^tkn^def ); #ADD 18423 SEM^FRMT^XRESP^TO^PSTM^0210 struct .rcpt^data^tkn( rcpt^data^tkn^def ); #ADD 18460 SEM^FRMT^XRESP^TO^PSTM^0210 int evt^pan^lgth := 0; #ADD 18477 SEM^FRMT^XRESP^TO^PSTM^0210 int fnd^instl^resp^data^tkn := false; int fnd^ps51^tkn := false; int fnd^rcpt^data^tkn := false; int tkn^add^lgth := 0; #ADD 18487 SEM^FRMT^XRESP^TO^PSTM^0210 string .pan[ 0:18 ] := [ 19 * [" "] ]; #ADD 18676 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); #ADD 19395G1C SEM^FRMT^XRESP^TO^PSTM^0210 @pan, evt^pan^lgth, #ADD 19395G1O SEM^FRMT^XRESP^TO^PSTM^0210 @pan, evt^pan^lgth, #DELETE 19568 /19572 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 19936 SEM^FRMT^XRESP^TO^PSTM^0210 if sem^mc^instl^txn^d( sem ) then begin ! ! MasterCard installment transaction ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.mcinst.sub^fld^21.tag = "021" and base24^rel^g >= 5 then begin ! ! Add the Installment Response Data Token ("FD") ! tkn^id ':=' instl^resp^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, instl^resp^data^tkn ); move( instl^resp^data^tkn.mc^instl^resp^data. instl^plan^typ, sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. instl^typ ); move( instl^resp^data^tkn.mc^instl^resp^data. pmnt^opt, sem.adnl^data^natl.mcinst.sub^fld^21.tag^data. pmnt^opt ); if sem.adnl^data^natl.mcinst.sub^fld^23.tag = "023" then begin movd( instl^resp^data^tkn.mc^instl^resp^data. instl^opt, "1" ); move( instl^resp^data^tkn.mc^instl^resp^data. min^num^instl, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. min^num^instl ); move( instl^resp^data^tkn.mc^instl^resp^data. max^num^instl, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. max^num^instl ); movd( instl^resp^data^tkn.mc^instl^resp^data. num^opts^spcf, "01" ); movd( instl^resp^data^tkn.mc^instl^resp^data. num^opts^avail, "01" ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].intrst^rat, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. intrst^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].instl^fee, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. instl^fee ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].annual^pctg^rat, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. annual^pctg^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ 0 ].ttl^amt^due, sem.adnl^data^natl.mcinst.sub^fld^23.tag^data. ttl^amt^due ); end ! of if mcinst.sub^fld^23.tag = "023" else if sem.adnl^data^natl.mcinst.sub^fld^22.tag = "022" then begin movd( instl^resp^data^tkn.mc^instl^resp^data. instl^opt, "0" ); call ascii^integer^( sem.adnl^data^natl.mcinst. sub^fld^22.lgth, lgth ); cnt := lgth / $len( sem.adnl^data^natl.mcinst. sub^fld^22.tag^data ); call integer^ascii^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^spcf, cnt ); call integer^ascii^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^avail, cnt ); idx := 0; while idx < cnt do begin move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].intrst^rat, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].intrst^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].instl^fee, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].instl^fee ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].annual^pctg^rat, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].annual^pctg^rat ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].ttl^amt^due, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].ttl^amt^due ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].first^instl^amt, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].first^instl^amt ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].instl^amt, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].instl^amt ); move( instl^resp^data^tkn.mc^instl^resp^data. option[ idx ].num^instl, sem.adnl^data^natl.mcinst.sub^fld^22. tag^data[ idx ].num^instl ); idx := idx + 1; end; ! of while idx < cnt end; ! of else mcinst.sub^fld^22.tag = "022" movd( instl^resp^data^tkn.frmt^cde, "01" ); call ascii^integer^( instl^resp^data^tkn. mc^instl^resp^data. num^opts^avail, cnt ); datalgth := $len( instl^resp^data^tkn. mc^instl^resp^data.option ) * cnt; lgth := $len( instl^resp^data^tkn. mc^instl^resp^data.option ) * $occurs( instl^resp^data^tkn. mc^instl^resp^data.option ); lgth := $len( instl^resp^data^tkn. mc^instl^resp^data ) - lgth + datalgth; instl^resp^data^tkn.lgth := lgth; tkn^add^lgth := lgth + 4; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! fnd^instl^resp^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, instl^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1777, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^instl^resp^data^tkn then begin call log^message^( 1778, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1778 ); end else begin call log^message^( 1779, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1779 ); end; end ! of if tkn^result ("FD") else begin if rcpt^free^txt^bit^d then begin ! ! Add Receipt Data token ("SM") ! tkn^id ':=' rcpt^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, rcpt^data^tkn ); call ascii^integer^( sem.rcpt^free^txt.lgth, lgth ); rcpt^data^tkn.lgth := lgth; movl( rcpt^data^tkn.buf, sem.rcpt^free^txt.info, lgth ); tkn^add^lgth := lgth + 2; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, rcpt^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! fnd^rcpt^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, rcpt^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1780, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else ! ! If any other token add/update error ! encountered, log a message and abend. ! if not fnd^rcpt^data^tkn then begin call log^message^( 1781, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1781 ); end else begin call log^message^( 1782, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1782 ); end; end ! of if tkn^result ("SM") end; ! of if rcpt^free^txt^bit^d end; ! of <> tkn^result ("FD") end; ! of if adnl^data^natl.mcinst.sub^fld^21.tag = "021" end ! of if sem^mc^instl^txn^d else #ADD 20026 SEM^FRMT^XRESP^TO^PSTM^0210 end ! of sem^dmstc^instl^txn^d else if adnl^data^ntl^bit^d and ( sem.adnl^data^natl.jp.sub^fld^30.tag = "030" or sem.adnl^data^natl.jp.sub^fld^31.tag = "031" ) then begin ! ! Japanese domestic transaction ! if base24^rel^g >= 5 then begin call sem^frmt^natl^data^to^pstm( pstm, sem ); end; end; ! of adnl^data^ntl^bit^d and (tag = "030" or "031") #DELETE 20027 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20603e08 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' iss^tknztn^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, iss^tknztn^data^tkn ); #ADD 21397#0Q SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.tkn^txn^id^sub^fld^30. tag = "30" or sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag = "08" or sem.addl^data.info.tim^valid^info^sub^fld^49. tag = "49" then begin ! ! Add Issuer Tokenization Data token (Token ID = "SH") ! tkn^id ':=' iss^tknztn^data^tkn^id^d; movd( iss^tknztn^data^tkn.frmt^cde, "01" ); idx := 0; if sem.addl^data.info.tkn^txn^id^sub^fld^30. tag = "30" then begin ! ! Token Transaction Id ! call ascii^integer^( sem.addl^data.info. tkn^txn^id^sub^fld^30.lgth, lgth ); lgth := lgth + 4; movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.addl^data.info.tkn^txn^id^sub^fld^30, lgth ); idx := idx + lgth; end; ! of if tkn^txn^id^sub^fld^30.tag = "30" if sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag = "08" then begin ! ! Token Storage Type ! call ascii^integer^( sem.addl^data.info. paypass^mapping^sub^fld^33. storage^technology.lgth, lgth ); lgth := lgth + 4; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag, "S8" ); movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology, lgth ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag, "08" ); idx := idx + lgth; end; ! of if storage^technology.tag = "08" if sem.addl^data.info.tim^valid^info^sub^fld^49. tag = "49" then begin ! ! Time Validation Information ! call ascii^integer^( sem.addl^data.info. tim^valid^info^sub^fld^49. lgth, lgth ); lgth := lgth + 4; movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.addl^data.info.tim^valid^info^sub^fld^49, lgth ); idx := idx + lgth; end; ! of if tim^valid^info^sub^fld^49.tag = "49" call integer^ascii^( iss^tknztn^data^tkn.lgth, idx ); tkn^add^lgth := idx + $len( iss^tknztn^data^tkn.lgth ) + $len( iss^tknztn^data^tkn.frmt^cde ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, iss^tknztn^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1783, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin ! ! If any other token add error encountered ! log a message. ! call log^message^( 1784, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1784 ); end; end; ! of if tkn^result end; ! of Add Issuer Tokenization Data token #DELETE 21397#0R/21397#2F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21468#00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^mc^instl^txn^d( sem ) then begin ! ! ! MasterCard Installment Payment allowed ! ! ! if ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem.tran^crncy^cde = sem.iss^crncy^cde for $len( sem.iss^crncy^cde ) then begin ! ! ! Add the POS Data1 Token ("CH") ! ! ! movd( pos^data1^tkn.pmnt^plan, "MCI" ); add^pos^data1 := true; if adnl^data^ntl^bit^d and sem.adnl^data^natl.mcinst.sub^fld^21.tag = "021" then begin call sem^frmt^instl^pmnt^to^pstm( pstm, sem, pos^data1^tkn ); end; end ! of Add the POS Data1 Token ("CH") end ! of if sem^mc^instl^txn^d else #ADD 21520 SEM^FRMT^XRQST^TO^PSTM^0200 end ! of if sem^dmstc^instl^txn^d else if adnl^data^ntl^bit^d and ( sem.adnl^data^natl.jp.sub^fld^30.tag = "030" or sem.adnl^data^natl.jp.sub^fld^31.tag = "031" ) then begin ! ! Japanese domestic transaction ! call sem^frmt^natl^data^to^pstm( pstm, sem ); end; ! of adnl^data^ntl^bit^d and (tag = "030" or "031") #DELETE 21521 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22247e00 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = remote^ecomm^d or sem.pos^entry^mde = elec^commerce ) and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" then #DELETE 22247e01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22247#00 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = elec^commerce or sem.pos^entry^mde = mobile^ecomm^d ) and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "F" then begin ! ! ! Non-secure transaction ! ! ! movd( ps51^tkn^data.e^com^flg, "7" ); end else #DELETE 22247#01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22441 SEM^FRMT^XRQST^TO^PSTM^0200 "A", "E", "H", "I", "N" -> #DELETE 22442 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 22496k00/22496k08 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22497X04 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "16" ) and #DELETE 22497X05 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 23355a01 SEM^FRMT^XRQST^TO^SEM^XRESP not sem^hgm^instl^txn^d( sem ) and sem.ntl^pos^data.cntry^cde <> "392" then #DELETE 23355a02 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 23355a03 SEM^FRMT^XRQST^TO^SEM^XRESP ! ! DE 112 must not be sent in the 0110 for all response ! messages except Installment Payments for Greece and ! High Growth Markets, and domestic Japanese transactions. ! #DELETE 23355a04/23355a08 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 23968#02 SEM^FRMT^XRVSL^TO^PSTM^0420 util^add^moneysend^tkns( rvsl, #DELETE 23968#03 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 23969 SEM^FRMT^XRVSL^TO^PSTM^0420 if adnl^data^ntl^bit^d and ( sem.adnl^data^natl.jp.sub^fld^30.tag = "030" or sem.adnl^data^natl.jp.sub^fld^31.tag = "031" ) then begin ! ! Japanese domestic transaction ! call sem^frmt^natl^data^to^pstm( pstm, sem ); end; ! of adnl^data^ntl^bit^d and (tag = "030" or "031") #ADD 24513#3M SUB^PROCESS^ADDL^DATA if moneysend^ref^data^d[ data^idx ] = "05" then begin call sub^mov^ext^to^tkn( p2p^addl^data^tkn.mc.txn^rsn, $len( p2p^addl^data^tkn.mc.txn^rsn ), $offset( p2p^addl^data^tkn.mc.txn^rsn ) ); end else #ADD 24513#B3 SUB^PROCESS^RCV^DATA if moneysend^ref^data^d[ data^idx ] = "12" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.id^typ, $len( p2p^rcv^data^tkn.mc.id^typ ), $offset( p2p^rcv^data^tkn.mc.id^typ ) ); end else if moneysend^ref^data^d[ data^idx ] = "13" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.id^num, $len( p2p^rcv^data^tkn.mc.id^num ), $offset( p2p^rcv^data^tkn.mc.id^num ) ); end else if moneysend^ref^data^d[ data^idx ] = "14" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.id^cntry^cde, $len( p2p^rcv^data^tkn.mc.id^cntry^cde ), $offset( p2p^rcv^data^tkn.mc. id^cntry^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "15" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.id^exp^dat, $len( p2p^rcv^data^tkn.mc.id^exp^dat ), $offset( p2p^rcv^data^tkn.mc.id^exp^dat ) ); end else if moneysend^ref^data^d[ data^idx ] = "16" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.natl^cntry^cde, $len( p2p^rcv^data^tkn.mc.natl^cntry^cde ), $offset( p2p^rcv^data^tkn.mc. natl^cntry^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "17" then begin call sub^mov^ext^to^tkn( p2p^rcv^data^tkn.mc.birth^cntry^cde, $len( p2p^rcv^data^tkn.mc.birth^cntry^cde ), $offset( p2p^rcv^data^tkn.mc. birth^cntry^cde ) ); end else #ADD 24513#FJ SUB^PROCESS^SENDER^DATA if moneysend^ref^data^d[ data^idx ] = "12" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.id^typ, $len( p2p^sender^data^tkn.mc.id^typ ), $offset( p2p^sender^data^tkn.mc.id^typ ) ); end else if moneysend^ref^data^d[ data^idx ] = "13" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.id^num, $len( p2p^sender^data^tkn.mc.id^num ), $offset( p2p^sender^data^tkn.mc.id^num ) ); end else if moneysend^ref^data^d[ data^idx ] = "14" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.id^cntry^cde, $len( p2p^sender^data^tkn.mc.id^cntry^cde ), $offset( p2p^sender^data^tkn.mc. id^cntry^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "15" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.id^exp^dat, $len( p2p^sender^data^tkn.mc.id^exp^dat ), $offset( p2p^sender^data^tkn.mc. id^exp^dat ) ); end else if moneysend^ref^data^d[ data^idx ] = "16" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.natl^cntry^cde, $len( p2p^sender^data^tkn.mc. natl^cntry^cde ), $offset( p2p^sender^data^tkn.mc. natl^cntry^cde ) ); end else if moneysend^ref^data^d[ data^idx ] = "17" then begin call sub^mov^ext^to^tkn( p2p^sender^data^tkn.mc.birth^cntry^cde, $len( p2p^sender^data^tkn.mc. birth^cntry^cde ), $offset( p2p^sender^data^tkn.mc. birth^cntry^cde ) ); end else #ADD 25133 UTIL^COLLAPSE^ADMIN int buf^lgth; string .trace^ptr; string .buf[ 0:255 ]; ?page "subproc trace^admin of util^collapse^admin" !################################################################# !# # !# trace^admin # !# # !# This subprocedure traces the standard administrative message # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^admin( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := adm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if adm^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if adm^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := adm^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if adm^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := adm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if adm^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := adm^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^admin! ?page "util^collapse^admin" !################################################################# !# # !# This is the main body of PROC util^collapse^admin # !# # !################################################################# #ADD 25145 UTIL^COLLAPSE^ADMIN if bnet^g.bit^trace^g.out^d then begin call trace^admin( bit^msg^typ^l, ptr ); end; #ADD 25149 UTIL^COLLAPSE^ADMIN if bnet^g.bit^trace^g.out^d then begin @trace^ptr := @ptr; end; #ADD 25209 UTIL^COLLAPSE^ADMIN if bnet^g.bit^trace^g.out^d then begin call trace^admin( index, trace^ptr ); end; #ADD 25249 UTIL^COLLAPSE^FRQST int buf^lgth; string .trace^ptr; string .buf[ 0:255 ]; ?page "subproc trace^frqst of util^collapse^frqst" !################################################################# !# # !# trace^frqst # !# # !# This subprocedure traces the standard file request message. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^frqst( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := frqst^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if frqst^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if frqst^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := frqst^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if frqst^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := frqst^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if frqst^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := frqst^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^frqst! ?page "util^collapse^frqst" !################################################################# !# # !# This is the main body of PROC util^collapse^frqst # !# # !################################################################# #ADD 25261 UTIL^COLLAPSE^FRQST if bnet^g.bit^trace^g.out^d then begin call trace^frqst( bit^msg^typ^l, ptr ); end; #ADD 25265 UTIL^COLLAPSE^FRQST if bnet^g.bit^trace^g.out^d then begin @trace^ptr := @ptr; end; #ADD 25326 UTIL^COLLAPSE^FRQST if bnet^g.bit^trace^g.out^d then begin call trace^frqst( index, trace^ptr ); end; #ADD 25368 UTIL^COLLAPSE^NMM int buf^lgth; string .trace^ptr; string .buf[ 0:255 ]; ?page "subproc trace^nmm of util^collapse^nmm" !################################################################# !# # !# trace^nmm # !# # !# This subprocedure traces the network management message. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^nmm( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := nmm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if nmm^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if nmm^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := nmm^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if nmm^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := nmm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if nmm^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := nmm^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^nmm! ?page "util^collapse^frqst" !################################################################# !# # !# This is the main body of PROC util^collapse^nmm # !# # !################################################################# #ADD 25380 UTIL^COLLAPSE^NMM if bnet^g.bit^trace^g.out^d then begin call trace^nmm( bit^msg^typ^l, ptr ); end; #ADD 25384 UTIL^COLLAPSE^NMM if bnet^g.bit^trace^g.out^d then begin @trace^ptr := @ptr; end; #ADD 25443 UTIL^COLLAPSE^NMM if bnet^g.bit^trace^g.out^d then begin call trace^nmm( index, trace^ptr ); end; #ADD 25488 UTIL^COLLAPSE^SEM int buf^lgth; string .trace^ptr; string .buf[ 0:255 ]; ?page "subproc trace^sem of util^collapse^sem" !################################################################# !# # !# trace^sem # !# # !# This subprocedure traces the SEM. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^sem( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := sem^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 54 -> begin ! ! DE-55 trace requires the expanded SEM ! return; end; otherwise -> begin end; end; if sem^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if sem^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := sem^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if sem^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := sem^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if sem^bit^map^type( sidx ) = 5 then begin ! ! DE-55 trace requires the expanded SEM ! end else begin ! ! Variable length field ! lgth^lgth := sem^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^sem! ?page "util^collapse^sem" !################################################################# !# # !# This is the main body of PROC util^collapse^sem # !# # !################################################################# #ADD 25500 UTIL^COLLAPSE^SEM if bnet^g.bit^trace^g.out^d then begin call trace^sem( bit^msg^typ^l, ptr ); end; #ADD 25504 UTIL^COLLAPSE^SEM if bnet^g.bit^trace^g.out^d then begin @trace^ptr := @ptr; end; #ADD 25550 UTIL^COLLAPSE^SEM if bnet^g.bit^trace^g.out^d then begin call emv^util^trace^de55( sem, length, buf, buf^lgth ); end; #ADD 26021 UTIL^COLLAPSE^SEM ! ! Time Validation Information ! if hdr.addl^data.info. tim^valid^info^sub^fld^49.tag = "49" then begin call ascii^integer( hdr.addl^data.info. tim^valid^info^sub^fld^49.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. tim^valid^info^sub^fld^49.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26021#0N UTIL^COLLAPSE^SEM ! ! Transaction Integrity Class ! if hdr.addl^data.info. txn^intgty^clas^sub^fld^52.tag = "52" then begin call ascii^integer( hdr.addl^data.info. txn^intgty^clas^sub^fld^52.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. txn^intgty^clas^sub^fld^52.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26667k1J UTIL^COLLAPSE^SEM ! ! Move Subfield 8-Token Storage Type ! if hdr.addl^data.info. paypass^mapping^sub^fld^33. storage^technology.tag = "08" then begin call ascii^integer( hdr.addl^data.info. paypass^mapping^sub^fld^33. storage^technology.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. paypass^mapping^sub^fld^33. storage^technology.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 08 ! #ADD 26914 UTIL^COLLAPSE^SEM if hdr.adnl^data^natl.srvc. sub^fld^6.tag = "006" then begin call ascii^integer( hdr.adnl^data^natl.srvc. sub^fld^6.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc.sub^fld^6.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; if hdr.adnl^data^natl.srvc. sub^fld^8.tag = "008" then begin call ascii^integer( hdr.adnl^data^natl.srvc. sub^fld^8.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc. sub^fld^8.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "008" end ! of tag = "006" else if hdr.adnl^data^natl.hgmins. sub^fld^9.tag = "009" then begin call ascii^integer( hdr.adnl^data^natl.hgmins. sub^fld^9.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.hgmins.sub^fld^9.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; if hdr.adnl^data^natl.hgmins. sub^fld^20.tag = "020" then begin call ascii^integer( hdr.adnl^data^natl.hgmins. sub^fld^20.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl. hgmins.sub^fld^20.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "020" end ! of tag = "009" else if hdr.adnl^data^natl.bndes. sub^fld^12.tag = "012" then begin call ascii^integer( hdr.adnl^data^natl.bndes. sub^fld^12.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.bndes.sub^fld^12.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "012" else if hdr.adnl^data^natl.mcinst. sub^fld^21.tag = "021" then begin call ascii^integer( hdr.adnl^data^natl.mcinst. sub^fld^21.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.mcinst. sub^fld^21.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; if hdr.adnl^data^natl.mcinst. sub^fld^22.tag = "022" then begin call ascii^integer( hdr.adnl^data^natl.mcinst. sub^fld^22.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.mcinst. sub^fld^22.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "022" if hdr.adnl^data^natl.mcinst. sub^fld^23.tag = "023" then begin call ascii^integer( hdr.adnl^data^natl.mcinst. sub^fld^23.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.mcinst. sub^fld^23.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "023" end ! of tag = "021" else if hdr.adnl^data^natl.jp. sub^fld^30.tag = "030" then begin call ascii^integer( hdr.adnl^data^natl.jp. sub^fld^30.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.jp. sub^fld^30.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; if hdr.adnl^data^natl.jp. sub^fld^31.tag = "031" then begin call ascii^integer( hdr.adnl^data^natl.jp. sub^fld^31.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.jp. sub^fld^31.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "031" end; ! of tag = "030" #DELETE 26915 /26945X0V UTIL^COLLAPSE^SEM #ADD 26969 UTIL^COLLAPSE^SEM if bnet^g.bit^trace^g.out^d then begin call trace^sem( index, trace^ptr ); end; #ADD 27221 UTIL^EXPAND^ADMIN int buf^lgth; string .buf[ 0:255 ]; ?page "subproc trace^admin of util^expand^admin" !################################################################# !# # !# trace^admin # !# # !# This subprocedure traces the administrative message. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^admin( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := adm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if adm^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if adm^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := adm^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if adm^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := adm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if adm^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := adm^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^admin! ?page "util^expand^admin" !################################################################# !# # !# This is the main body of PROC util^expand^admin # !# # !################################################################# #ADD 27241 UTIL^EXPAND^ADMIN if bnet^g.bit^trace^g.in^d then begin call trace^admin( bit^msg^typ^l, ptr ); end; #ADD 27245 UTIL^EXPAND^ADMIN if bnet^g.bit^trace^g.in^d then begin call trace^admin( index, ptr ); end; #ADD 27363 UTIL^EXPAND^FRQST int buf^lgth; string .buf[ 0:255 ]; ?page "subproc trace^frqst of util^expand^frqst" !################################################################# !# # !# trace^frqst # !# # !# This subprocedure traces the file request message. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^frqst( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := frqst^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if frqst^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if frqst^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := frqst^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if frqst^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := frqst^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if frqst^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := frqst^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^frqst! ?page "util^expand^frqst" !################################################################# !# # !# This is the main body of PROC util^expand^frqst # !# # !################################################################# #ADD 27383 UTIL^EXPAND^FRQST if bnet^g.bit^trace^g.in^d then begin call trace^frqst( bit^msg^typ^l, ptr ); end; #ADD 27387 UTIL^EXPAND^FRQST if bnet^g.bit^trace^g.in^d then begin call trace^frqst( index, ptr ); end; #ADD 27506 UTIL^EXPAND^NMM int buf^lgth; string .buf[ 0:255 ]; ?page "subproc trace^nmm of util^expand^nmm" !################################################################# !# # !# trace^nmm # !# # !# This subprocedure traces the network management message. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^nmm( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := nmm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; otherwise -> begin end; end; if nmm^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if nmm^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := nmm^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if nmm^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := nmm^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if nmm^bit^map^type( sidx ) = 5 then begin ! ! Not supported ! return; end else begin ! ! Variable length field ! lgth^lgth := nmm^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^nmm! ?page "util^expand^nmm" !################################################################# !# # !# This is the main body of PROC util^expand^nmm # !# # !################################################################# #ADD 27526 UTIL^EXPAND^NMM if bnet^g.bit^trace^g.in^d then begin call trace^nmm( bit^msg^typ^l, ptr ); end; #ADD 27530 UTIL^EXPAND^NMM if bnet^g.bit^trace^g.in^d then begin call trace^nmm( index, ptr ); end; #ADD 27671 UTIL^EXPAND^SEM int buf^lgth; #ADD 27676 UTIL^EXPAND^SEM string .buf[ 0:255 ]; #ADD 27686&0Q SUB^MOVE^SUBFIELD ?page "subproc trace^sem of util^expand^sem" !################################################################# !# # !# trace^sem # !# # !# This subprocedure traces the SEM. # !# # !# INPUT PARAMETERS: # !# sidx - The index of the bit being traced # !# sptr - A pointer to the bit being traced # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc trace^sem( sidx, sptr ); int sidx; string .sptr; begin wlform( trace0, "T - Field Tag ### - \?" ) wlform( trace1, "T - Message Type - \?" ) wlform( trace2, "T - Pri Bit Map - \?" ) wlform( trace3, "T - Sec Bit Map - \?" ) int idx; int lgth; int lgth^lgth; case sidx of begin -1 -> begin ! ! Message Type and Primary bitmap ! call log^message^( ,, @trace1, net.myname, 0, @hdr.typ, $min( $len( hdr.typ ), max^logger^l ) ); lgth := $len( hdr.pbit^map ); lgth := lgth * 2; call binary^hexchar( buf, lgth, hdr.pbit^map ); call log^message^( ,, @trace2, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 0 -> begin ! ! Secondary bitmap ! lgth := sem^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); call log^message^( ,, @trace3, net.myname, 0, @buf, $min( lgth, max^logger^l ) ); return; end; 54 -> begin ! ! DE-55 trace requires the expanded SEM ! return; end; otherwise -> begin end; end; if sem^bit^map^type( sidx ) = -1 then begin ! ! Field should not be in message ! return; end else if sem^bit^map^type( sidx ) = 0 then begin ! ! Fixed length field ! lgth := sem^bit^map^length( sidx ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr, lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end else if sem^bit^map^type( sidx ) = 1 then begin ! ! Fixed length binary field ! lgth := sem^bit^map^length( sidx ); lgth := lgth * 2; call binary^hexchar( buf, lgth, sptr ); end else if sem^bit^map^type( sidx ) = 5 then begin ! ! DE-55 trace requires the expanded SEM ! end else begin ! ! Variable length field ! lgth^lgth := sem^bit^map^type( sidx ); movl( buf, sptr, lgth^lgth ); call translate( buf, lgth^lgth, ebcdic^to^ascii^l ); call ascii^integer( buf, lgth^lgth, lgth ); lgth := $min( lgth, $occurs( buf ) ); movl( buf, sptr[lgth^lgth], lgth ); call translate( buf, lgth, ebcdic^to^ascii^l ); end; idx := sidx + 1; call log^message^( ,, @trace0, net.myname, 0, idx, @buf, $min( lgth, max^logger^l ) ); end; ! trace^sem! #ADD 27710 SUB^MOVE^SUBFIELD if bnet^g.bit^trace^g.in^d then begin call trace^sem( bit^msg^typ^l, ptr ); end; #ADD 27714 SUB^MOVE^SUBFIELD if bnet^g.bit^trace^g.in^d then begin call trace^sem( index, ptr ); end; #ADD 27756 SUB^MOVE^SUBFIELD if bnet^g.bit^trace^g.in^d then begin call emv^util^trace^de55( sem, length, buf, buf^lgth ); end; #ADD 28022X0W SUB^MOVE^SUBFIELD if ptr[ length ] = "49" then begin ! ! Time Validation Information ! movl( sem^ptr.addl^data.info. tim^valid^info^sub^fld^49.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 28022#0V SUB^MOVE^SUBFIELD if ptr[ length ] = "52" then begin ! ! Transaction Integrity Class ! movl( sem^ptr.addl^data.info. txn^intgty^clas^sub^fld^52.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 28438&1J SUB^MOVE^SUBFIELD ! ! Move Subfield 8 - Storage Technology ! if sub^ptr = "08" then begin call sub^move^subfield( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. storage^technology.tag ); end else #ADD 28674X0I SUB^MOVE^SUBFIELD if ptr[ length ] = "021" then begin movl( sem^ptr.adnl^data^natl.mcinst. sub^fld^21.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "022" then begin movl( sem^ptr.adnl^data^natl.mcinst. sub^fld^22.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "023" then begin movl( sem^ptr.adnl^data^natl.mcinst. sub^fld^23.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 28674#0A SUB^MOVE^SUBFIELD if ptr[ length ] = "030" then begin movl( sem^ptr.adnl^data^natl.jp. sub^fld^30.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "031" then begin movl( sem^ptr.adnl^data^natl.jp. sub^fld^31.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 30713 UTIL^ILF^ADD sem^adj^lgth := $offset( sem.emv^data ); #DELETE 30714 /30723 UTIL^ILF^ADD #ADD 34705 UTIL^SDF^SEND struct .sem( sem^def ); int extlgth; int ferror; int sta^x; #DELETE 34706 /34709 UTIL^SDF^SEND #REPLACE 36343k01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "18"; #ADD 36635k0J UTIL^SWI^TKN^INIT if sem.addl^data.info. txn^intgty^clas^sub^fld^52.tag = "52" then begin move( bnet^tkn^buf.txn^intgty^clas, sem.addl^data.info.txn^intgty^clas^sub^fld^52. tag^data ); end; ! of if tag = "52" ! #ADD 37095v08 UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.txn^intgty^clas <> blanks for $len( bnet^tkn^buf.txn^intgty^clas ) ) then begin move( bnet^tkn.txn^intgty^clas, bnet^tkn^buf.txn^intgty^clas ); end; #ENDSCN = SW0K053 !#CMP2.28 02/18/16 BNETS 6130 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6130 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6130 * ******************************************************************************** #SCN = SW0K054 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6130 #NEWVERSION = 6131 #ADD 03821d0G ! 18FEB2016 bensone ! Symptom: Banknet Release 16.Q2 Functional Enhancements ! Problem: None ! Fix: Global 515-Installment Payment Processing ! Ensure that advices of MasterCard installment ! transactions are logged to the ILF and dropped. ! Miscellaneous Cases (#02136482, #02149281) ! Change SEM structures that use MSG^DEF are changed to ! use SEM^DEF to ensure that a SEM structure of more ! than 4K bytes can be processed successfully. ! Add BITTRACE text command ! Add new "BITTRACE" text command. ! Set bnet^g.bit^trace^g to true or false based on ! BITTRACE command. ! Init bnet^g.bit^trace^g to false on initialization or ! warmboot. ! Procs modified: bnet^^station^failed^message ! cmd^^command^input ! init^bnet^g ! pstm^0402^request ! sem^advice^pos ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! BP60AFT: RQNNFS, SVNNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0216M, ILB0216R, ILB0216S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0216M. Run the ILF conversion using ILB0216R. ! Reference: WO #008239 #ADD 04139 BNET^^STATION^FAILED^MESSAGE struct .sem( sem^def ); #ADD 04169 BNET^^STATION^FAILED^MESSAGE int .csem( sem^def ) := wordaddr( @mtp ), #DELETE 04170 /04171 BNET^^STATION^FAILED^MESSAGE #DELETE 04173 BNET^^STATION^FAILED^MESSAGE #ADD 04198 BNET^^STATION^FAILED^MESSAGE init ( sem, " ", wlen( sem^def ) ); #DELETE 04199 BNET^^STATION^FAILED^MESSAGE #ADD 04848 CMD^^COMMAND^INPUT wlform( btrace1, "T - BITTRACE Facility ENABLED" ) wlform( btrace2, "T - BITTRACE Facility DISABLED" ) #ADD 04949 CMD^^COMMAND^INPUT else if mtp[ 0 ] = "BITTRACE" then begin call hiswcmd^trace( bnet^g.bit^trace^g, mtp[8], msg^length - 8 ); if mtp[9] = "N" then call log^message^( 0381,, @btrace1, net.myname, 0 ) else if mtp[9] = "F" then call log^message^( 0391,, @btrace2, net.myname, 0 ); end #ADD 10428b04 INIT^BNET^G bnet^g.bit^trace^g := 0; #ADD 16528 PSTM^0402^REQUEST .sem( sem^def ) := @susp.extrn^msg; #DELETE 16529 PSTM^0402^REQUEST #ADD 18623 SEM^ADVICE^POS sem^mc^instl^txn^d( sem ) or #ENDSCN = SW0K054 !#CMP2.28 02/18/16 BNETD 6006 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETD BNETD 6006 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETD BNETD 6006 * ******************************************************************************** #SCN = SW0K058 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00043F0N ! 18FEB2016 bensone ! Symptom: Banknet Release 16.Q2 Functional Enhancements ! Problem: None ! Fix: Add BITTRACE text command ! New procedure to trace contents of EMV data in DE 55. ! Proc added: emv^util^trace^de55 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! BP60AFT: RQNNFS, SVNNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0216M, ILB0216R, ILB0216S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0216M. Run the ILF conversion using ILB0216R. ! Reference: WO #008239 #ADD 00110 EMV^UTIL^EXPAND^DE55 ?section emv^util^trace^de55 ?page "emv^util^trace^de55" !##################################################################### !# # !# emv^util^trace^de55 # !# # !# This proc allows field 55 in the ISO message to be formatted for # !# a trace. # !# # !# INPUT PARAMETERS: # !# sem - Expanded external message. # !# ofst - Offset into the SEM of the unique field. # !# lgth - Length of the unique field in the SEM. # !# # !# OUTPUT PARAMETERS - # !# buf - Buffer containing the info to be traced. # !# buf^lgth - Length of the info to be traced. # !# # !##################################################################### proc emv^util^trace^de55( sem, lgth, buf, buf^lgth ); string .sem; int lgth; string .buf; int .buf^lgth; begin end; #ENDSCN = SW0K058 !#CMP2.28 02/18/16 BNETDDLS6054 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6054 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6054 * ******************************************************************************** #SCN = SW0K060 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6054 #NEWVERSION = 6055 #ADD 00262$0p * 19FEB2016 bensone * Symptom: Banknet Release 16.Q2 Functional Enhancements * Problem: New vaiable added to DE 112, err-cde, caused an * ambiguous reference in RP09BNTS. * Fix: Rename err-cde to cafis-err-cde. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * BP60AFT: RQNNFS, SVNNFS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Run Make. * Replace file: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0216M, ILB0216R, ILB0216S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0216M. Run the ILF conversion using ILB0216R. * Reference: WO #008239 #ADD 01411$1J SEM 10 cafis-err-cde pic x(3). #DELETE 01411$1K SEM #ENDSCN = SW0K060 !#CMP2.28 02/18/16 BNETLIBS6257 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6257 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6257 * ******************************************************************************** #SCN = SW0K061 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6257 #NEWVERSION = 6258 #ADD 07850*1t ! 19FEB2016 bensone ! Symptom: Banknet Release 16.Q2 Functional Enhancements ! Problem: New vaiable added to DE 112, err-cde, caused an ! ambiguous reference in RP09BNTS. ! Fix: Rename err-cde to cafis-err-cde. ! Proc modified: sem^frmt^natl^data^to^pstm ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! BP60AFT: RQNNFS, SVNNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0216M, ILB0216R, ILB0216S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0216M. Run the ILF conversion using ILB0216R. ! Reference: WO #008239 #ADD 17092*7W SEM^FRMT^NATL^DATA^TO^PSTM sem.adnl^data^natl.jp.sub^fld^31.tag^data. cafis^err^cde ); #DELETE 17092*7X SEM^FRMT^NATL^DATA^TO^PSTM #ENDSCN = SW0K061 !#CMP2.28 03/07/16 BNETLIBS6258 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6258 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6258 * ******************************************************************************** #SCN = SW0K089 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6258 #NEWVERSION = 6259 #ADD 07850+0M ! 07MAR2016 bensone ! Symptom: In the 0110 response message to BNET, the length of the ! field 112 is set to 0. ! Problem: The tags in DE 112 are set to 2-byte values but then ! tested for 3-byte values. ! Fix: Set tags in DE 112 using 3-byte values. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #2244106 #ADD 11074*0H PSTM^FRMT^0210^TO^XRESP "021" ); #DELETE 11074*0I PSTM^FRMT^0210^TO^XRESP #ADD 11074*0g PSTM^FRMT^0210^TO^XRESP "023" ); #DELETE 11074*0h PSTM^FRMT^0210^TO^XRESP #ADD 11074*1S PSTM^FRMT^0210^TO^XRESP "022" ); #DELETE 11074*1T PSTM^FRMT^0210^TO^XRESP #ADD 11074*2S PSTM^FRMT^0210^TO^XRESP "021" ); #DELETE 11074*2T PSTM^FRMT^0210^TO^XRESP #DELETE 11074*2i PSTM^FRMT^0210^TO^XRESP #ADD 11074*3G PSTM^FRMT^0210^TO^XRESP if lgth > 0 then begin adnl^data^ntl^bit^d := 1; end else begin adnl^data^ntl^bit^d := 0; end; #ENDSCN = SW0K089 !#CMP2.28 03/18/16 BNETLIBS6259 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6259 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6259 * ******************************************************************************** #SCN = SW0K103 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6259 #NEWVERSION = 6260 #ADD 07850-0A ! 18MAR2016 wielerk ! Symptom: In the 0120 advice message to BNET, DE-55 ( EMV data ) ! is toggled on but no data is present. ! Problem: EMV data was removed from the external message portion ! of the ILF. With no data present, the bit needs to be ! toggled off. ! Fix: Modified code to toggle DE-55 off when formatting an ! advice or reversal to MasterCard. ! Procs modified: pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #2253372. #REPLACE 11291 PSTM^FRMT^0220^TO^XADV emv^data^bit^d := 0; ! P-55 ! #REPLACE 11980 PSTM^FRMT^0420^TO^XRVSL emv^data^bit^d := 0; #ENDSCN = SW0K103 !#CMP2.28 03/23/16 BNETLIBS6260 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6260 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6260 * ******************************************************************************** #SCN = SW0K109 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6260 #NEWVERSION = 6261 #ADD 07850:0D ! 23MAR2016 wielerk ! Symptom: Interface does not correctly expand DE-48.SE-37 ( addl ! data.addl merch data ). ! Problem: If a bad tag is encountered, the subfield is set to ! spaces. However, if DE-48 is returned in the 0110 the ! length is incorrectly adjusted and the message is sent ! corrupted. ! Fix: The interface was modified to subtract SE-37 tag and ! data length from DE-48 total length. ! Proc modified: util^expand^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2246848. #ADD 28515&0n TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #REPLACE 28979 UTIL^FRMT^ADDL^DATA^TO^XRESP ! SE 74-Additional Processing Information ! #REPLACE 28997 UTIL^FRMT^ADDL^DATA^TO^XRESP ! SE 83-Address Verification Service (AVS) Response ! #REPLACE 29013 UTIL^FRMT^ADDL^DATA^TO^XRESP ! SE 84-Merchant Advice Code ! #ENDSCN = SW0K109 !#CMP2.28 04/25/16 BNETG 6097 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6097 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6097 * ******************************************************************************** #SCN = SW0K149 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L000260k ! 25APR2016 wielerk ! Symptom: Interface corrupts DE-26 ( PIN cap cde ) when formatting ! EMV data. ! Problem: When initializing DE-55, binary zeroes are moved for 1 ! byte too many corrupting the first byte of DE-26 ( PIN ! cap code ) with a binary zero. ! Fix: Modified the define bin^zeroes^d to make it initialize ! bytes and now words to accomodate the odd length of ! EMV data. ! Dependency: Apply fixes to BNETG and SW60IBNT.BNETEMVS. Run Make. ! Reference: Case #2281414. #REPLACE 01366O0D define bin^zeros^d( fld, lgth ) = fld[ 0 ] ':=' [ 0 ] & fld[ 0 ] #ENDSCN = SW0K149 !#CMP2.28 05/03/16 BNETLIBS6261 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6261 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6261 * ******************************************************************************** #SCN = SW0K157 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6261 #NEWVERSION = 6262 #ADD 07850;0D ! 03MAY2016 bensone ! Symptom: Interface creates the FD token with length 788 if ! DE 112 SE 021 and 023 are present in the request. ! Problem: The OPTION array is added to its full size (i.e. ! num^opts^avail is set to "12" ). When SE 023 is used, ! only one occurrence of the OPTION array is needed. ! Fix: Set num^opts^avail to "01" when adding the FD token and ! SE 023 is present. ! Proc modified: sem^frmt^instl^pmnt^to^pstm ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2275588. #ADD 17092*1U SEM^FRMT^INSTL^PMNT^TO^PSTM "01" ); #DELETE 17092*1V SEM^FRMT^INSTL^PMNT^TO^PSTM #ENDSCN = SW0K157 !#CMP2.28 05/25/16 BNETDDLS6055 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6055 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6055 * ******************************************************************************** #SCN = SW0K159 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6055 #NEWVERSION = 6056 #ADD 00262%0L * 25MAY2016 bensone * Symptom: Banknet Miscellaneous Functional Enhancements * Problem: None * Fix: The PCT-BNET definition was modified to support 9 ILFs. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Run Make. * Replace file: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #008446 #ADD 02113q00 PCT-BNET 02 ilf occurs 9 times. #DELETE 02113q01 PCT-BNET #ENDSCN = SW0K159 !#CMP2.28 05/25/16 BNETG 6098 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6098 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6098 * ******************************************************************************** #SCN = SW0K160 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M000260C ! 25MAY2016 bensone ! Symptom: Banknet Miscellaneous Functional Enhancements ! Problem: None ! Fix: Add define pos^purch^adjust^d to identify a purchase ! adjustment transaction code. Add and modify the literals ! that refer to a specific day's ILF (next^l, cur^l, ! prev^l, two^days^prev^l, three^days^prev^l, ! four^days^prev^l, five^days^prev^l, six^days^prev^l, ! seven^days^prev^l, eight^days^prev^l). ! Add new global num^prev^ilfs^g to set the number of ILFs ! the user has configured the interface to search. ! Add define pos^transit^aggr^d to identify transit ! merchants that may aggregate multiple trans into one. ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008446 #ADD E0016601 pos^purch^adjust^d( x ) = ( x.tran.tran^cde = "21" ) #, #ADD 00166>01 define pos^transit^aggr^d( x ) = ( x.retl^sic^cde = "4111" or x.retl^sic^cde = "4784" or x.retl^sic^cde = "4131" )#; #ADD 00352003 literal seven^days^prev^l = 0; literal six^days^prev^l = 1; literal five^days^prev^l = 2; literal four^days^prev^l = 3; literal three^days^prev^l = 4; literal two^days^prev^l = 5; literal prev^l = 6; literal cur^l = 7; literal next^l = 8; #DELETE 00352004/00352008 #ADD L0043501 int num^prev^ilfs^g; #ENDSCN = SW0K160 !#CMP2.28 05/25/16 BNETLIBS6262 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6262 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6262 * ******************************************************************************** #SCN = SW0K161 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6262 #NEWVERSION = 6263 #ADD 07850<0C ! 25MAY2016 bensone ! Symptom: Banknet Miscellaneous Functional Enhancements ! Problem: None ! Fix: Best Practices for Authorization Reversal Processing ! Increase the number of ILF's the interface can search ! for the original matching authorization. ! For internal adjustment transactions, the interface ! will send an external 0400 reversal if the original ! is not successfully retrieved. ! Miscellaneous Cases (02226240, #02228825, #02301113) ! Correct DE 48 length calculation. ! Add support for Ethiopia with country code 230. ! Correct the number of entries in the table of ! Merchant Category Codes. ! Procs added: pstm^check^ilfs^to^match ! sem^check^ilfs^to^match ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^check^unmatchd^xrvsl^pos ! util^frmt^addl^data^to^xresp ! util^ilf^get ! util^ilf^get^pos^adj ! util^ilf^process^reversal ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008446 #ADD 08680 PATH^FRMT^FILE^RQST ?section pstm^check^ilfs^to^match ?page "pstm^check^ilfs^to^match" !##################################################################### !# # !# pstm^check^ilfs^to^match # !# # !# This procedure determines the maximum number of previous ILFs # !# that may be searched for the original authorization. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to internal message # !# # !# OUTPUT PARAMETERS: # !# num^of^ilfs - the maximum number of previous ILFs that may # !# be searched for the original authorization # !# # !##################################################################### proc pstm^check^ilfs^to^match( pstm, num^of^ilfs ); int .pstm( pstm^def ); int .num^of^ilfs; begin int(32) tran^jday; int(32) setl^jday; int .compliance^get^tkn( ichg^compliance^tkn^def ); int compliance^get^lgth; int num^of^days; int .ps51^get^tkn( ps51^tkn^def ); int ps51^tkn^found := false; int ps51^get^lgth; int yy; string orig^setl^dat[0:5]; string tkn^id[0:1]; num^of^ilfs := 2; if ( not pos^purchase^d( pstm ) and not pos^pre^auth^d( pstm ) and not pos^mail^phone^d( pstm ) and not pos^purch^adjust^d( pstm ) ) then begin return; end; if pos^transit^aggr^d( pstm ) or pos^preauth^match^d( pstm ) then begin return; end; tkn^id ':=' ichg^compliance^tkn^id^d; if base24^rel^g < 5 or not hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin return; end; num^of^ilfs := bnet^g.num^prev^ilfs^g + 1; if bnet^g.enhncd^ilf^match^acq^g then begin tkn^id ':=' ps51^tkn^id^d; if hiswtkn^get^tkn ( pstm, tkn^id, @ps51^get^tkn, ps51^get^lgth ) then begin ps51^tkn^found := true; end; if pos^mail^phone^d( pstm ) or pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "05" or pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" or ( ps51^tkn^found and ( ps51^get^tkn.e^com^flg > "0" and ps51^get^tkn.e^com^flg <= "9" ) ) then begin ! ! CNP Card not present ! num^of^ilfs := 4; end; end; ! of enhncd^ilf^match^acq^g orig^setl^dat ':=' pct.setl.swi^dat for 2 bytes & compliance^get^tkn.trace^id.byte[ 9 ] for 4 bytes; if not valid^date^yymmdd( orig^setl^dat ) then begin return; end; if compare^ascii^yymmdd( orig^setl^dat, 2, pct.setl.swi^dat ) then ! ! orig^setl^dat > pct.setl.swi^dat ! begin call ascii^integer( orig^setl^dat, 2, yy ); decrement^d( yy ); call integer^ascii( orig^setl^dat, 2, yy ); end; tran^jday := yymmdd^to^julian( pct.setl.swi^dat ); setl^jday := yymmdd^to^julian( orig^setl^dat ); num^of^days := $int( tran^jday - setl^jday ); if num^of^days < num^of^ilfs then begin num^of^ilfs := num^of^days + 1; end else begin num^of^ilfs := 0; end; end; ! of proc pstm^check^ilfs^to^match #ADD 10072 SUB^LOG^ERROR if sem.ntl^pos^data.cntry^cde = "231" then begin movd( sem.ntl^pos^data.cntry^cde, "230"); end; #ADD 11040 PSTM^FRMT^0210^TO^XRESP send^addl^data := true; #DELETE 11041 /11053 PSTM^FRMT^0210^TO^XRESP #ADD 13336G00 PSTM^FRMT^SEM^ADDL^DATA literal num^of^sic^ranges^l = 40, #DELETE 13336G01 PSTM^FRMT^SEM^ADDL^DATA #ADD 15424 SDF^FRMT^0620^TO^XADMIN ?section sem^check^ilfs^to^match ?page "sem^check^ilfs^to^match" !##################################################################### !# # !# sem^check^ilfs^to^match # !# # !# This procedure determines the maximum number of previous ILFs # !# that may be searched for the original authorization. # !# # !# INPUT PARAMETERS: # !# sem - pointer to external message # !# # !# OUTPUT PARAMETERS: # !# num^of^ilfs - the maximum number of previous ILFs that may # !# be searched for the original authorization # !# # !##################################################################### proc sem^check^ilfs^to^match( sem, num^of^ilfs ); int .sem( sem^def ); int .num^of^ilfs; begin int(32) tran^jday; int(32) setl^jday; int enhncd^ilf^match; int num^of^days; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int yy; string orig^setl^dat[0:5]; num^of^ilfs := 2; if not sem.proc^cde = sem^purchase^d then begin return; end; if sem^transit^aggr^d( sem ) or sem.merch^typ = "5542" then begin return; end; if sem.addl^data.info.trc^id^sub^fld^63.tag = " " then begin return; end; num^of^ilfs := bnet^g.num^prev^ilfs^g + 1; if sem.typ.byte[ 2 ] = "1" then begin enhncd^ilf^match := bnet^g.enhncd^ilf^match^acq^g; end else begin enhncd^ilf^match := bnet^g.enhncd^ilf^match^iss^g; end; if enhncd^ilf^match then begin if sem.addl^data.info.tran^cat^cde = "T" or sem^ecomm^d( sem ) or ( ntl^pos^data^bit^d and not crdhldr^prsn^d( sem ) ) then begin ! ! CNP Card not present ! num^of^ilfs := 4; end; end; orig^setl^dat ':=' pct.setl.swi^dat for 2 bytes & sem.addl^data.info.trc^id^sub^fld^63.dat^setl for 4 bytes; if not valid^date^yymmdd( orig^setl^dat ) then begin return; end; if compare^ascii^yymmdd( orig^setl^dat, 2, pct.setl.swi^dat ) then ! ! orig^setl^dat > pct.setl.swi^dat ! begin call ascii^integer( orig^setl^dat, 2, yy ); decrement^d( yy ); call integer^ascii( orig^setl^dat, 2, yy ); end; tran^jday := yymmdd^to^julian( pct.setl.swi^dat ); setl^jday := yymmdd^to^julian( orig^setl^dat ); num^of^days := $int( tran^jday - setl^jday ); if num^of^days < num^of^ilfs then begin num^of^ilfs := num^of^days + 1; end else begin num^of^ilfs := 0; end; end; ! of proc sem^check^ilfs^to^match #ADD 15424M16 SEM^CHECK^UNMATCHD^XRVSL^POS num^of^ilfs := bnet^g.num^prev^ilfs^g + 1; #DELETE 15424M17 SEM^CHECK^UNMATCHD^XRVSL^POS #ADD 15424M1B SEM^CHECK^UNMATCHD^XRVSL^POS sem^ecomm^d( rvsl ) or #DELETE 15424M1C SEM^CHECK^UNMATCHD^XRVSL^POS #ADD 28948 UTIL^FRMT^ADDL^DATA^TO^XRESP ! ! ! 1 byte length of TCC will be present ! ! ! movd( sem.addl^data.lgth, "001" ); #DELETE 28949 UTIL^FRMT^ADDL^DATA^TO^XRESP #ADD 31401 UTIL^ILF^EXPAND^BASE24 !##################################################################### !# # !# util^ilf^get # !# # !# This procedure finds an ilf record according to the primary key. # !# # !# INPUT PARAMETERS : # !# key - the ilf primary key # !# key^lgth - the ilf primary key length # !# enhncd^ilf^match - the total number of ILFs to be searched # !# for the original authorization # !# pstm - adjustment message used to locate original# !# transaction using a reduced prikey # !# # !# OUTPUT PARAMETERS: # !# ilf - ilf record # !# ilf^lgth - ilf record length # !# base24^msg - base24 internal message from the ILF # !# sem - banknet external message from the ILF # !# # !# RETURN: # !# filenumber - If record is found # !# FALSE - If record is not found # !# # !##################################################################### #DELETE 31402 /31426 UTIL^ILF^GET #ADD 31589 SUB^ILF^GET enhanced^ilf^match := 2; if $param( enhncd^ilf^match ) then begin enhanced^ilf^match := enhncd^ilf^match; if enhanced^ilf^match = 0 then begin return false; end; #DELETE 31590 /31592 SUB^ILF^GET #ADD 31594 SUB^ILF^GET if enhanced^ilf^match > 2 then begin oldest^ilf := next^l - enhanced^ilf^match; #DELETE 31595 /31597 SUB^ILF^GET #ADD 31605 SUB^ILF^GET while not found and ( indx := indx - 1 ) >= oldest^ilf do #DELETE 31606 SUB^ILF^GET #ADD 31697 UTIL^ILF^GET^POS^ADJ int num^of^ilfs := 0; #ADD 31701 UTIL^ILF^GET^POS^ADJ call pstm^check^ilfs^to^match( pstm, num^of^ilfs ); #ADD 31702 UTIL^ILF^GET^POS^ADJ if not ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, ! base24^msg !, sem, ! pstm !, num^of^ilfs ) ) then #DELETE 31703 /31706 UTIL^ILF^GET^POS^ADJ #ADD 31717 UTIL^ILF^GET^POS^ADJ if not ( ilf^fnum := util^ilf^get( ilf.prikey, $len( ilf.prikey ), ilf, ilf^lgth, ! base24^msg !, sem, ! pstm !, num^of^ilfs ) ) then #DELETE 31718 /31721 UTIL^ILF^GET^POS^ADJ #ADD 31731 UTIL^ILF^GET^POS^ADJ util^ilf^get( ilf.prikey, $offset( prikey.seq^num ), ilf, ilf^lgth, ! base24^msg !, sem, pstm, num^of^ilfs ) ) then #DELETE 31732 /31735 UTIL^ILF^GET^POS^ADJ #ADD 32307 UTIL^ILF^PROCESS^REVERSAL call sem^check^ilfs^to^match( sem, enhncd^ilf^match ); #DELETE 32308 /32320 UTIL^ILF^PROCESS^REVERSAL #ENDSCN = SW0K161 !#CMP2.28 05/25/16 BNETS 6131 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6131 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6131 * ******************************************************************************** #SCN = SW0K164 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6131 #NEWVERSION = 6132 #ADD 03821e0b ! 25MAY2016 bensone ! Symptom: Banknet Miscellaneous Functional Enhancements ! Problem: None ! Fix: Best Practices for Authorization Reversal Processing ! Increase the number of ILF's the interface can search ! for the original matching authorization. ! For internal adjustment transactions, the interface ! will send an external 0400 reversal if the original ! is not successfully retrieved. ! Miscellaneous Cases (02226240, #02228825, #02301113) ! Correct DE 48 length calculation. ! Add support for Ethiopia with country code 230. ! Correct the number of entries in the table of ! Merchant Category Codes. ! Proc added: pstm^send^unmatchd^xrvsl^pos ! Procs modified: cmd^warmboot^close^old ! cmd^warmboot^retrieve^globals ! init^bnet^g ! init^ilf ! init^paramproc ! pstm^0220^force^post ! pstm^0420^reversal ! sem^acq^rvsl^resp ! sem^acq^rvsl^rqst ! sem^reversal^advice ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008446 #ADD 09418H02 CMD^WARMBOOT^CLOSE^OLD close^file^d( pcpl.ilf[ four^days^prev^l ].fcb.filenum ); close^file^d( pcpl.ilf[ five^days^prev^l ].fcb.filenum ); close^file^d( pcpl.ilf[ six^days^prev^l ].fcb.filenum ); close^file^d( pcpl.ilf[ seven^days^prev^l ].fcb.filenum ); #ADD 09647H02 CMD^WARMBOOT^RETRIEVE^GLOBALS close^file^d( pct.ilf[ four^days^prev^l ].fcb.filenum ); close^file^d( pct.ilf[ five^days^prev^l ].fcb.filenum ); close^file^d( pct.ilf[ six^days^prev^l ].fcb.filenum ); close^file^d( pct.ilf[ seven^days^prev^l ].fcb.filenum ); #ADD 10428e01 INIT^BNET^G bnet^g.num^prev^ilfs^g := 1; #ADD 11485H01 INIT^ILF int oldest^ilf; #ADD 11497H00 INIT^ILF oldest^ilf := cur^l - bnet^g.num^prev^ilfs^g; bnet^g.oldest^ilf^g := $min( oldest^ilf, bnet^g.oldest^ilf^g ); #ADD 11497H05 INIT^ILF ilf^dat := date + $dbl( indx ) - $dbl( cur^l ); #DELETE 11497H06 INIT^ILF #ADD 12676b01 INIT^PARAMPROC "P", "SWI-NUM-PREVIOUS-ILF ", #ADD 13501 INIT^PARAMPROC ! ! SWI-NUM-PREVIOUS-ILF ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.num^prev^ilfs^g ) then begin bnet^g.num^prev^ilfs^g := 1; call log^message^( 1338, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.num^prev^ilfs^g ); end else if bnet^g.num^prev^ilfs^g < 1 or bnet^g.num^prev^ilfs^g > 7 then begin bnet^g.num^prev^ilfs^g := 1; call log^message^( 1339, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.num^prev^ilfs^g ); end; end; #ADD 16339V08 PSTM^0220^FORCE^POST if pos^purch^adjust^d( pstm ) then begin movd( pstm.tran.tran^cde, "10" ); if pstm^send^unmatchd^xrvsl^pos( pstm, sem, ilf.prikey, avs^typ ) then begin movd( pstm.tran.tran^cde, "21" ); call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^ok^l ); return; end; movd( pstm.tran.tran^cde, "21" ); end; #ADD 16706 PSTM^0420^REVERSAL if pos^inquiry^d( pstm ) or pos^crd^vrfy^d( pstm ) then begin return; end; if pct.options.auth^only or pstm.tran.tran^cde = "11" or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" then begin ! ! Format an 0400/Acquirer Reversal Request from the ! internal 0420 Reversal ! service := credit^l; end; #ADD 16761 PSTM^0420^REVERSAL call pstm^check^ilfs^to^match( pstm, enhncd^ilf^match ); #DELETE 16761H00/16761H0O PSTM^0420^REVERSAL #ADD 16764B0L PSTM^0420^REVERSAL movd( pstm.typ, force^post^d ); if pstm^send^unmatchd^xrvsl^pos( pstm, sem, ilf.prikey, 0 ) then begin movd( pstm.typ, reversal^d ); call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^rvsl^not^found^l ); return; end; movd( pstm.typ, reversal^d ); #ADD 16764B0i PSTM^0420^REVERSAL movd( pstm.typ, force^post^d ); if pstm^send^unmatchd^xrvsl^pos( pstm, sem, ilf.prikey, 0 ) then begin movd( pstm.typ, reversal^d ); call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ), sub^rvsl^not^found^l ); return; end; movd( pstm.typ, reversal^d ); #DELETE 16810 /16814 PSTM^0420^REVERSAL #DELETE 16868 /16878 PSTM^0420^REVERSAL #ADD 17066 PSTM^0420^REVERSAL ?section pstm^send^unmatchd^xrvsl^pos ?page "pstm^send^unmatchd^xrvsl^pos" !##################################################################### !# # !# pstm^send^unmatchd^xrvsl^pos # !# # !# This procedure builds an unmatched reversal from the PSTM and # !# sends it to Banknet via the SAF. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to internal message # !# prikey - ilf primary key # !# avs^typ - avs type for this fiid # !# # !# OUTPUT PARAMETERS: # !# sem - pointer to external message # !# # !# RETURN: # !# true - if an unmatched reversal is sent to Banknet # !# false - if an unmatched reversal is not sent to Banknet # !# # !##################################################################### int proc pstm^send^unmatchd^xrvsl^pos( pstm, sem, prikey, avs^typ ); int .pstm( pstm^def ); int .sem( sem^def ); string .prikey( prikey^def ); int avs^typ; begin struct .csem( sem^def ); int .compliance^get^tkn( ichg^compliance^tkn^def ); int compliance^get^lgth; int error; int extlgth; int lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); string tkn^id[0:1]; if ( not pos^purchase^d( pstm ) and not pos^pre^auth^d( pstm ) and not pos^mail^phone^d( pstm ) ) then begin return false; end; if pos^transit^aggr^d( pstm ) or pos^preauth^match^d( pstm ) then begin return false; end; tkn^id ':=' ichg^compliance^tkn^id^d; if base24^rel^g < 5 or not hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin return false; end; init ( sem, " ", wlen( sem^def ) ); if error := pstm^frmt^0220^to^xadv( pstm, sem, prikey, avs^typ ) then begin return false; end; if not pstm^frmt^0420^to^acq^xrvsl( pstm, sem ) then begin return false; end; local^tim^bit^d := 0; local^dat^bit^d := 0; ref^num^bit^d := 0; advice^cde^bit^d := 0; ! ! Compliance token ('20') found. ! Use it to populate DE 48 SE 63 ! movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movl( sem.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, compliance^get^tkn.trace^id, $len( compliance^get^tkn.trace^id ) ); mov^ ( sem.orig, zeroes ); movd ( sem.orig.msg^typ, sem^auth^response^d ); if not replace^amt^bit^d then begin movd( sem.resp^cde, "17" ); end; if util^^collapse( sem, csem, extlgth ) then begin call util^saf^add( csem, extlgth, pos^l, credit^l ); end else begin return false; end; return true; end; ! of proc pstm^send^unmatchd^xrvsl^pos #ADD 17291 SEM^ACQ^RVSL^RESP call sem^check^ilfs^to^match( sem, enhncd^ilf^match ); #DELETE 17291H00/17291H0C SEM^ACQ^RVSL^RESP #ADD 17449 SEM^ACQ^RVSL^RQST call sem^check^ilfs^to^match( rvsl, enhncd^ilf^match ); #DELETE 17449H00/17449H0B SEM^ACQ^RVSL^RQST #ADD 22358 SEM^REVERSAL^ADVICE call sem^check^ilfs^to^match( rvsl, enhncd^ilf^match ); #DELETE 22358H00/22358H0E SEM^REVERSAL^ADVICE #ENDSCN = SW0K164 !#CMP2.28 05/25/16 BNETLIBS6263 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6263 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6263 * ******************************************************************************** #SCN = SW0K166 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6263 #NEWVERSION = 6264 #ADD 07850=0V ! 25MAY2016 wielerk ! Symptom: Interface can send DE-48.SE-43 ( addl data.UCAF data ) ! with sub-length 0 in reversals to Mastercard. ! Problem: Issuers can send DE-48.S-43 with sub-length 0 in 0110 ! messages which is logged to the ILF. Subsequent 0420 ! messages from within Base24 will attempt to format ! DE-48.SE-43 as the tag is present and pass DE-48 with ! incorrect length and bad data appended to the end of ! DE-48. These reversals will be rejected by Mastercard. ! Fix: Moved code that initializes DE-48.SE-43 with ILF data ! within an edit that ensures the sub-length is > 0. ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2310375. #DELETE 11799 /11801 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 11818 PSTM^FRMT^0420^TO^ACQ^XRVSL movl( sem.addl^data.info.ucaf^sub^fld^43, orig^sem.addl^data.info.ucaf^sub^fld^43, $len( sem.addl^data.info.ucaf^sub^fld^43 ) ); #ENDSCN = SW0K166 !#CMP2.28 05/26/16 BNETLIBS6264 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6264 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6264 * ******************************************************************************** #SCN = SW0K181 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6264 #NEWVERSION = 6265 #ADD 07850>0F ! 26MAY2016 subramaniank ! Symptom: Cloud Based Payment or HCE Token Type Support. ! Problem: None. ! Fix: Support for mapping DE 48, SE 33, SF 1 Account number ! indicator value "H" in 0100, 0120 and 0400 messages ! received inbound from the network to the token type ! equivalent of cloud based payment / host card emulation ! in internal message. ! Support for mapping DE 48, SE 71, SF 1 value "62" with ! DE 48, SE 71, SF 2 values in 0100, 0120 and 0400 ! messages received inbound from the network to the ! internal message. ! Case #2281156 - Replaced the logic that generates denial ! when DE 48, SE 42 is not present for ecom transactions ! with a setting of the PS51 token Ecomm flag. ! Proc Modified: SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60BNET: BNETLIBS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETUPDT ! Reference: WO #008420 #ADD 21397#02 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "F" or sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "H" ) then #DELETE 21397#03/21397#04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21397#0L SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "H" then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "03" ); end else #DELETE 22240#01/22247 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22247*02 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" or sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "H" ) then #DELETE 22247*03/22247*04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22247*0J SEM^FRMT^XRQST^TO^PSTM^0200 begin ! ! Non-secure transaction ! movd( ps51^tkn^data.e^com^flg, "7" ); end; #DELETE 22247*0K/22255 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22431X04 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "62" or #ADD 22441*00 SEM^FRMT^XRQST^TO^PSTM^0200 "A" -> #DELETE 22441*01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22449 SEM^FRMT^XRQST^TO^PSTM^0200 "D" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "E" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "F" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "H" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "I" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "K" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "L" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "M" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; "N" -> begin ! ! Invalid CVD ! movd( card^vrfy^flg, "C" ); end; #ENDSCN = SW0K181 !#CMP2.28 06/02/16 BNETLIBS6265 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6265 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6265 * ******************************************************************************** #SCN = SW0K183 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6265 #NEWVERSION = 6266 #ADD 07850|0P ! 02JUN2016 saderc ! Symptom: In the 0120 advice message to BNET, DE-55 (EMV data) is ! toggled off for all transactions. ! Problem: The fix added for SCN #SW0K103 modified the logic to ! turn off bit 55 for all advice messages, which is ! incorrect. The bit should only be turned off if the ! original request is found in the ILF and the current ! completion request message does not contain EMV data. ! Fix: Modified code to toggle DE-55 off when formatting an ! advice to MasterCard, if the original request is found ! in the ILF and the current completion request message ! does not contain EMV data. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fixes to BNETLIBS. Run Make. ! Reference: Case #2302034 #REPLACE 11247 PSTM^FRMT^0220^TO^XADV move ( orig^sem.emv^data, sem.emv^data ); #ADD 11251 PSTM^FRMT^0220^TO^XADV ! ! Turn off bit 55, if not EMV data. ! if emv^data^bit^d and sem.emv^data.lgth = " " then begin emv^data^bit^d := 0; end; #DELETE 11291:01 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0K183 !#CMP2.28 06/06/16 BNETLIBS6266 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6266 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6266 * ******************************************************************************** #SCN = SW0K184 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6266 #NEWVERSION = 6267 #ADD 07850@0G ! 06JUN2016 wielerk ! Symptom: EMV AFD advices forwarded to Base24 by this interface ! can be logged as exceptions by RTAU. ! Problem: When MasterCard passes DE-23 ( card seq num ), the ! interface passes it if the bit is on. It is more ! appropriate to only pass DE-23 if the transaction is ! not EMV. ! Fix: Modified the edit for DE-23 to include conditions for ! EMV and Contactless transacctions. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2307622. #ADD 20555 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Move the card sequence number if the card is non-EMV. ! if crd^seq^num^bit^d and ( sem.pos^entry^mde <> chip^read and sem.pos^entry^mde <> pan^auto^cntctlss^m^chip ) then #DELETE 20556 /20561 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0K184 !#CMP2.28 06/09/16 BNETLIBS6267 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6267 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6267 * ******************************************************************************** #SCN = SW0K192 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6267 #NEWVERSION = 6268 #ADD 07850\0D ! 09JUN2016 wielerk ! Symptom: Transactions with DE-22 ( pos entry mode ) set to "91" ! and not passing DE-35 ( Track2 ) or DE-45 ( Track1 ) ! are denied by the interface. ! Problem: When DE-22 = "80", "90", or 91", DE-35 or DE-45 may not ! be present if PAN tokenization data is present. ! Fix: Modified the edit for missing Track1 or Track2 to ! include a check for DE-48.SE-33 presence when DE-22 is ! "80", "90", or "91". ! Proc modified: sem^frmt^data^to^pstm^track2 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2308610. #ADD 16732 SEM^FRMT^DATA^TO^PSTM^TRACK2 sem.addl^data.info.paypass^mapping^sub^fld^33.acct^num^ind. tag^data = " " and #DELETE 16733 SEM^FRMT^DATA^TO^PSTM^TRACK2 #REPLACE 16742 SEM^FRMT^DATA^TO^PSTM^TRACK2 ! present if the transaction is not tokenized. ! #ENDSCN = SW0K192 !#CMP2.28 08/04/16 BNETG 6099 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 6099 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 6099 * ******************************************************************************** #SCN = SW0K209 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD N000260K ! 04AUG2016 bensone ! Symptom: Preauth Declines on Recurring Order Transactions ! Problem: The interface was declining Recurring Payment Test ! transactions when the amount was not zero. MasterCard ! has updated their documentation to clarify that ! recurring payment transactions with pre-auth indicator ! set are allowed with a non-zero amount. ! Fix: Modified define sem^test^recur^pmnt^d to identify a ! recurring payment test transaction as a zero amount ! transaction. ! Dependency: Apply fix to BNETG. Run Make. ! Reference: Case #2373309. #ADD 0023370V not sem^fncl^txn^d( x ) and #ENDSCN = SW0K209 !#CMP2.28 08/08/16 BNETLIBS6268 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6268 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6268 * ******************************************************************************** #SCN = SW0K210 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6268 #NEWVERSION = 6269 #ADD 07850]0D ! 04AUG2016 bensone ! Symptom: Interface abends, or passes incorrect data in outbbound ! messages. ! Problem: An incorrectly defined local variable allowed memory ! corruption. ! Fix: Modified code to remove the indirection symbol from ! sub^lgth. ! Proc modified: util^collapse^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2373102. #REPLACE 25479#04 UTIL^COLLAPSE^SEM int sub^lgth; #ENDSCN = SW0K210 !#CMP2.28 08/15/16 BNETDDLS6056 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6056 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6056 * ******************************************************************************** #SCN = SW0K217 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6056 #NEWVERSION = 6057 #ADD 00262&0B * 15AUG2016 bensone * Symptom: Banknet Release 16.Q4 Functional Enhancements * Problem: None * Fix: Add new subfields 2 and 3 to DE 48 SE 42. * Replace user field with a field for DE 48 SE 61 SF 4. * Add redefine of DE 48 SE 75 for DE 48 SE 55. * Add redefine of DE 48 SE 56 for DE 48 SE 57. * Decrease the length of the user field within the DE 48 * definition (by 12 bytes) to ensure that the overall * length of the SEM structure does not change. * Add new fields to Switch token to hold DE 48 SE 42 * SF 02 and SF 03, and DE 60 SF 3. * Dependency: Apply fixes to: * BA60AFT: COBTKN, RQCPFS, SCRNCPF, SVCPFS * BA60DDL: DDLATTKN, DDLBATKN, DDLFCPF, DDLPCNST, * DDLPSTKN * BA60LIB: BALIBTBL * BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, * PSTKNCVS, PSTKNID * PS60IRTA: RTAUEMVG, RTAUEMVS * PS60RTAU: AUTHLIBS, AUTHS, RTAUG * PS60SPDH: ASPDHG, ASPDHS, CNFSCRNS, RQACNFS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * SW60IPBN: IPBNDDLS, IPBNM, IPBNMM, IPBNREFS, RUNIPBNR * New file: SW60IPBN.PRODTBL * Run Make. * Replace files: * BA60LOGM: PSSPDH * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * SW60IPBN: IPBNMAN * New files: ILB0816M, ILB0816R, ILB0816S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0816M. Run the ILF conversion using ILB0816R. * Reference: WO #008527 #ADD 01157K01 SEM 08 sf02-tag pic 99. 08 sf02-lgth pic 99. 08 orig-lvl-of-sec pic 9(3). 08 sf03-tag pic 99. 08 sf03-lgth pic 99. 08 downgrade-rsn pic 9. #ADD 01157u03 SEM 10 mrch-txn-fraud-score-ind pic 9. #DELETE 01157u04 SEM #ADD 01157l0M SEM * * Merchant Fraud Scoring Data * Subfield tag = 55 * Contains the Fraud Scoring Data when Expert Monitoring * Fraud Scoring Service is performed on the transaction. * 06 mrch-fraud-scoring-sub-fld-55 redefines fraud-scoring-data-sub-fld-75. 08 tag pic 99. 08 lgth pic 99. 08 fraud-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(3). 08 score-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). 08 subfield-3. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(3). 08 subfield-4. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). 08 subfield-5. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(2). #ADD 01157z17 SEM * * Security Services Additional Data for Acquirers * Subfield tag = 57 * Subfield 1 contains the security services indicator. * Subfield 2 contains additional data supporting the fraud score. * 06 sec-srvc-acq-sub-fld-57 redefines sec-srvc-iss-sub-fld-56. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 16 times. 10 ss-ind pic x(3). 10 ss-data pic x(3). #ADD 01157$0Q SEM 04 user-fld pic x(54). #DELETE 01157$0R SEM #REPLACE 02760w01 SAF-BNET * Switch token version (ver-id) will be "19". #ADD 02760$02 SAF-BNET 02 orig-e-com-sec-lvl-ind pic 9(3). 02 e-com-sec-downgrade-rsn pic 9. 02 advc-detl-txt pic x(53). 02 user-fld-aci pic x. #ENDSCN = SW0K217 !#CMP2.28 08/15/16 BNETG 60100FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60100 * ******************************************************************************** #SCN = SW0K218 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O000260D ! 15AUG2016 bensone ! Symptom: Banknet Release 16.Q4 Functional Enhancements ! Problem: None ! Fix: Add define pos^pin^chng^d to identify an internal PIN ! change transaction. Add new literal new^pin^field^l ! to identify DE 125. Remove references to obsolete POS ! Entry Mode values. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN, RQCPFS, SCRNCPF, SVCPFS ! BA60DDL: DDLATTKN, DDLBATKN, DDLFCPF, DDLPCNST, ! DDLPSTKN ! BA60LIB: BALIBTBL ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, ! PSTKNCVS, PSTKNID ! PS60IRTA: RTAUEMVG, RTAUEMVS ! PS60RTAU: AUTHLIBS, AUTHS, RTAUG ! PS60SPDH: ASPDHG, ASPDHS, CNFSCRNS, RQACNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60IPBN: IPBNDDLS, IPBNM, IPBNMM, IPBNREFS, RUNIPBNR ! New file: SW60IPBN.PRODTBL ! Run Make. ! Replace files: ! BA60LOGM: PSSPDH ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! SW60IPBN: IPBNMAN ! New files: ILB0816M, ILB0816R, ILB0816S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0816M. Run the ILF conversion using ILB0816R. ! Reference: WO #008527 #ADD E0016604 define pos^pin^chng^d( x ) = ( x.tran.tran^cde = "33" ) #; #DELETE C0023305 #DELETE G0023302 #DELETE J0023302 #ADD L002450C literal new^pin^field^l = 125; #DELETE 01366&01 #DELETE 01366&04 #DELETE 01366r07 #DELETE 01366103/01366104 #ENDSCN = SW0K218 !#CMP2.28 08/15/16 BNETLIBS6269 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6269 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6269 * ******************************************************************************** #SCN = SW0K219 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6269 #NEWVERSION = 6270 #ADD 07850^0B ! 15AUG2016 bensone ! Symptom: Banknet Release 16.Q4 Functional Enhancements ! Problem: None ! Fix: Global 509 - Downgrading MasterCard SecureCode ! Transactions Without an Accountholder Authentication ! Value. ! Global 582 - MasterCard Digital Enablement Service Data ! Enhancements, ! U.S. 515 - Safety and Security Roadmap. ! Support of POS PIN Change. ! Removal of Support for Obsolete POS Entry Modes. ! Added proc: pstm^frmt^pin^chng^to^xrqst ! Modified procs: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! pstm^frmt^tran^to^sem^proc^cde ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN, RQCPFS, SCRNCPF, SVCPFS ! BA60DDL: DDLATTKN, DDLBATKN, DDLFCPF, DDLPCNST, ! DDLPSTKN ! BA60LIB: BALIBTBL ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, ! PSTKNCVS, PSTKNID ! PS60IRTA: RTAUEMVG, RTAUEMVS ! PS60RTAU: AUTHLIBS, AUTHS, RTAUG ! PS60SPDH: ASPDHG, ASPDHS, CNFSCRNS, RQACNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60IPBN: IPBNDDLS, IPBNM, IPBNMM, IPBNREFS, RUNIPBNR ! New file: SW60IPBN.PRODTBL ! Run Make. ! Replace files: ! BA60LOGM: PSSPDH ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! SW60IPBN: IPBNMAN ! New files: ILB0816M, ILB0816R, ILB0816S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0816M. Run the ILF conversion using ILB0816R. ! Reference: WO #008527 #ADD 09286g00 SUB^LOG^ERROR sem.proc^cde <> sem^pin^chng^d and #ADD 09286g04 SUB^LOG^ERROR ( sem.proc^cde = sem^pin^chng^d and sem.merch^typ <> manual^cash^disbursement^d ) or #ADD 09299i04 SUB^LOG^ERROR sem.proc^cde = sem^pin^chng^d or #ADD 09315 SUB^LOG^ERROR if sem.proc^cde = sem^pin^chng^d then begin sem.pos^entry^mde ':=' chip^read & accepts^pins^d; end; #ADD 10194e0T SUB^LOG^ERROR if pos^pin^chng^d( pstm ) then begin if pin^bit^d and emv^data^bit^d then begin if not pstm^frmt^pin^chng^to^xrqst( sem, pstm ) then begin return sub^log^error( new^pin^field^l, 0 ); end; end else begin ! ! ! PIN Change requests are only allowed for EMV ! ! transactions with a PIN; therefore EMV REQUEST token ! ! must be present, otherwise transaction is invalid. ! ! ! return sub^log^error( pin^data^field^l, emv^data^field^l ); end; end; #ADD 12955 PSTM^FRMT^INSTL^PMNT^TO^SEM ?section pstm^frmt^pin^chng^to^xrqst ?page "pstm^frmt^pin^chng^to^xrqst" !##################################################################### !# # !# pstm^frmt^pin^chng^to^xrqst # !# # !# This procedure validates and formats the BASE24 PIN Change token # !# data into the external message format. # !# # !# INPUT PARAMETERS: # !# sem - External authorization response. # !# pstm - BASE24 internal message. # !# # !# OUTPUT PARAMETERS: # !# pstm - BASE24 internal message. # !# # !# RETURN: # !# True - Success # !# False - Failure # !# # !##################################################################### int proc pstm^frmt^pin^chng^to^xrqst( sem, pstm ); int .sem( sem^def ); int .pstm( pstm^def ); begin wlform( err^get^tkn, "UNABLE TO RETRIEVE TOKEN \\ " ) int new^epin^lgth; int new^ipin^lgth; int ofst := 0; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int .pinc^tkn( pinc^tkn^def ); int sec^cntl^lgth; int sec^dev^resp := 0; int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^lgth; string err^flg; string .pan[ 0:27 ]; string .pin^buffer[ 0:15 ]; string tkn^id[ 0:1 ]; ! ! If transaction is not a PIN Change then return to the calling ! procedure to continue processing. ! if not pos^pin^chng^d( pstm ) then begin return true; end; tkn^id ':=' pinc^tkn^id^d; if base24^rel^g < 5 or not hiswtkn^get^tkn( pstm, tkn^id, @pinc^tkn, tkn^lgth ) then begin call log^message^( 4037, ! routing code !, @err^get^tkn, net.myname, evt^msg^severity^err^l, @tkn^id ); return false; end; call hiswutil^extract^track2^info( pstm.tran.track2, $len( pstm.tran.track2 ), pan, pan^lgth ); ! ! Convert the PIN from internal to external format if new PIN has ! been entered (zeroes is a valid PIN) and PIN length is a valid ! numeric. Return an ATM format error if any of these conditions ! are not met or if the conversion fails. ! if pinc^tkn.new^pin^1 = blanks for $len( pinc^tkn.new^pin^1 ) or not ascii^integer^( pinc^tkn.new^pin^size, new^ipin^lgth ) or not util^frmt^int^pin^to^ext^pin( pin^buffer, new^epin^lgth, pan, pan^lgth, pinc^tkn.new^pin^1, new^ipin^lgth, pstm.pin^key, pinc^tkn.new^pin^frmt, pstm.ansi^ofst, pstm.pinpad^char, pstm.originator, sec^dev^resp, pstm.user^key ) then begin ! ! PIN formatting failed. ! if sec^dev^resp = sanity^chk^err^l then begin movd( err^flg, err^flg^sanity^d ); end else if sec^dev^resp = sec^resp^device^err^l or sec^dev^resp > sec^resp^pin^lgth^err^l then begin movd( err^flg, "0" ); end else begin movd( err^flg, "P" ); end; if err^flg <> " " then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, ofst, false, ! tkn^lgth !, pstm.data^flag, err^flg ); end; return false; end; call hexchar^binary( pin^buffer, new^epin^lgth, sem.new^pin^data ); new^pin^bit^d := 1; return true; end; ! of proc pstm^frmt^pin^chng^to^xrqst #ADD 13919 PSTM^FRMT^SEM^ADDL^DATA if ps51^tkn^found and ps51^get^tkn.mrch^srvc^rqst = "1" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. mrch^txn^fraud^score^ind, "1" ); end; #ADD 15010 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE literal b24^pos^number^tran^types^l = 13, #DELETE 15011 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE #ADD 15040 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE "92", "33", ! PIN change #ADD 15064 PSTM^FRMT^TRAN^TO^SEM^PROC^CDE sem.proc^cde = sem^pin^chng^d or #ADD 17552 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde = remote^ecomm^d then begin movd( pstm.pt^srv^entry^mde, pan^auto^cntctlss^m^chip ); end #DELETE 17553 /17571 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM #ADD 17941 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 40, #DELETE 17942 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 17982 SEM^FRMT^RESP^CDE^TO^PSTM "70",! Contact card issuer ! "088",! Place call for rfrl! "71",! PIN not changed ! "074",! Unable to process ! #ADD 17995 SEM^FRMT^RESP^CDE^TO^PSTM "89",! Unacceptable PIN, retry ! "201",! Incorrect PIN ! #ADD 18414*0G SEM^FRMT^XRESP^TO^PSTM^0210 wlform( tkn^no^room, "No space in (P)STM for token ID '\\'" ','" PAN : \?, Seq Num : \\\\\\\\\\\\ " ) wlform( tkn^err^add, "Unable to add token ID '\\' to (P)STM," ','" PAN : \?, Seq Num : \\\\\\\\\\\\, Error : # ") wlform( tkn^err^updt, "Unable to update token ID '\\' in (P)STM, " ','"PAN : \?, Seq Num : \\\\\\\\\\\\, Error : # ") #ADD 18460*02 SEM^FRMT^XRESP^TO^PSTM^0210 int fnd^fraud^data^tkn := false; int .fraud^data^tkn( fraud^data^tkn^def ); int fraud^data^tkn^lgth := 0; #ADD 18477*03 SEM^FRMT^XRESP^TO^PSTM^0210 int sec^srvcs^info^lgth := 0; int temp^lgth := 0; #ADD 19395G0R SEM^FRMT^XRESP^TO^PSTM^0210 move( pan^mapping^get^tkn.prod^cde, sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag^data ); #ADD 19395G0o SEM^FRMT^XRESP^TO^PSTM^0210 move( pan^mapping^tkn.prod^cde, sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag^data ); #ADD 19395G1c SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info. sec^srvc^acq^sub^fld^57.tag = "57" or sem.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag = "55" then begin tkn^id ':=' fraud^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, fraud^data^tkn ); movd( fraud^data^tkn.frmt^cde, "02" ); tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ); if sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. tag = "55" then begin ! ! Move the fraud scoring data into the switch token ! move( fraud^data^tkn.bnet.fraud^data.score, sem.addl^data.info. mrch^fraud^scoring^sub^fld^55. fraud^score.tag^data ); move( fraud^data^tkn.bnet.fraud^data.rsn^cde, sem.addl^data.info. mrch^fraud^scoring^sub^fld^55. score^rsn^cde.tag^data ); end; ! of subfield tag = "55" if sem.addl^data.info.sec^srvc^acq^sub^fld^57. tag = "57" then begin ! ! Determine the total length of data in 1 occurrence ! of DE 48 SE 57 ! sec^srvcs^info^lgth := $len( sem.addl^data.info. sec^srvc^acq^sub^fld^57.tag^data ); ! ! Determine the total length of data in DE 48 SE 57 ! call ascii^integer^( sem.addl^data.info. sec^srvc^acq^sub^fld^57.lgth, temp^lgth ); ! ! Determine the total number of services sent in DE 48 ! SE 57 ! if sec^srvcs^info^lgth > 0 then begin num^srvcs := temp^lgth / sec^srvcs^info^lgth; end else begin num^srvcs := 0; end; call integer^ascii^( fraud^data^tkn.bnet.sec^srvc.num^srvcs, num^srvcs ); movl( fraud^data^tkn.bnet.sec^srvc.info, sem.addl^data.info.sec^srvc^acq^sub^fld^57. tag^data, temp^lgth ); tkn^add^lgth := tkn^add^lgth + $len( fraud^data^tkn.bnet. sec^srvc.num^srvcs ) + ( sec^srvcs^info^lgth * num^srvcs ); end; ! ! Add the Fraud Data token to the internal message ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the Fraud Data token ! if tkn^result = tkn^exist^l then begin fnd^fraud^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1745, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^fraud^data^tkn then begin call log^message^( 1746, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1746 ); end else begin call log^message^( 1747, ! routing code !, @tkn^err^updt, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1747 ); end; end; ! of if tkn^result end; ! of if ( DE 48 SE 57 or DE 48 SE 55 ) #ADD 21397M0R SEM^FRMT^XRQST^TO^PSTM^0200 move( pan^mapping^get^tkn.prod^cde, sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag^data ); #ADD 21397M0o SEM^FRMT^XRQST^TO^PSTM^0200 move( pan^mapping^tkn.prod^cde, sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag^data ); #ADD 21397*05 SEM^FRMT^XRQST^TO^PSTM^0200 tag = "49" or ( ntwk^tkn^srvc^tkn.frmt^cde = "01" and ( sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag = "04" or sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag = "34" ) ) then #DELETE 21397*06 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21397*0X SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag = "04" then begin ! ! ! Product Code ! ! ! call ascii^integer^( sem.addl^data.info. paypass^mapping^sub^fld^33. prod^cde.lgth, lgth ); lgth := lgth + 4; movd( sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag, "S4" ); movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde, lgth ); movd( sem.addl^data.info.paypass^mapping^sub^fld^33. prod^cde.tag, "04" ); idx := idx + lgth; end; ! of if prod^cde.tag = "04" #ADD 21397*10 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34. tag = "34" then begin ! ! ! ATC Information ! ! ! call ascii^integer^( sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. lgth, lgth ); lgth := lgth + 4; movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.addl^data.info.dyn^atc^cvc3^info^sub^fld^34, lgth ); idx := idx + lgth; end; ! of if dyn^atc^cvc3^info^sub^fld^34.tag = "34" #DELETE 22187#00/22187#03 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22206 SEM^FRMT^XRQST^TO^PSTM^0200 else if ( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "242" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "246" ) then begin ! ! ! Fully authenticated SecureCode transaction ! ! Secure electronic commerce transaction ! ! ! movd( ps51^tkn^data.e^com^flg, "5" ); end #ADD 26021v0P TRACE^SEM ! ! ! Security Services Additional Data for Acquirers ! ! ! if hdr.addl^data.info. sec^srvc^acq^sub^fld^57.tag = "57" then begin call ascii^integer( hdr.addl^data.info. sec^srvc^acq^sub^fld^57.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. sec^srvc^acq^sub^fld^57.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! of if tag = "57" #ADD 26693 TRACE^SEM ! ! Merchant Fraud Scoring Data ! if hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. tag = "55" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - Fraud Score ! if hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. fraud^score.tag = "01" then begin call ascii^integer( hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. fraud^score.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. fraud^score.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! Move Subfield 2 - Score Reason Code ! if hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. score^rsn^cde.tag = "02" then begin call ascii^integer( hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. score^rsn^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^fraud^scoring^sub^fld^55. score^rsn^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! end; ! of if hdr...tag = "55" #ADD 28022v00 TRACE^SEM if ptr[ length ] = "55" then begin ! ! Fraud Scoring Data ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Fraud Score ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^fraud^scoring^sub^fld^55. fraud^score.tag ); end ! subfield 01 ! else ! ! Move Subfield 2 - Score Reason Code ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^fraud^scoring^sub^fld^55. score^rsn^cde.tag ); end ! subfield 02 ! else ! ! bad data, clear sem de-48.se-55, ! end loop ! begin init( sem^ptr.addl^data.info. mrch^fraud^scoring^sub^fld^55, " ", $len( sem^ptr.addl^data.info. mrch^fraud^scoring^sub^fld^55 )); loop^lgth := tag^length; end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "55" else #ADD 28022v0C TRACE^SEM if ptr[ length ] = "57" then begin movl( sem^ptr.addl^data.info. sec^srvc^acq^sub^fld^57.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end ! of if ptr[ length ] = "57" ! else #ADD 36343*00 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "19"; #DELETE 36343*01 UTIL^SWI^TKN^INIT #ADD 36373 UTIL^SWI^TKN^INIT move( bnet^tkn^buf.advc^detl^txt, sem.advice^cde.detail^txt ); #ADD 36380 UTIL^SWI^TKN^INIT mov^( bnet^tkn^buf.advc^detl^txt, blanks ); #ADD 36545 UTIL^SWI^TKN^INIT move( bnet^tkn^buf.orig^e^com^sec^lvl^ind, sem.addl^data.info.ecom^sec^sub^fld^42. orig^lvl^of^sec ); move( bnet^tkn^buf.e^com^sec^downgrade^rsn, sem.addl^data.info.ecom^sec^sub^fld^42. downgrade^rsn ); #ADD 36625 UTIL^SWI^TKN^INIT end else if sem.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag = "55" then begin move( bnet^tkn^buf.fraud^data.score, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. fraud^score.tag^data ); move( bnet^tkn^buf.fraud^data.rsn^cde, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. score^rsn^cde.tag^data ); move( bnet^tkn^buf.fraud^data.rule^adj^score, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. subfield^3.tag^data ); move( bnet^tkn^buf.fraud^data.rule^rsn^cde^1, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. subfield^4.tag^data ); move( bnet^tkn^buf.fraud^data.rule^rsn^cde^2, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55. subfield^5.tag^data ); #ADD 37095*07 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.orig^e^com^sec^lvl^ind <> blanks for $len( bnet^tkn^buf.orig^e^com^sec^lvl^ind ) then begin movl( bnet^tkn.orig^e^com^sec^lvl^ind, bnet^tkn^buf.orig^e^com^sec^lvl^ind, $len( bnet^tkn.orig^e^com^sec^lvl^ind ) ); end; ! of if bnet^tkn^buf.orig^e^com^sec^lvl^ind ! if bnet^tkn^buf.e^com^sec^downgrade^rsn <> blanks for $len( bnet^tkn^buf.e^com^sec^downgrade^rsn ) then begin movl( bnet^tkn.e^com^sec^downgrade^rsn, bnet^tkn^buf.e^com^sec^downgrade^rsn, $len( bnet^tkn.e^com^sec^downgrade^rsn ) ); end; ! of if bnet^tkn^buf.e^com^sec^downgrade^rsn ! if bnet^tkn^buf.advc^detl^txt <> blanks for $len( bnet^tkn^buf.advc^detl^txt ) then begin movl( bnet^tkn.advc^detl^txt, bnet^tkn^buf.advc^detl^txt, $len( bnet^tkn.advc^detl^txt ) ); end; ! of if bnet^tkn^buf.advc^detl^txt ! #ENDSCN = SW0K219 !#CMP2.28 08/15/16 BNETS 6132 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6132 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6132 * ******************************************************************************** #SCN = SW0K221 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6132 #NEWVERSION = 6133 #ADD 03821f0W ! 15AUG2016 bensone ! Symptom: Banknet Release 16.Q4 Functional Enhancements ! Problem: None ! Fix: Support of POS PIN Change. ! Modified procs: pstm^0200^route ! pstm^0220^force^post ! pstm^0420^reversal ! Dependency: Apply fixes to: ! BA60AFT: COBTKN, RQCPFS, SCRNCPF, SVCPFS ! BA60DDL: DDLATTKN, DDLBATKN, DDLFCPF, DDLPCNST, ! DDLPSTKN ! BA60LIB: BALIBTBL ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, ! PSTKNCVS, PSTKNID ! PS60IRTA: RTAUEMVG, RTAUEMVS ! PS60RTAU: AUTHLIBS, AUTHS, RTAUG ! PS60SPDH: ASPDHG, ASPDHS, CNFSCRNS, RQACNFS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! SW60IPBN: IPBNDDLS, IPBNM, IPBNMM, IPBNREFS, RUNIPBNR ! New file: SW60IPBN.PRODTBL ! Run Make. ! Replace files: ! BA60LOGM: PSSPDH ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! SW60IPBN: IPBNMAN ! New files: ILB0816M, ILB0816R, ILB0816S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0816M. Run the ILF conversion using ILB0816R. ! Reference: WO #008527 #ADD 15746 SUB^PSTM^ROUTE substate = sub^fail^pre^auth^l or pos^pin^chng^d( pstm ) then #DELETE 15747 SUB^PSTM^ROUTE #ADD 16119 PSTM^0220^FORCE^POST pos^pin^chng^d( pstm ) or #ADD 16840W01 PSTM^0420^REVERSAL ( sem.proc^cde.byte[ 0 ] = sem^purchase^d and not sem^fncl^txn^d( sem ) ) then #DELETE 16840W02 PSTM^0420^REVERSAL #ENDSCN = SW0K221 !#CMP2.28 08/22/16 BNETS 6133 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6133 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6133 * ******************************************************************************** #SCN = SW0K261 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6133 #NEWVERSION = 6134 #ADD 03821g0W ! 23AUG2016 wielerk ! Symptom: Initialization takes an inordinate amount of time when ! Format 2 ILF is configured. ! Problem: Code that would set last address to EOF is missing for ! Format 2 files allowing a full reading of the ILF. ! Fix: Add logic to set ILF last addr to EOF. ! Modified proc: init^ilf^review ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #2380194. #ADD 11810 SUB^ALIGN^TRACE^NUM if last^addr^frmt2 <= 0f then begin ! ! something wrong with last^addr^frmt2, set to eof ! ferror := hiswfile^position( fnum, ! record specifier !, ! allowable error !, ! allowable error !, -1f ); last^addr^frmt2 := -1f; ! ! add to temp^trace as though a header update was imminent ! temp^trace := temp^trace + ( incr^trc^num^g * $dbl( pct.max^tran^updt ) ); end; #REPLACE 11822 /11822 OFFSET 0 SUB^ALIGN^TRACE^NUM if pct.ilf[ index ].fcb.file^frmt = 2 and last^addr^frmt2 > 0f then #ENDSCN = SW0K261 !#CMP2.28 09/02/16 BNETLIBS6270 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6270 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6270 * ******************************************************************************** #SCN = SW0K272 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6270 #NEWVERSION = 6271 #ADD 07850`0m ! 02SEP2016 bensone ! Symptom: DE 48 SE 42, SE 43, SE 44 and SE 96 are being sent in ! reversal request messages to MasterCard. ! Problem: There are no CIS requirements to include these ! subelements. ! Fix: Exclude DE 48 SEs 42, 43, 44, 96 when generating a ! reversal from an internal 0420 message. ! Proc modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2383725. #DELETE 11787 /11835 PSTM^FRMT^0420^TO^ACQ^XRVSL #DELETE 11885M00/11886 PSTM^FRMT^0420^TO^ACQ^XRVSL #ENDSCN = SW0K272 !#CMP2.28 09/09/16 BNETLIBS6271 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6271 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6271 * ******************************************************************************** #SCN = SW0K275 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6271 #NEWVERSION = 6272 #ADD 07850~0B ! 09SEP2016 VenugopalV ! Symptom: BNET status inquiry denied on negative balance. ! Problem: Purchase Account status Inquiry transactions are ! getting declined on negative available ! balance because Purchase ASI trsactions are processed ! as normal purchase transaction with zero amount. ! Fix: Modified code to process the Purchase ASI trasaction ! as Card verification transation so that the transaction ! will be getting approved eventhough the available ! balances are negative. ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2340886. #ADD 17782M00 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN if ( sem^atc^update^d( sem ) or sem^test^recur^pmnt^d ( sem ) or ( sem^acct^stat^inq^d( sem ) and sem.tran^amt = zeroes for $len( sem.tran^amt ) ) ) then #DELETE 17782M01/17782M02 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ENDSCN = SW0K275 !#CMP2.28 09/13/16 BNETLIBS6272 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6272 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6272 * ******************************************************************************** #SCN = SW0K277 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6272 #NEWVERSION = 6273 #ADD 07850(0E ! 13SEP2016 wielerk ! Symptom: Process abends collapsing a 0410 to MasterCard. ! Problem: When collapsing the SEM, the address of ptr is %77776 ! at the point of collapsing the length of DE-48 and the ! add statement is signed. ! Fix: Modified the add statement to be unsigned. ! Proc modified: util^collapse^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2400621. #REPLACE 25598 TRACE^SEM @ptr := @ptr '+' length; #ENDSCN = SW0K277 !#CMP2.28 09/13/16 BNETG 60101FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60101 * ******************************************************************************** #SCN = SW0K278 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P000260W ! 13SEP2016 gruberg ! Symptom: Per MasterCard August 18th updates to Global 529 in ! Release 16.Q4, MasterCard is lifting a restriction that ! incremental authorizations only be supported by T&E ! merchants. ! Problem: The interface currently restricts support of incremental ! authorizations to T&E merchants. ! Fix: Remove the defines SEM^T^AND^E^D and POS^T^AND^E^D that ! identify T&E merchants. ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: Case #2387758 #DELETE 00166808/00166>00 #DELETE 00233105/I0023302 #ENDSCN = SW0K278 !#CMP2.28 09/13/16 BNETLIBS6273 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6273 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6273 * ******************************************************************************** #SCN = SW0K279 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6273 #NEWVERSION = 6274 #ADD 07850)0A ! 13SEP2016 gruberg ! Symptom: Per MasterCard August 18th updates to Global 529 in ! Release 16.Q4, MasterCard is lifting a restriction that ! incremental authorizations only be supported by T&E ! merchants. ! Problem: The interface currently restricts support of incremental ! authorizations to T&E merchants. ! Fix: Remove the code that restricts processing of incremental ! authorizations to T&E merchants. ! Procs modified: pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^ilf^get ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: Case #2387758 #REPLACE 13867 PSTM^FRMT^SEM^ADDL^DATA if sem.proc^cde = sem^purchase^d then #DELETE 13869 /13871 PSTM^FRMT^SEM^ADDL^DATA #DELETE 19232 /19235 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20993 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.typ = sem^auth^request^d and sem.proc^cde = sem^purchase^d and sem^fncl^txn^d( sem ) and not sem^preauth^match^d( sem ) and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. final^auth^ind <> "1" ) then #DELETE 20994 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21014 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^incr^auth^d( sem ) then #DELETE 21015 /21016 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31442 UTIL^ILF^GET int fnd^ichg^compliance^tkn := false; #ADD 31443 UTIL^ILF^GET int .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 31446 UTIL^ILF^GET int tkn^lgth; string tkn^id[ 0:1 ]; #REPLACE 31507M01 SUB^ILF^GET^REDUCED^PRIKEY ( ( fnd^ichg^compliance^tkn and #ADD 31605=00 SUB^ILF^GET tkn^id ':=' ichg^compliance^tkn^id^d; if base24^rel^g >= 5 then begin fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^tkn, tkn^lgth ); end; ! of base24^rel^g >= 5 #ENDSCN = SW0K279 !#CMP2.28 09/13/16 BNETS 6134 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6134 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6134 * ******************************************************************************** #SCN = SW0K280 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6134 #NEWVERSION = 6135 #ADD 03821h0A ! 09SEP2016 gruberg ! Symptom: Per MasterCard August 18th updates to Global 529 in ! Release 16.Q4, MasterCard is lifting a restriction that ! incremental authorizations only be supported by T&E ! merchants. ! Problem: The interface currently restricts support of incremental ! authorizations to T&E merchants. ! Fix: Remove the code that restricts processing of incremental ! authorizations to T&E merchants. ! Procs modified: pstm^0200^request ! pstm^0220^force^post ! sem^acq^rvsl^rqst^pos ! sem^reversal^advice^pos ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: Case #2387758 #REPLACE 15542V02 SUB^APPRV^BLIND sem^incr^auth^d( sem ) then #REPLACE 15583V01 SUB^APPRV^BLIND if pos^purch^adjust^d( pstm ) then #REPLACE 16269V02 PSTM^0220^FORCE^POST sem^incr^auth^d( sem ) then #REPLACE 16339V01 PSTM^0220^FORCE^POST if pos^purch^adjust^d( pstm ) then #REPLACE 17976V03 FRMT^AND^SEND^ACQ^RVSL^RESP sem^incr^auth^d( sem ) then #REPLACE 17976V09 FRMT^AND^SEND^ACQ^RVSL^RESP not sem^incr^auth^d( sem ) then #REPLACE 22637V02 SUB^PROCESS^UNMATCHD^POS^RVSL if sem^incr^auth^d( sem ) and #ENDSCN = SW0K280 !#CMP2.28 09/16/16 BNETLIBS6274 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6274 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6274 * ******************************************************************************** #SCN = SW0K284 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6274 #NEWVERSION = 6275 #ADD 07850{0G ! 16SEP2016 wielerk ! Symptom: Interface sets fee amounts incorrectly. ! Problem: When a full reversal is sent inbound to Base24, the fee ! amount is still set in the Surcharge token. If such a ! reversal is passed out of Base24 via BIC ISO, DE-95 ! ( replacement amounts ) is sent with all zeroes and ! the Surcharge token fee amount and the field should ! be toggled off by BIC ISO for being all zeroes. ! Fix: Added code to set tran fee to 0f in the Surcharge token ! when formatting a reversal without DE-95. ! Proc modified: sem^frmt^fee^to^pstm^fee ! Dependency: Apply fixes to BNETLIBS and SW60ABNT.BNETATMS. ! Run Make. ! Reference: Case #2398043. #REPLACE 17032 /17032 OFFSET 0 SEM^FRMT^FEE^TO^PSTM^FEE if sem.typ = sem^auth^request^d or ! 0100 ! sem.typ = sem^auth^advice^d then ! 0120 ! #DELETE 17049 SEM^FRMT^FEE^TO^PSTM^FEE #REPLACE 17050 SEM^FRMT^FEE^TO^PSTM^FEE if sem.typ = sem^acq^rvsl^rqst^d or #REPLACE 17073 /17073 OFFSET 0 SEM^FRMT^FEE^TO^PSTM^FEE end else begin temp^orig^fee := temp^tran^fee; end; #ADD 17075 SEM^FRMT^FEE^TO^PSTM^FEE if not replace^amt^bit^d then begin temp^tran^fee := 0f; end; #ENDSCN = SW0K284 !#CMP2.28 10/18/16 BNETLIBS6275 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6275 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6275 * ******************************************************************************** #SCN = SW0K304 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6275 #NEWVERSION = 6276 #ADD 07850}0F ! 18OCT2016 bensone ! Symptom: Interface sets date incorrectly. ! Problem: When a 0400 reversal is sent inbound to Base24, if ! DE 90 is present, but rvsl.orig.dat^tim and/or ! rvsl.orig.trace contain zeros, data can be set ! incorrectly. ! Fix: Since MasterCard has started to allow reversals to be ! sent many weeks after the original authorization these ! values are now valid. If either field contains zeros, ! then the processing performed will be the same as that ! currently performed when DE 90 is not present. ! Proc modified: sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fix to BNETLIBS. ! Run Make. ! Reference: Case #2418721. #ADD 18136 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if orig^data^bit^d and rvsl.orig.dat^tim <> [ $len( rvsl.orig.dat^tim ) * [ "0" ] ] and rvsl.orig.trace <> [ $len( rvsl.orig.trace ) * [ "0" ] ] then #DELETE 18137 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ENDSCN = SW0K304 !#CMP2.28 11/28/16 BNETLIBS6276 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6276 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6276 * ******************************************************************************** #SCN = SW0K316 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6276 #NEWVERSION = 6277 #ADD 0785000G ! 28NOV2016 VenugopalV ! Symptom: Banknet Release 17.Q1 Functional Enhancements. ! Problem: None. ! Fix: 1. The interface has been updated to support receipt of ! DE 112,SE 30 in 0100 and 0400 messages inbound from the ! network with the total length of 138 positions. ! 2. In the SEM DDL, new subfields for SE 30 has been ! added to the DE 112 definition. ! 3. New fields has been added to the JP-BNET ! re-definition in the Intra-Country Data Token ! (Token ID = "S0"), to hold the additional data passed ! in DE 112 SE 30. ! Proc modified: sem^frmt^natl^data^to^pstm ! Dependency: Apply fix to: ! BA60DDL: DDLBATKN ! SW60BNET: BNETDDLS, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETUPDT ! Reference: WO #008675. #ADD 17092+02 SEM^FRMT^NATL^DATA^TO^PSTM move( intra^cntry^data^tkn.jp^bnet.acq^co^cde, sem.adnl^data^natl.jp.sub^fld^30.tag^data.acq^co^cde ); move( intra^cntry^data^tkn.jp^bnet.iss^co^cde, sem.adnl^data^natl.jp.sub^fld^30.tag^data.iss^co^cde ); move( intra^cntry^data^tkn.jp^bnet.auth^xmit^mde, sem.adnl^data^natl.jp.sub^fld^30.tag^data. auth^xmit^mde ); move( intra^cntry^data^tkn.jp^bnet.entry^ind, sem.adnl^data^natl.jp.sub^fld^30.tag^data.entry^ind ); move( intra^cntry^data^tkn.jp^bnet.auth^typ, sem.adnl^data^natl.jp.sub^fld^30.tag^data.auth^typ ); move( intra^cntry^data^tkn.jp^bnet.apprv^num, sem.adnl^data^natl.jp.sub^fld^30.tag^data.apprv^num ); move( intra^cntry^data^tkn.jp^bnet.sales^slip^num, sem.adnl^data^natl.jp.sub^fld^30.tag^data. sales^slip^num ); move( intra^cntry^data^tkn.jp^bnet.rvsl^rfnd^sales^slip^num, sem.adnl^data^natl.jp.sub^fld^30.tag^data. rvsl^rfnd^slip^num ); move( intra^cntry^data^tkn.jp^bnet.tax^amt, sem.adnl^data^natl.jp.sub^fld^30.tag^data.tax^amt ); move( intra^cntry^data^tkn.jp^bnet.local^txn^dat, sem.adnl^data^natl.jp.sub^fld^30.tag^data. local^txn^dat ); #ADD 17092*7a SEM^FRMT^NATL^DATA^TO^PSTM if intra^cntry^data^tkn.jp^bnet.err^cde <> [ $len( intra^cntry^data^tkn.jp^bnet.err^cde ) * [" "] ] then begin tkn^add^lgth := $offset( intra^cntry^data^tkn.jp^bnet. acq^co^cde ); end else begin tkn^add^lgth := $offset( intra^cntry^data^tkn.jp^bnet. user^fld^jp^bnet ); end; #DELETE 17092*7b/17092*7c SEM^FRMT^NATL^DATA^TO^PSTM #ADD 23969*01 SEM^FRMT^XRVSL^TO^PSTM^0420 ( rvsl.adnl^data^natl.jp.sub^fld^30.tag = "030" or rvsl.adnl^data^natl.jp.sub^fld^31.tag = "031" ) then #DELETE 23969*02/23969*03 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 23969*08 SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl ); #DELETE 23969*09 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0K316 !#CMP2.28 11/28/16 BNETDDLS6057 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6057 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6057 * ******************************************************************************** #SCN = SW0K317 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6057 #NEWVERSION = 6058 #ADD 00262*0b * 28NOV2016 venugopalv * Symptom: Banknet Release 17.Q1 Functional Enhancements * Problem: None * Fix: New Sub-fields has been added to the DE 112 SE 30. * Dependency: Apply fixes to: * BA60DDL : DDLBATKN * SW60BNET: BNETDDLS, BNETLIBS * SW60IPBN: IPBNREFS * Run Make. * Replace file: * SW60BNET: BNETUPDT * Reference: WO #008675 #ADD 01411$1F SEM 10 acq-co-cde pic x(7). 10 iss-co-cde pic x(7). 10 auth-xmit-mde pic x(1). 10 entry-ind pic x(1). 10 auth-typ pic x(1). 10 apprv-num pic x(6). 10 sales-slip-num pic x(5). 10 rvsl-rfnd-slip-num pic x(5). 10 tax-amt pic x(7). 10 local-txn-dat pic x(8). #ADD 01411%04 SEM 06 user-fld-aci pic x(626). #DELETE 01411$1L SEM #ENDSCN = SW0K317 !#CMP2.28 12/06/16 BNETLIBS6277 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6277 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6277 * ******************************************************************************** #SCN = SW0K323 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6277 #NEWVERSION = 6278 #ADD 0785010L ! 07DEC2016 wielerk ! Symptom: Interface addresses a token incorrectly when formatting ! a response from Mastercard to Base24. ! Problem: When invoking tkn^get^info for the POS Merchant token ! ( CI ), the address sign ( @ ) is omitted. ! Fix: Added the address sign to the token param. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2475600. #REPLACE 19410 SEM^FRMT^XRESP^TO^PSTM^0210 @pos^mrch^tkn^ptr, #ENDSCN = SW0K323 !#CMP2.28 01/11/17 BNETLIBS6278 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6278 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6278 * ******************************************************************************** #SCN = SW0L002 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6278 #NEWVERSION = 6279 #ADD 0785020A ! 11JAN2017 venugopalv ! Symptom: Interface addresses the value of CRDHLDR-ID-METHOD in ! token C4 incorrectly for contactless transactions. ! Problem: The value of CRDHLDR-ID-METHOD in token C4 is set ! incorrectly in the request for contactless transactions. ! Fix: Code has been modified to set the value "1" for the ! field CRDHLDR-ID-METHOD in token C4 for contactless ! transactions. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2498335. #ADD 22100 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde <> chip^read and sem.pos^entry^mde <> pan^auto^cntctlss^m^chip and sem.pos^entry^mde <> pan^auto^cntctlss^mag^stripe then #DELETE 22101 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0L002 !#CMP2.28 01/17/17 BNETLIBS6279 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6279 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6279 * ******************************************************************************** #SCN = SW0L003 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6279 #NEWVERSION = 6280 #ADD 0785030C ! 17JAN2017 venugopalv ! Symptom: Interface addresses the value of CRDHLDR-ID-METHOD in ! token C4 incorrectly for contactless transactions. ! Problem: None. ! Fix: Code has been modified to not to set the value "1" for ! the field CRDHLDR-ID-METHOD in token C4 for contactless ! transactions. ! Modified the FIX statement as it was mentioned ! incorrectly in the previous history section. ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2498335. #ENDSCN = SW0L003 !#CMP2.28 02/19/17 BNETDDLS6058 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6058 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6058 * ******************************************************************************** #SCN = SW0L018 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6058 #NEWVERSION = 6059 #ADD 00262+0D * 20FEB2017 bensone * Symptom: BNET Release 17.Q2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * * Release 14.Q2 global 551: Chip Secured Remote Payment * * Global 522: Safety and security roadmap * * Global 542: MDES enhancements supporting new * transaction analysis capabilities and CVM models for * MCBP-based tokens * * Global 594: MasterCard support of Payment Account * Reference * * U.S. 558: State-owned lottery gaming payment * transactions * * Global operations bulletin no. 10: Identifying DSRP * transactions related to card-on-file tokenization for * merchants and commerce platforms * Updates: * - Correct DE 48 subelements that may contain non-numeric * characters but are defined as numeric * - Added DE 48 SE 27 to the SEM definition * - Added DE 48 SE 39 to the SEM definition * - Added DE 56 to the SEM definition * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEVMS * Run Make. * Replacement files: * BA60MISC: BAMISCTD, LCONFBA * SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT * New files: ILB0217M, ILB0217R, ILB0217S depend on the * BA10SC04 subvolume. Make the ILF conversion using * ILB0217M. Run the ILF conversion using ILB0217R. * Reference: WO #008669 #REPLACE 01103 SEM 08 cde pic x(2). #REPLACE 01107 SEM 08 result pic x. #REPLACE 01115 SEM 08 tag-data pic x. #REPLACE 01119 SEM 08 tag-data pic x. #REPLACE 01157E0P SEM 08 rqst-cmrcl-crd-typ pic x. #REPLACE 01157W0v SEM 08 tag-data pic x. #REPLACE 01157Y0J SEM 10 tag-data pic x. #REPLACE 01157Y0b SEM 08 tag-data pic x. #REPLACE 01157k0a SEM 10 tag-data pic x(3). #REPLACE 01157l09 SEM 10 tag-data pic x(2). #REPLACE 01157l0D SEM 10 tag-data pic x(3). #REPLACE 01157l0H SEM 10 tag-data pic x(2). #REPLACE 01157l0L SEM 10 tag-data pic x(2). #REPLACE 01157*0R SEM 10 tag-data pic x(3). #REPLACE 01157*0V SEM 10 tag-data pic x(2). #REPLACE 01157*0Z SEM 10 tag-data pic x(3). #REPLACE 01157*0d SEM 10 tag-data pic x(2). #REPLACE 01157*0h SEM 10 tag-data pic x(2). #REPLACE 01157m0F SEM 08 tag-data pic x(2). #REPLACE 01157r0O SEM 08 tag-data pic x. #ADD 01157$0Q SEM * * Additional Transaction Analysis * Subfield tag = 27 * Contains additional information about validation analysis * 06 txn-analysis-sub-fld-27. 08 tag pic 99. 08 lgth pic 99. 08 txn-disp. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 test-rslts. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3) occurs 29 times. * * Account Data Compromise Information * Subfield tag = 39 * Contains confirmed or suspected account data compromise event * information for account ranges * 06 acct-data-cmprms-sub-fld-39. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(30). 04 user-fld pic x(79). #DELETE 01157*0y/01157*0z SEM #ADD 01225b00 SEM * * Payment account data * bit map position = 56 * EBCDIC in transmission, variable in length * 02 pmnt-acct-data. 04 lgth pic 9(3). 04 se-01. 06 tag pic 99. 06 lgth pic 99. 06 pmnt-acct-ref. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(29). #ENDSCN = SW0L018 !#CMP2.28 02/19/17 BNETG 60102FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60102 * ******************************************************************************** #SCN = SW0L019 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q000260C ! 20FEB2017 bensone ! Symptom: BNET Release 17.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! * Release 14.Q2 global 551: Chip Secured Remote Payment ! * Global 522: Safety and security roadmap ! * Global 542: MDES enhancements supporting new ! transaction analysis capabilities and CVM models for ! MCBP-based tokens ! * Global 594: MasterCard support of Payment Account ! Reference ! * U.S. 558: State-owned lottery gaming payment ! transactions ! * Global operations bulletin no. 10: Identifying DSRP ! transactions related to card-on-file tokenization for ! merchants and commerce platforms ! Updates: ! - Add global deny^atm^cntctlss^txn^g for new LCONF param ! SW-BNET-DENY-ATM-CONTACTLESS-TXN ! - Sourced in par^tkn from BADDLTAL ! - Sourced in txn^analysis^tkn from BADDLTAL ! - Added pmnt^acct^data^bit^d for DE 56 ! - Added an entry to sem^bit^map^tbl^g for DE 56 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! BA60MISC: BAMISCTD, LCONFBA ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! New files: ILB0217M, ILB0217R, ILB0217S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0217M. Run the ILF conversion using ILB0217R. ! Reference: WO #008669 #ADD K000260K ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? cntctlss^txn^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? instl^resp^data^tkn ? intra^cntry^data^tkn ? iss^tknztn^data^tkn ? language^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^addl^data^tkn ? p2p^rcv^data^tkn ? p2p^sender^data^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? par^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? rcpt^data^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^analysis^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE L000260l/L000260l OFFSET 44 #ADD 0002620n ! par^tkn #ADD 0002620v ! txn^analysis^tkn #ADD B0043503 int deny^atm^cntctlss^txn^g; #ADD 00573O02 pmnt^acct^data^bit^d = pbit^map[3].<07> #, !bit 56 #ADD 00991O02 56, 3, sem^field( pmnt^acct^data ), #DELETE 00992 #ENDSCN = SW0L019 !#CMP2.28 02/19/17 BNETLIBS6280 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6280 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6280 * ******************************************************************************** #SCN = SW0L020 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6280 #NEWVERSION = 6281 #ADD 0785040C ! 20FEB2017 bensone ! Symptom: BNET Release 17.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! * Release 14.Q2 global 551: Chip Secured Remote Payment ! * Global 522: Safety and security roadmap ! * Global 542: MDES enhancements supporting new ! transaction analysis capabilities and CVM models for ! MCBP-based tokens ! * Global 594: MasterCard support of Payment Account ! Reference ! * U.S. 558: State-owned lottery gaming payment ! transactions ! * Global operations bulletin no. 10: Identifying DSRP ! transactions related to card-on-file tokenization for ! merchants and commerce platforms ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! BA60MISC: BAMISCTD, LCONFBA ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! New files: ILB0217M, ILB0217R, ILB0217S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0217M. Run the ILF conversion using ILB0217R. ! Reference: WO #008669 #ADD 09405s00 SUB^LOG^ERROR if sem.merch^typ = "7800" or sem.merch^typ = "7995" then #DELETE 09405s01 SUB^LOG^ERROR #ADD 13536k01 PSTM^FRMT^SEM^ADDL^DATA int ntwk^tkn^srvc^tkn^fnd; #ADD 14234 PSTM^FRMT^SEM^ADDL^DATA if ( ps51^get^tkn.e^com^flg >= "5" and ps51^get^tkn.e^com^flg <= "9" ) and pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip then begin movd( sem.pos^entry^mde, remote^ecomm^d ); end else #ADD 14806k01 PSTM^FRMT^SEM^ADDL^DATA ntwk^tkn^srvc^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^lgth ); if ntwk^tkn^srvc^tkn^fnd and not visa_tran_g and sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth = "1" then begin if ntwk^tkn^srvc^tkn.genrc.txn^typ = "1" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "24" ); end else if ntwk^tkn^srvc^tkn.genrc.txn^typ = "2" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "246" ); end else if ntwk^tkn^srvc^tkn.genrc.txn^typ = "3" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "247" ); end; end else if ntwk^tkn^srvc^tkn^fnd and visa_tran_g then #DELETE 14806k02/14806k04 PSTM^FRMT^SEM^ADDL^DATA #ADD 14806k1H PSTM^FRMT^SEM^ADDL^DATA end else if ntwk^tkn^srvc^tkn.genrc.txn^typ = "1" and sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth = "1" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "24" ); #ADD 14900W01 PSTM^FRMT^SEM^ADDL^DATA ( dgtl^wallet^tkn.wallet^ind^flg = "01" or dgtl^wallet^tkn.wallet^ind^flg = "10" ) then #DELETE 14900W02 PSTM^FRMT^SEM^ADDL^DATA #ADD 14927k06 PSTM^FRMT^SEM^ADDL^DATA if dgtl^wallet^tkn.wallet^ind^flg = "01" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "22" ); end else if dgtl^wallet^tkn.wallet^ind^flg = "10" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "24" ); end; #DELETE 14927k07/14927k08 PSTM^FRMT^SEM^ADDL^DATA #ADD 18420 SEM^FRMT^XRESP^TO^PSTM^0210 struct .par^tkn( par^tkn^def ); #ADD 18469G02 SEM^FRMT^XRESP^TO^PSTM^0210 int .par^get^tkn( par^tkn^def ); #ADD 18876 SEM^FRMT^XRESP^TO^PSTM^0210 else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "04" then begin movd( err^flg, "4" ); end #ADD 19286 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' ps51^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, ps51^tkn^lgth ) then begin fnd^ps51^tkn := true; if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" and sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind <> " " then begin move( ps51^get^tkn.authn^coll^ind, sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind ); end; end; #ADD 19291 SEM^FRMT^XRESP^TO^PSTM^0210 if fnd^ps51^tkn then #DELETE 19292 /19296 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 19395`2s SEM^FRMT^XRESP^TO^PSTM^0210 if pmnt^acct^data^bit^d then begin tkn^id ':=' par^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @par^get^tkn, tkn^lgth ) then begin move( par^get^tkn.par, sem.pmnt^acct^data.se^01.pmnt^acct^ref. tag^data ); end ! of update "SO" token else begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, par^tkn ); move( par^tkn.par, sem.pmnt^acct^data.se^01.pmnt^acct^ref. tag^data ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, par^tkn, $len( par^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1785, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 1786, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1786 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add end; ! of add "SO" token end; ! of if DE 56 is present #ADD 20389 SEM^FRMT^XRQST^TO^PSTM^0200 struct .par^tkn( par^tkn^def ); #ADD 20397 SEM^FRMT^XRQST^TO^PSTM^0200 struct .txn^analysis^tkn( txn^analysis^tkn^def ); #ADD 20402 SEM^FRMT^XRQST^TO^PSTM^0200 string crd^authn^ind := " "; #ADD 21334 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. crdhldr^auth = "4" then begin ! !Set Wallet Flag = 10 - Generic Wallet ! movd( dgtl^wallet^tkn.wallet^ind^flg, "10" ); move( dgtl^wallet^tkn.genrc^tkn^wallet.id, sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id ); end else begin ! !Set Wallet Flag = 01 - MasterCard Wallet ! movd( dgtl^wallet^tkn.wallet^ind^flg, "01" ); move( dgtl^wallet^tkn.wallet.id, sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id ); end; #DELETE 21335 /21343 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21397M00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.txn^analysis^sub^fld^27.tag = "27" then begin ! ! Add Transaction Analysis token (Id = 'SP') ! tkn^id ':=' txn^analysis^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, txn^analysis^tkn ); if sem.addl^data.info.txn^analysis^sub^fld^27. txn^disp.tag^data = "CI" then begin movd( txn^analysis^tkn.txn^disp, "01" ); end else if sem.addl^data.info.txn^analysis^sub^fld^27. txn^disp.tag^data = "CW" then begin movd( txn^analysis^tkn.txn^disp, "02" ); end else if sem.addl^data.info.txn^analysis^sub^fld^27. txn^disp.tag^data = "DI" then begin movd( txn^analysis^tkn.txn^disp, "11" ); end else if sem.addl^data.info.txn^analysis^sub^fld^27. txn^disp.tag^data = "DS" then begin movd( txn^analysis^tkn.txn^disp, "12" ); end; move ( txn^analysis^tkn.fiid, pct.typ ); move( txn^analysis^tkn.lgth, sem.addl^data.info.txn^analysis^sub^fld^27. test^rslts.lgth ); call ascii^integer^( sem.addl^data.info. txn^analysis^sub^fld^27. test^rslts.lgth, temp^lgth ); movl( txn^analysis^tkn.bnet.test^rslts, sem.addl^data.info.txn^analysis^sub^fld^27. test^rslts.tag^data, temp^lgth ); tkn^add^lgth := $offset( txn^analysis^tkn.bnet ) + temp^lgth; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^analysis^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1787, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1788, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1788 ); end; end; ! of if tkn^result end; ! of DE 48 SE 27 #ADD 21397v1i SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. acct^data^cmprms^sub^fld^39.tag = "39" or #REPLACE 21397v1j SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info. #ADD 21397v3C SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.acct^data^cmprms^sub^fld^39. tag = "39" then begin movl( fraud^data^tkn.bnet.acct^data^cmprms^info, sem.addl^data.info.acct^data^cmprms^sub^fld^39. tag^data.byte[ 6 ], 24 ); end; ! of tag = "39" #ADD 21398e00 SEM^FRMT^XRQST^TO^PSTM^0200 if pmnt^acct^data^bit^d then begin tkn^id ':=' par^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, par^tkn ); move( par^tkn.par, sem.pmnt^acct^data.se^01.pmnt^acct^ref. tag^data ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, par^tkn, $len( par^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1789, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end ! tkn^result = over^max^limit^l else begin call log^message^( 1790, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1790 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add end; ! of if DE 56 is present #ADD 22449|12 SEM^FRMT^XRQST^TO^PSTM^0200 "P" -> begin ! ! ! Invalid CVD ! ! ! movd( card^vrfy^flg, "C" ); end; #ADD 22501 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 <> " " then begin move( crd^authn^ind, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 ); end; #DELETE 22502 /22581 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22587 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag = "34" or sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag = "23" then begin tkn^id ':=' pos^data2^tkn^id^d; ! ! ! initialize pos^data2^tkn ! ! ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, pos^data2^tkn ); if sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag = "34" then begin call ascii^integer^( sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^val, pos^data2^tkn.atc ); if sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34.tag^data. atc^discrp^ind = " " then begin movd( pos^data2^tkn.atc^valid^ind, "0" ); end else begin move( pos^data2^tkn.atc^valid^ind, sem.addl^data.info. dyn^atc^cvc3^info^sub^fld^34. tag^data.atc^discrp^ind ); end; if crd^authn^ind = " " then begin movd( pos^data2^tkn.crd^authn^ind, "0" ); end else begin move( pos^data2^tkn.crd^authn^ind, crd^authn^ind ); end; end; if sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag = "23" then begin move( pos^data2^tkn.pmnt^initiation^chan, sem.addl^data.info. pmnt^init^chan^sub^fld^23.tag^data ); end; tkn^add^lgth := $offset( pos^data2^tkn.user^fld^aci); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data2^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3258, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 3260, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 3260 ); end; end; ! of if tkn^result end; ! of fld^23.tag = "23" or sub^fld^34.tag = "34" #ADD 25787 TRACE^SEM ! ! Additional Transaction Analysis ! if hdr.addl^data.info. txn^analysis^sub^fld^27.tag = "27" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. txn^analysis^sub^fld^27.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - Transaction Disposition ! if hdr.addl^data.info. txn^analysis^sub^fld^27. txn^disp.tag = "01" then begin call ascii^integer( hdr.addl^data.info. txn^analysis^sub^fld^27. txn^disp.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. txn^analysis^sub^fld^27. txn^disp.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! Move Subfield 2 - Test Results ! if hdr.addl^data.info. txn^analysis^sub^fld^27. test^rslts.tag = "02" then begin call ascii^integer( hdr.addl^data.info. txn^analysis^sub^fld^27. test^rslts.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. txn^analysis^sub^fld^27. test^rslts.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! end; #ADD 26693 TRACE^SEM ! ! Account Data Compromise Information ! if hdr.addl^data.info. acct^data^cmprms^sub^fld^39.tag = "39" then begin call ascii^integer( hdr.addl^data.info. acct^data^cmprms^sub^fld^39.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. acct^data^cmprms^sub^fld^39.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 27944 TRACE^SEM else if ptr[ length ] = "27" then begin ! ! Additional Transaction Analysis ! movl( sem^ptr.addl^data.info. txn^analysis^sub^fld^27.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Transaction ! Disposition ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. txn^analysis^sub^fld^27. txn^disp.tag ); end else ! ! Move Subfield 2 - Test Results ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. txn^analysis^sub^fld^27. test^rslts.tag ); end else ! ! bad data, clear sem de-48.se-27, ! end loop ! begin init( sem^ptr.addl^data.info. txn^analysis^sub^fld^27, " ", $len( sem^ptr.addl^data.info. txn^analysis^sub^fld^27 ) ); loop^lgth := tag^length; bad^lgth := bad^lgth + tag^length + 4; end; end; length := length + tag^length + 4; end #ADD 28529 TRACE^SEM if ptr[ length ] = "39" then begin ! ! Account Data Compromise Information ! movl( sem^ptr.addl^data.info. acct^data^cmprms^sub^fld^39.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #REPLACE 29053e1V UTIL^FRMT^CHIP^DATA^TO^XRQST end; ! of not visa_tran_g ! #ENDSCN = SW0L020 !#CMP2.28 02/19/17 BNETS 6135 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6135 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6135 * ******************************************************************************** #SCN = SW0L023 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6135 #NEWVERSION = 6136 #ADD 03821i0G ! 20FEB2017 bensone ! Symptom: BNET Release 17.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! * Release 14.Q2 global 551: Chip Secured Remote Payment ! * Global 522: Safety and security roadmap ! * Global 542: MDES enhancements supporting new ! transaction analysis capabilities and CVM models for ! MCBP-based tokens ! * Global 594: MasterCard support of Payment Account ! Reference ! * U.S. 558: State-owned lottery gaming payment ! transactions ! * Global operations bulletin no. 10: Identifying DSRP ! transactions related to card-on-file tokenization for ! merchants and commerce platforms ! Updates: ! - Populate new global deny^atm^cntctlss^txn^g from new ! LCONF param SW-BNET-DENY-ATM-CONTACTLESS-TXN ! Proc modified: init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! BA60MISC: BAMISCTD, LCONFBA ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! New files: ILB0217M, ILB0217R, ILB0217S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0217M. Run the ILF conversion using ILB0217R. ! Reference: WO #008669 #ADD 10428f02 INIT^BNET^G bnet^g.deny^atm^cntctlss^txn^g := 0; #ADD 12676f02 INIT^PARAMPROC "P", "SW-BNET-DENY-ATM-CONTACTLESS-TXN", #ADD 13501f0W INIT^PARAMPROC ! ! SW-BNET-DENY-ATM-CONTACTLESS-TXN ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.deny^atm^cntctlss^txn^g ) then begin bnet^g.deny^atm^cntctlss^txn^g := 0; call log^message^( 1340, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. deny^atm^cntctlss^txn^g ); end else if bnet^g.deny^atm^cntctlss^txn^g < 0 or bnet^g.deny^atm^cntctlss^txn^g > 3 then begin bnet^g.deny^atm^cntctlss^txn^g := 0; call log^message^( 1341, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g. deny^atm^cntctlss^txn^g ); end; end; #ENDSCN = SW0L023 !#CMP2.28 02/23/17 BNETG 60103FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60103 * ******************************************************************************** #SCN = SW0L046 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R000260d ! 23FEB2017 subramk ! Symptom: Unused POS response code sent to RTAU. ! Problem: When a BNIIF record cannot be found for acquired POS ! transaction, the interface returns a response code ! value "071". This is not a valid POS response code. ! Fix: Removed the literal resp^invalid^route^pos^l as this ! will no longer be used. ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS and BNETS. ! Run Make. ! Reference: Case #2509014 #DELETE 00262 #ENDSCN = SW0L046 !#CMP2.28 02/23/17 BNETLIBS6281 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6281 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6281 * ******************************************************************************** #SCN = SW0L047 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6281 #NEWVERSION = 6282 #ADD 0785050c ! 23FEB2017 subramk ! Symptom: Unused POS response code sent to RTAU. ! Problem: When a BNIIF record cannot be found for acquired POS! ! transaction, the interface returns a response code ! value "071". This is not a valid POS response code. ! Fix: Deleted the mapping of response code 071 from the ! mapping table b24^pos^to^bnet^resp^tbl. ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS and BNETS. ! Run Make. ! Reference: Case #2509014 #DELETE 13097t07 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0L047 !#CMP2.28 02/23/17 BNETS 6136 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6136 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6136 * ******************************************************************************** #SCN = SW0L048 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6136 #NEWVERSION = 6137 #ADD 03821j0a ! 23FEB2017 subramk ! Symptom: Unused POS response code sent to RTAU. ! Problem: When a BNIIF record cannot be found for acquired POS ! transaction, the interface returns a response code ! value "071". This is not a valid POS response code. ! Fix: Replaced resp^invalid^route^pos^l with ! resp^unable^to^auth^pos^l. ! Procs modified: pstm^0200^request ! pstm^0220^force^post ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS and BNETS. ! Run Make. ! Reference: Case #2509014 #ADD 15277Q07 SUB^APPRV^BLIND resp^unable^to^auth^pos^l, sub^fail^pre^auth^l ); #DELETE 15277Q08 SUB^APPRV^BLIND #ADD 15300 SUB^APPRV^BLIND resp^unable^to^auth^pos^l, sub^fail^pre^auth^l ); #DELETE 15301 SUB^APPRV^BLIND #ADD 16159X08 PSTM^0220^FORCE^POST resp^unable^to^auth^pos^l ); #DELETE 16159X09 PSTM^0220^FORCE^POST #ENDSCN = SW0L048 !#CMP2.28 03/03/17 BNETLIBS6282 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6282 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6282 * ******************************************************************************** #SCN = SW0L059 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6282 #NEWVERSION = 6283 #ADD 0785060D ! 03MAR2017 venugov ! Symptom: ISSUE while adding FRAUD data token ! Problem: The token length of the FRAUD-DATA-TKN is calculated ! incorrectly while adding in request message inbound ! from the network. ! Fix: Code has been modified to calculate the token length of ! the FRAUD-DATA-TKN correctly while adding in request ! message. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2527963 #ADD 2139751z SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ) + $len( fraud^data^tkn.bnet.sec^srvc ) + $len( fraud^data^tkn.bnet.acct^data^cmprms^info ); #ADD 21397v3F SEM^FRMT^XRQST^TO^PSTM^0200 ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; #ENDSCN = SW0L059 !#CMP2.28 04/28/17 BNETDDLS6059 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6059 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6059 * ******************************************************************************** #SCN = SW0L094 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6059 #NEWVERSION = 6060 #ADD 00262-0c * 28APR2017 bensone * Symptom: BNET Release 17.Q2 Phase 2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * Global 533-Intro of Brazil New Debit Processing Services * Add a new field for DE 48 SE 14 (5 bytes) * For DE 112, add a new redefinition to support Brazil * new debit processing services (SE 018) * AP 123-Expansion of DE 112 to Support Japan National * Data * Modify the JP redefinition of DE 112 to remove the * CARD-CAT from subfield 30, and to change the name of * the error code in subfield 031 (to ensure that there * are no remaining references to "CAFIS" in the DDL) * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: PSTKNCVS, PSTKNID * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEVMS * Run Make. * Replacement files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT * Reference: WO #008748 #ADD 01157-1F SEM * * Account Type Indicator * Subfield tag = 14 * Mastercard Network will use the combination of the Account type * indicator and the "from account type" value DE 3 (Processing * Code, subfield 2 to determine the issuer host destination for the * authorization request messages. Subelement 14 will only be included * on Brazil Combo card transactions. * 06 acct-typ-ind-sub-fld-14. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #REPLACE 01157-1G SEM 04 user-fld pic x(74). #ADD 01411#0Y SEM 04 br redefines info. 06 sub-fld-18. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 srvc-cde pic x(2). 10 num-instl pic x(1). 10 guar pic x(1). 10 guar-amt pic x(8). 10 post-setl-dat pic x(6). 10 orig-setl-dat pic x(6). 10 orig-ref-num pic x(9). 10 auth-cde pic x(6). 06 user-fld-aci pic x(734). #ADD 01411$1E SEM 10 rsrvd pic x(1). #DELETE 01411$1F SEM #ADD 01411%00 SEM 10 dmstc-err-cde pic x(3). #DELETE 01411%01 SEM #ENDSCN = SW0L094 !#CMP2.28 04/28/17 BNETG 60104FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60104 * ******************************************************************************** #SCN = SW0L095 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S000260C ! 28APR2017 bensone ! Symptom: Banknet Release 17.Q2 Phase 2 Functional Enhancements ! Problem: None. ! Fix: Modified the interface in support of the following: ! * Release 17.Q2 Global 534: Card Sequence Number in ! Mastercard Digital Enablement Service Transactions ! Updates: ! - Modify the define "emv^capable^terminal^d" to include ! POS Entry Mode value "09" (DSRP EMV Version): ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! Reference: WO #008748 #ADD 01366102 sem.pos^entry^mde = remote^ecomm^d or #ENDSCN = SW0L095 !#CMP2.28 04/28/17 BNETLIBS6283 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6283 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6283 * ******************************************************************************** #SCN = SW0L096 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6283 #NEWVERSION = 6284 #ADD 0785070E ! 28APR2017 bensone ! Symptom: Banknet Release 17.Q2 Phase 2 Functional Enhancements ! Problem: None. ! Fix: Modified the interface in support of the following: ! * Global 533: Intro of Brazil New Debit Processing ! Services ! * Release 17.Q1 AP 123: Expansion of DE 112 to Support ! Japan National Data ! Proc added: pstm^frmt^natl^data^to^sem ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! sem^frmt^natl^data^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! Reference: WO #008748 #ADD 10194#01 SUB^LOG^ERROR ( sem.ntl^pos^data.cntry^cde = "076" and found^pos^data1^tkn and pos^data1^tkn.pmnt^ind = "I" ) ) and #DELETE 10194#02 SUB^LOG^ERROR #ADD 10207 SUB^LOG^ERROR end else if base24^rel^g >= 5 and sem.ntl^pos^data.cntry^cde = "076" then begin ! ! ! Format transaction for Brazilian processing service ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; if sem.addl^data.info.acct^typ^ind^sub^fld^14.tag = "14" or sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag = "77" then begin addl^data^bit^d := 1; end; #ADD 11549#01 PSTM^FRMT^0420^TO^ACQ^XRVSL ( sem.ntl^pos^data.cntry^cde = "076" and pos^data1^tkn^found and pos^data1^tkn.pmnt^ind = "I" ) ) and #DELETE 11549#02 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 11564 PSTM^FRMT^0420^TO^ACQ^XRVSL end else if sem.ntl^pos^data.cntry^cde = "076" and adnl^data^ntl^bit^d then begin ! ! ! Rebuild DE 112 because it is not logged to the ILF. ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin ! ! Nothing to do, yet ! end; #ADD 11848 PSTM^FRMT^0420^TO^ACQ^XRVSL if orig^sem.addl^data.info.acct^typ^ind^sub^fld^14 = "14" then begin movl( sem.addl^data.info.acct^typ^ind^sub^fld^14, orig^sem.addl^data.info.acct^typ^ind^sub^fld^14, $len( sem.addl^data.info.acct^typ^ind^sub^fld^14 ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info. acct^typ^ind^sub^fld^14 ); end; #DELETE 12814#03/12814#07 PSTM^FRMT^INSTL^PMNT^TO^SEM #ADD 12814#0C PSTM^FRMT^INSTL^PMNT^TO^SEM if found^instl^cntry^data^tkn and #DELETE 12814#0D/12814#0F PSTM^FRMT^INSTL^PMNT^TO^SEM #ADD 12955 PSTM^FRMT^INSTL^PMNT^TO^SEM ?section pstm^frmt^natl^data^to^sem ?page "pstm^frmt^natl^data^to^sem" !##################################################################### !# # !# pstm^frmt^natl^data^to^sem # !# # !# This proc formats the SEM with data from the Intra Country Data # !# token (S0). # !# # !# INPUT PARAMETERS: # !# PSTM - Pointer to BASE24 internal POS message # !# SEM - Pointer to Banknet external message # !# # !# OUTPUT PARAMETERS: # !# SEM - Pointer to Banknet external message # !# # !# RETURN: # !# True - when Intra Country Data is found # !# False - when Intra Country Data is not found # !# # !##################################################################### int proc pstm^frmt^natl^data^to^sem( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin int found^natl^data := false; int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int tkn^lgth := 0; int lgth := 0; string .tkn^id[ 0:1 ]; tkn^id ':=' intra^cntry^data^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^tkn, tkn^lgth ) then begin return false; end; if sem.ntl^pos^data.cntry^cde = "076" and intra^cntry^data^tkn.frmt^cde = "05" then begin if sem.typ <> sem^acq^rvsl^rqst^d and intra^cntry^data^tkn.br^bnet.combo^crd.acct^typ^ind <> [ $len( intra^cntry^data^tkn.br^bnet.combo^crd. acct^typ^ind ) * [ " " ] ] then begin movd( sem.addl^data.info.acct^typ^ind^sub^fld^14.tag, "14" ); movd( sem.addl^data.info.acct^typ^ind^sub^fld^14.lgth, "01" ); move( sem.addl^data.info.acct^typ^ind^sub^fld^14.tag^data, intra^cntry^data^tkn.br^bnet.combo^crd. acct^typ^ind ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + 5; call integer^ascii^( sem.addl^data.lgth, lgth ); end; if sem.typ = sem^auth^request^d and sem.proc^cde = sem^purchase^d and intra^cntry^data^tkn.br^bnet.bill^pay.fund^typ^ind <> [ $len( intra^cntry^data^tkn.br^bnet.bill^pay. fund^typ^ind ) * [ " " ] ] then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.lgth, "03" ); move( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, intra^cntry^data^tkn.br^bnet.bill^pay. fund^typ^ind ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + 7; call integer^ascii^( sem.addl^data.lgth, lgth ); end; if intra^cntry^data^tkn.br^bnet.post^dated^txn. srvc^cde = "30" or intra^cntry^data^tkn.br^bnet.post^dated^txn. srvc^cde = "31" then begin found^natl^data := true; movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "5" ); movd( sem.adnl^data^natl.br.sub^fld^18.tag, "018" ); movd( sem.adnl^data^natl.br.sub^fld^18.lgth, "039" ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. srvc^cde, intra^cntry^data^tkn.br^bnet.post^dated^txn. srvc^cde ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. num^instl, intra^cntry^data^tkn.br^bnet.post^dated^txn. num^instl ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. guar, intra^cntry^data^tkn.br^bnet.post^dated^txn. guar ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. guar^amt, intra^cntry^data^tkn.br^bnet.post^dated^txn. guar^amt ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. post^setl^dat, intra^cntry^data^tkn.br^bnet.post^dated^txn. post^setl^dat ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. orig^setl^dat, intra^cntry^data^tkn.br^bnet.post^dated^txn. orig^setl^dat ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. orig^ref^num, intra^cntry^data^tkn.br^bnet.post^dated^txn. orig^ref^num ); move( sem.adnl^data^natl.br.sub^fld^18.tag^data. auth^cde, intra^cntry^data^tkn.br^bnet.post^dated^txn. auth^cde ); lgth := $len( sem.adnl^data^natl.br.sub^fld^18 ); call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; !of srvc^cde = "30" or "31" end; ! of cntry^cde = "076" and frmt^cde = "05" return found^natl^data; end; ! of pstm^frmt^natl^data^to^sem #DELETE 17092*7T/17092*7U SEM^FRMT^NATL^DATA^TO^PSTM #ADD 17092+01 SEM^FRMT^NATL^DATA^TO^PSTM dmstc^err^cde ); #DELETE 17092+02 SEM^FRMT^NATL^DATA^TO^PSTM #ADD 20386 SEM^FRMT^XRQST^TO^PSTM^0200 struct .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); #REPLACE 21520*0C/21520*0C OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 end ! of adnl^data^ntl^bit^d and (tag = "030" or "031") ! else if sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) and sem.ntl^pos^data.cntry^cde = "076" then begin tkn^add^lgth := 0; tkn^id ':=' intra^cntry^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, intra^cntry^data^tkn ); movd( intra^cntry^data^tkn.frmt^cde, "05" ); if sem.addl^data.info.acct^typ^ind^sub^fld^14. tag = "14" then begin move( intra^cntry^data^tkn.br^bnet.combo^crd. acct^typ^ind, sem.addl^data.info.acct^typ^ind^sub^fld^14. tag^data ); tkn^add^lgth := $offset( intra^cntry^data^tkn.br^bnet. bill^pay ); end; if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C9" then begin move( intra^cntry^data^tkn.br^bnet.bill^pay. fund^typ^ind, sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data ); tkn^add^lgth := $offset( intra^cntry^data^tkn.br^bnet. post^dated^txn ); end; if tkn^add^lgth > 0 then begin if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1791, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1792, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1792 ); end; end; ! of if tkn^result end; !tkn^add^lgth > 0 end; ! of domestic Brazilian transaction #ADD 23564 SEM^FRMT^XRQST^TO^SEM^XRVSL ! ! ! Subelement 14-Account Type Indicator ! ! ! if sem.addl^data.info.acct^typ^ind^sub^fld^14 = "14" then begin move( rvsl.addl^data.info.acct^typ^ind^sub^fld^14, sem.addl^data.info.acct^typ^ind^sub^fld^14 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. acct^typ^ind^sub^fld^14 ); end; #ADD 25635 TRACE^SEM if hdr.addl^data.info. acct^typ^ind^sub^fld^14.tag = "14" then begin call ascii^integer( hdr.addl^data.info. acct^typ^ind^sub^fld^14.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. acct^typ^ind^sub^fld^14.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26914*1W TRACE^SEM if hdr.adnl^data^natl.br. sub^fld^18.tag = "018" then begin call ascii^integer( hdr.adnl^data^natl.br. sub^fld^18.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.br.sub^fld^18.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "018" ! else #ADD 27864 TRACE^SEM else if ptr[ length ] = "14" then begin movl( sem^ptr.addl^data.info. acct^typ^ind^sub^fld^14.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 28674X09 TRACE^SEM if ptr[ length ] = "018" then begin movl( sem^ptr.adnl^data^natl.br. sub^fld^18.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ENDSCN = SW0L096 !#CMP2.28 04/28/17 BNETS 6137 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6137 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6137 * ******************************************************************************** #SCN = SW0L099 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6137 #NEWVERSION = 6138 #ADD 03821k0E ! 28APR2017 bensone ! Symptom: Banknet Release 17.Q2 Phase 2 Functional Enhancements ! Problem: None. ! Fix: Modified the interface in support of the following: ! * Release 16.Q2 Global 515: Installment Payment ! Processing ! Proc modified: pstm^0220^force^post ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEVMS ! Run Make. ! Replacement files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUDPT ! Reference: WO #008748 #ADD 16431 PSTM^0220^FORCE^POST if sem.typ = sem^auth^advice^d and sem^mc^instl^txn^d( sem ) then begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem^def ) ); end else #ENDSCN = SW0L099 !#CMP2.28 06/15/17 BNETLIBS6284 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6284 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6284 * ******************************************************************************** #SCN = SW0L133 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6284 #NEWVERSION = 6285 #ADD 0785080S ! 06JUN2017 venugov ! Symptom: SWBNET process doesn't process DE 48 SE 33 SF 6 ! (Token Requestor ID). ! Problem: The interface is not processing DE 48 SE 33 SF 6 ! (Token Requestor ID) to any tokens in the acquirer ! response. ! Fix: Code has been modified to map the DE 48 SE 33 SF 6 ! (Token Requestor ID) to the Network Service token (SC) ! in the acquirer response. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make ! Replacement files: ! SW60BNET: BNETLOGM ! Reference: Case #2582056 #ADD 18414G08 SEM^FRMT^XRESP^TO^PSTM^0210 wlform( no^room^ntwk^tkn, "NO ROOM TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^add^ntwk^tkn, "UNABLE TO ADD TOKEN: \\, SEQ NUM : \\\\\\\\\\\\," ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: # " ) #ADD 18490 SEM^FRMT^XRESP^TO^PSTM^0210 struct .ntwk^tkn^srvc^add^tkn( ntwk^tkn^srvc^tkn^def ); #ADD 19395G0T SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data <> "C" and "H" and "F" then #ADD 19395k34 SEM^FRMT^XRESP^TO^PSTM^0210 end ! of found Network Token Services Token (SC) else if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" or "H" or "F" then begin ! ! Add the network token service token (SC) ! movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^add^tkn ); if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag = "01" then begin movl( ntwk^tkn^srvc^add^tkn.genrc.pan^tkn^ind, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num^ind.tag^data, $len( ntwk^tkn^srvc^add^tkn.genrc. pan^tkn^ind ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" then begin movl( ntwk^tkn^srvc^add^tkn.genrc.pan^tkn^data, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data, $len( ntwk^tkn^srvc^add^tkn.genrc. pan^tkn^data )); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. crd^exp^dat.tag = "03" then begin movl( ntwk^tkn^srvc^add^tkn.genrc. pan^tkn^exp^dat, sem.addl^data.info. paypass^mapping^sub^fld^33. crd^exp^dat.tag^data, $len( ntwk^tkn^srvc^add^tkn.genrc. pan^tkn^exp^dat ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag = "05" then begin movl( ntwk^tkn^srvc^add^tkn.genrc. tkn^assurance^lvl, sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag^data, $len( ntwk^tkn^srvc^add^tkn.genrc. tkn^assurance^lvl ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag = "06" then begin movl( ntwk^tkn^srvc^add^tkn.genrc.tkn^rq^id, sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id.tag^data, $len( ntwk^tkn^srvc^add^tkn.genrc. tkn^rq^id )); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "C" then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "02" ); end else if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "F" then begin movd( ntwk^tkn^srvc^add^tkn.genrc.tkn^typ, "01" ); end else if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "H" then begin movd( ntwk^tkn^srvc^add^tkn.genrc.tkn^typ, "03" ); end else begin movd( ntwk^tkn^srvc^add^tkn.genrc.tkn^typ, "00" ); end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^add^tkn, $len( ntwk^tkn^srvc^add^tkn ), ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4094, ! routing code !, @no^room^ntwk^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 4095, ! routing code !, @err^add^ntwk^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4095 ); end; end; ! of if tkn^result end; ! of Add Network Token Services Token (SC) #DELETE 19395k35 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0L133 !#CMP2.28 07/28/17 BNETLIBS6285 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6285 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6285 * ******************************************************************************** #SCN = SW0L147 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6285 #NEWVERSION = 6286 #ADD 0785090H ! 28JUL2017 bensone ! Symptom: In its acquirer processing, the interface shall be ! enhanced to format DE 48, SE 95 in advice messages as ! well as request messages, when the PMNT-PLAN field in ! the POS Data1 token contains “MCI”. ! Problem: The interface is coded to only format SE 95 on a request ! when the PMNT-PLAN field in the POS Data1 token contains ! “MCI”. ! Fix: Remove the condition that limits the formatting of SE 95 ! to requests. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make ! Reference: Case #2601321 #DELETE 10194*03 SUB^LOG^ERROR #ENDSCN = SW0L147 !#CMP2.28 08/18/17 BNETG 60105FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60105 * ******************************************************************************** #SCN = SW0L161 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T000260K ! 18AUG2017 bensone ! Symptom: Banknet Release 17.Q4 Functional Enhancements ! Problem: None ! Fix: AN 1002 - Miscellaneous Core Systems Updates ! Delete define sem^tkn^rqst^d = "93". ! AN 1011 - Inclusion of the POI Amount Indicator in the ! Authorization Platform. Add define bnet^amt^typ^poi^d ! = "58. ! Case #02564000: Incorrect Response Code for ASI ! Transactions. Add define sem^invalid^asi^resp^cde^d, ! for the set of invalid ASI response codes. ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60ABNT: BNETATMS ! SW60BNET: BNETG and BNETLIBS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008802 #ADD F0007802 define bnet^amt^typ^poi^d = "58"#; #DELETE F0012201 #ADD 00233 define sem^invalid^asi^resp^cde^d( x ) = ( ( x.resp^cde = "03" or x.resp^cde = "12" or x.resp^cde = "13" or x.resp^cde = "30" or x.resp^cde = "51" or x.resp^cde = "57" or x.resp^cde = "58" ) )#; #ENDSCN = SW0L161 !#CMP2.28 08/18/17 BNETLIBS6286 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6286 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6286 * ******************************************************************************** #SCN = SW0L162 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6286 #NEWVERSION = 6287 #ADD A078500G ! 18AUG2017 bensone ! Symptom: Banknet Release 17.Q4 Functional Enhancements ! Problem: None ! Fix: AN 1002 - Miscellaneous Core Systems Updates ! AN 1011 - Inclusion of the POI Amount Indicator in the ! Authorization Platform ! AN 1017 - Enhancements to Mastercard Installment ! Payment Service ! AN 1023-Enhancements to Payment Account Reference ! Enhanced Support for Merchant-Initiated Transactions ! (MITs) ! Case #02567422: Declined MoneySend Payment ! Authorizations without CVC2 ! Case #02565885: Trace Id Not Added on a POS Reversal ! Message ! Case #02557870: Test Recurring Payment Transaction ! Case #02564000: Incorrect Response Code for ASI ! Transactions ! Case #02600539: DSRP Processing ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60ABNT: BNETATMS ! SW60BNET: BNETG and BNETLIBS ! Run Make. ! Replace file: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008802 #ADD 09316k09 SUB^LOG^ERROR if pstm.tran.tran^cde <> "16" or sem.pos^entry^mde <> manual^entry then #DELETE 09316k0B/09316k30 SUB^LOG^ERROR #ADD 09675 SUB^LOG^ERROR ! 'Test' recurring payment transaction will have a value of 0 ! ! ! #DELETE 09676 /09695 SUB^LOG^ERROR #ADD 09696 SUB^LOG^ERROR if pstm.typ = request^d and #DELETE 09697 SUB^LOG^ERROR #ADD 13286u02 PSTM^FRMT^RESP^CDE^TO^SEM if sem^acct^stat^inq^d( sem ) then begin if pos^approved^d( pstm ) then begin movd( rcode, "85" ); end else if sem^referral^d( sem ) or sem^invalid^asi^resp^cde^d( sem ) then begin movd( rcode, "05" ); end; end; if sem^atc^update^d( sem ) then begin if pos^approved^d( pstm ) then begin movd( rcode, "85" ); end else begin movd( rcode, "05" ); end; #DELETE 13287 /13303 PSTM^FRMT^RESP^CDE^TO^SEM #REPLACE 13368D01 PSTM^FRMT^SEM^ADDL^DATA "3000" , "3350" , "X" , #REPLACE 13372 PSTM^FRMT^SEM^ADDL^DATA "3351" , "3500" , "A" , #DELETE 14413#00/14413#0A PSTM^FRMT^SEM^ADDL^DATA #ADD 14491X04 PSTM^FRMT^SEM^ADDL^DATA if e^com^addl^data^tkn.crdhldr^authn^ind = "4" then begin if sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "6" ); end else begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "7" ); end; end; #ADD 18081 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int .compliance^get^lgth := 0; int .compliance^get^tkn( ichg^compliance^tkn^def ); #ADD 18083 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM string tkn^id[ 0:1 ] := [ 2 * [ " " ] ];; #ADD 18098e00 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin if rvsl.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin movl( compliance^get^tkn.trace^id, rvsl.addl^data.info.trc^id^sub^fld^63. bnet^ref^num, $len( compliance^get^tkn.trace^id ) ); end; end; #REPLACE 18466k01 SEM^FRMT^XRESP^TO^PSTM^0210 int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); #REPLACE 18490901 SEM^FRMT^XRESP^TO^PSTM^0210 struct .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #REPLACE 19395k02 SEM^FRMT^XRESP^TO^PSTM^0210 if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^get^tkn, #REPLACE 19395k04 SEM^FRMT^XRESP^TO^PSTM^0210 ntwk^tkn^srvc^get^tkn.frmt^cde = "01" then #REPLACE 19395k09 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc.pan^tkn^ind, #REPLACE 19395k0D SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k0K SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k0P SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k0z SEM^FRMT^XRESP^TO^PSTM^0210 i := i - $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k12 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k17 SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #ADD 19395k1D SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. pan^tkn^data, #DELETE 19395k1E SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 19395k1I SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k1P SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc.acct^stat, #REPLACE 19395k1S SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k1f SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k1k SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #DELETE 19395k1q SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 19395k2G SEM^FRMT^XRESP^TO^PSTM^0210 i := i - $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k2J SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k2O SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k2V SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k2a SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #REPLACE 19395k2h SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^get^tkn.genrc.tkn^rq^id, #REPLACE 19395k2l SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^get^tkn.genrc. #DELETE 19395k2o/19395k32 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 1939590D SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 1939590J SEM^FRMT^XRESP^TO^PSTM^0210 ntwk^tkn^srvc^tkn ); #ADD 1939590K SEM^FRMT^XRESP^TO^PSTM^0210 movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); #REPLACE 1939590P SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, #REPLACE 1939590T SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE 1939590a SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, #REPLACE 1939590e SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE 1939590l SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^tkn.genrc. #REPLACE 1939590q SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE 1939590x SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^tkn.genrc. #REPLACE 19395912 SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE 19395919 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, #REPLACE 1939591D SEM^FRMT^XRESP^TO^PSTM^0210 $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE 1939591Q SEM^FRMT^XRESP^TO^PSTM^0210 movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "01" ); #REPLACE 1939591W SEM^FRMT^XRESP^TO^PSTM^0210 movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "03" ); #REPLACE 1939591a SEM^FRMT^XRESP^TO^PSTM^0210 movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "00" ); #ADD 1939591h SEM^FRMT^XRESP^TO^PSTM^0210 ntwk^tkn^srvc^tkn, $len( ntwk^tkn^srvc^tkn ), #DELETE 1939591i/1939591j SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 20468 SEM^FRMT^XRQST^TO^PSTM^0200 string conv^ind := "0"; #REPLACE 21043 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 1868 ); #REPLACE 21238 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 3195 ); #ADD 21422 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "7" then begin movd( pos^data1^tkn.pmnt^info, "1" ); end else if sem.pos^entry^mde = mobile^ecomm^d then begin movd( pos^data1^tkn.pmnt^info, "2" ); end else begin movd( pos^data1^tkn.pmnt^info, "0" ); end; #ADD 21424 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and sem.proc^cde = sem^purchase^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" and sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin movd( pos^data1^tkn.pmnt^ind, "N" ); add^pos^data1 := true; end; #DELETE 21522 /21572 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 21663 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 1875 ); #ADD 22153 SEM^FRMT^XRQST^TO^PSTM^0200 end else if pstm.pt^srv^entry^mde = manual^entry and sem.proc^cde = sem^pmnt^txn^d then begin ! ! ! Set the CV present flag to "4", to indicate that CV ! ! data is not required for this transaction. ! ! ! ps51^tkn^data.cvd^fld^present ':=' "4"; #ADD 22494 SEM^FRMT^XRQST^TO^PSTM^0200 end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "26" then begin move( pos^data1^tkn.instl^stat, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 ); add^pos^data1 := true; end; ! of tag^data.rslt^1 = ... ! #DELETE 22495 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22587 SEM^FRMT^XRQST^TO^PSTM^0200 if add^pos^data1 then begin movd( tkn^id, pos^data1^tkn^id^d ); pos^data1^tkn^lgth := $len( pos^data1^tkn ); tkn^lgth := 0; set( pos^data1^tkn.online^lmt, 0f ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data1^tkn, pos^data1^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3205, ! routing code !, @noroom^data1^pstm, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 3210, ! routing code !, @err^add^data1^tkn, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3210 ); end; end; ! of if tkn^result end; ! pos^data1^tkn needs to be added #REPLACE 22855 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 3120 ); #REPLACE 22926 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 3140 ); #REPLACE 22980 SEM^FRMT^XRQST^TO^PSTM^0200 call abend^( 1892 ); #ADD 23248 SEM^FRMT^XRQST^TO^PSTM^0200 end else if base24^rel^g >= 5 and tran^crncy^cde^bit^d and iss^crncy^cde^bit^d and sem.tran^crncy^cde = sem.iss^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.iss^crncy^cde ) ) then begin cnt := 0; if addl^amt^bit^d then begin if ascii^integer^( sem.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( sem.addl^amt.info ); end; end; ! of if addl^amt^bit^d then ! if cnt > 0 then begin for idx := 0 to ( cnt - 1 ) do begin if sem.addl^amt.info[ idx ].amt^typ = bnet^amt^typ^poi^d and sem.addl^amt.info[ idx ].crncy^cde <> sem.tran^crncy^cde for $len( sem.tran^crncy^cde ) then ! ! ! Map POI data amount to the BE token. ! ! ! begin movl( tran^amt, sem.addl^amt.info[ idx ].amt, $len( sem.addl^amt.info[ idx ].amt ) ); movl( crncy^cde, sem.addl^amt.info[ idx ].crncy^cde, $len( sem.addl^amt.info[ idx ].crncy^cde ) ); movd( conv^ind, "1" ); end; end; ! of for idx := 0 to ( cnt - 1 ) do ! if replace^amt^bit^d and sem.replace^amts.tran^amt <> [ $len( sem.replace^amts.tran^amt ) * [ " " ] ] then begin ! ! ! Unmatched partial reversal ! ! ! movd( conv^ind, "0" ); end; end; ! of if cnt > 0 then ! if conv^ind = "1" then begin tkn^lgth := 0; call hiswtkn_add_orig_crncy_60( ofst, pos^l, tran^amt, $occurs( tran^amt ), ! tran^amt^2 !, ! $occurs( tran^amt^2 ) !, crncy^cde, ! conv^rate !, ! conv^dat !, pstm, tkn^lgth, conv^ind ); end; ! of if conv^ind = "1" then #ADD 23634 SEM^FRMT^XRVSL^TO^PSTM^0420 wlform( no^room, "NO ROOM TO ADD TOKEN: \\, PAN : \?, " ','"SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\, " ','"SETL DATE: \\\\ " ) wlform( err^add^tkn, "UNABLE TO ADD TOKEN: \\, PAN : \?," ','" SEQ NUM : \\\\\\\\\\\\, REF NUM: \\\\\\\\\," ','" SETL DATE: \\\\ ERR: # " ) #ADD 23638 SEM^FRMT^XRVSL^TO^PSTM^0420 int cnt := 0; int compliance^tkn^lgth := 0; int evt^pan^lgth := 0; int idx := 0; #ADD 23645 SEM^FRMT^XRVSL^TO^PSTM^0420 int par^get^tkn^lgth := 0; int .par^get^tkn( par^tkn^def ); #ADD 23658 SEM^FRMT^XRVSL^TO^PSTM^0420 string conv^ind := "0"; #ADD 23659 SEM^FRMT^XRVSL^TO^PSTM^0420 string .pan[ 0:18 ] := [ 19 * [" "] ]; #ADD 23664 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .compliance^tkn( ichg^compliance^tkn^def ); struct .par^tkn( par^tkn^def ); #ADD 23666 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); #ADD 23674 SEM^FRMT^XRVSL^TO^PSTM^0420 if base24^rel^g >= 5 then begin ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; tkn^id ':=' ichg^compliance^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @compliance^tkn, compliance^tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, compliance^tkn ); movl( compliance^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, compliance^tkn, $len( compliance^tkn ), ! max buffer size !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 2998, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 2999, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 2999 ); end; end;! of token^result ! end; !of not hiswtkn^get^tkn end; ! of base24^rel^g >= 5 #DELETE 23692 /23697 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 23869 SEM^FRMT^XRVSL^TO^PSTM^0420 if base24^rel^g >= 5 and pmnt^acct^data^bit^d then begin tkn^id ':=' par^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @par^get^tkn, par^get^tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, par^tkn ); move( par^tkn.par, sem.pmnt^acct^data.se^01.pmnt^acct^ref.tag^data ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, par^tkn, $len( par^tkn ), ! max buffer size !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3001, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3002, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3002 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add end; ! of "SO" token not present end; ! of if DE 56 is present #DELETE 23924 /23925 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 23937 SEM^FRMT^XRVSL^TO^PSTM^0420 end else if base24^rel^g >= 5 and tran^crncy^cde^bit^d and iss^crncy^cde^bit^d and rvsl.tran^crncy^cde = rvsl.iss^crncy^cde for $min( $len( rvsl.tran^crncy^cde ), $len( rvsl.iss^crncy^cde ) ) then begin cnt := 0; if addl^amt^bit^d then begin if ascii^integer^( rvsl.addl^amt.lgth, cnt ) then begin cnt := cnt / $len( rvsl.addl^amt.info ); end; end; ! of if addl^amt^bit^d then if cnt > 0 then begin for idx := 0 to ( cnt - 1 ) do begin if rvsl.addl^amt.info[ idx ].amt^typ = bnet^amt^typ^poi^d and rvsl.addl^amt.info[ idx ].crncy^cde <> rvsl.tran^crncy^cde for $len( rvsl.tran^crncy^cde ) then ! ! Map POI data amount to the BE token. ! begin movl( amt^1, sem.addl^amt.info[ idx ].amt, $len( sem.addl^amt.info[ idx ].amt ) ); movl( amt^2, sem.addl^amt.info[ idx ].amt, $len( sem.addl^amt.info[ idx ].amt ) ); movl( crncy^cde, sem.addl^amt.info[ idx ].crncy^cde, $len( sem.addl^amt.info[ idx ].crncy^cde ) ); movd( conv^ind, "1" ); end; end; ! of for idx := 0 to ( cnt - 1 ) do end; ! of if cnt > 0 then if conv^ind = "1" then begin tkn^id ':=' orig^crncy^60^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^get^tkn, orig^crncy^60^get^lgth ) then begin ! ! ! Retrieve the Original Currency Token ! ! ! if replace^amt^bit^d and rvsl.replace^amts.tran^amt <> [ $len( rvsl.replace^amts.tran^amt ) * [ " " ] ] then begin ! ! ! If DE 95.1 is present ! ! ! call ascii^fixed( amt^2, $occurs( amt^2 ), orig^crncy^60^amt ); orig^crncy^60^get^tkn.amt^2 := orig^crncy^60^get^tkn.amt^1 - orig^crncy^60^amt; end else begin call ascii^fixed( amt^1, $occurs( amt^1 ), orig^crncy^60^amt ); orig^crncy^60^get^tkn.amt^1 := orig^crncy^60^amt; orig^crncy^60^get^tkn.amt^2 := 0f; movl( orig^crncy^60^get^tkn.crncy^cde, crncy^cde, $len( orig^crncy^60^get^tkn.crncy^cde ) ); movl( orig^crncy^60^get^tkn.conv^ind, conv^ind, $len( orig^crncy^60^get^tkn.conv^ind ) ); end; end ! of token present ! else if not replace^amt^bit^d or rvsl.replace^amts.tran^amt = [ $len( rvsl.replace^amts.tran^amt ) * [ " " ] ] then begin ! ! ! Add the Original Currency Token ! ! ! tkn^lgth := 0; call hiswtkn_add_orig_crncy_60( ofst, pos^l, amt^1, $occurs( amt^1 ), ! amt^2 !, ! $occurs( amt^2 ) !, crncy^cde, ! conv^rate !, ! conv^dat !, pstm, tkn^lgth, conv^ind ); end; ! of if not replace^amt^bit^d or ! end ! of if conv^ind = "1" then ! #DELETE 23949 /23954 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0L162 !#CMP2.28 09/06/17 BNETLIBS6287 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6287 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6287 * ******************************************************************************** #SCN = SW0L199 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6287 #NEWVERSION = 6288 #REPLACE A0785005 ! the POS Data1 token contains "MCI". ! #REPLACE A0785008 ! "MCI". ! #ADD B078500c ! 06SEP2017 wielerk ! Symptom: The interface does not log DE-48.SE-77 ( addl data.pmnt ! tran type ) to the B0 token. ! Problem: The interface is not logging this data item to the ! B0 token. ! Fix: Added code to log DE-48.SE-77 to the B0 token. ! Procs modified: util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make ! Reference: Case #2627405. #ADD 36635*08 UTIL^SWI^TKN^INIT if sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag = "77" then begin move( bnet^tkn^buf.pmnt^txn^typ^ind, sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data ); end; ! of if tag = "77" #ADD 36962 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.pmnt^txn^typ^ind <> blanks for $len( bnet^tkn^buf.pmnt^txn^typ^ind ) then begin movl( bnet^tkn.pmnt^txn^typ^ind, bnet^tkn^buf.pmnt^txn^typ^ind, $len( bnet^tkn.pmnt^txn^typ^ind ) ); end; ! of if bnet^tkn^buf.pmnt^txn^typ^ind #ENDSCN = SW0L199 !#CMP2.28 09/19/17 BNETLIBS6288 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6288 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6288 * ******************************************************************************** #SCN = SW0L207 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6288 #NEWVERSION = 6289 #ADD C078500J ! 19SEP2017 wielerk ! Symptom: The interface does not initialize the BE token ! correctly when processing an external reversal. ! Problem: The interface was using the SEM structure to set ! the BE token which is the ILF image and not the ! RVSL image. ! Fix: Modified code to use the RVSL structure when formatting ! the BE token. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! SW60ABNT: BNETATMS ! Run Make. ! Reference: Case #2631453. #REPLACE B239370X/B239370Y SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.addl^amt.info[ idx ].amt, $len( rvsl.addl^amt.info[ idx ].amt ) ); #REPLACE B239370a/B239370b SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.addl^amt.info[ idx ].amt, $len( rvsl.addl^amt.info[ idx ].amt ) ); #REPLACE B239370d SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.addl^amt.info[ idx ].crncy^cde, #REPLACE B239370f SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.addl^amt.info[ idx ].crncy^cde ) ); #ENDSCN = SW0L207 !#CMP2.28 09/20/17 BNETLIBS6289 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6289 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6289 * ******************************************************************************** #SCN = SW0L211 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6289 #NEWVERSION = 6290 #ADD D078500F ! 20SEP2017 wielerk ! Symptom: The interface does not identify invalid ASI response ! code values. ! Problem: The interface uses the SEM structure in the invalid ASI ! define, but DE-39 ( resp cde ) is not set until after ! this define is invoked. ! Fix: Modified code to set SEM.RESP^CDE before the ASI defines ! are invoked. ! Proc modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2632211. #ADD B1328600 PSTM^FRMT^RESP^CDE^TO^SEM mov^( sem.resp^cde, rcode ); #ENDSCN = SW0L211 !#CMP2.28 09/25/17 BNETLIBS6290 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6290 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6290 * ******************************************************************************** #SCN = SW0L212 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6290 #NEWVERSION = 6291 #ADD E078500E ! 25SEP2017 wielerk ! Symptom: The interface creates an empty token ( S0 ) when ! formatting a reversal. ! Problem: The interface uses the SEM structure when formatting ! the S0 token which is the ILF image. If DE-56 ( Payment ! Account Data ) is not present in the original 0100, the ! ILF image will be spaces. ! Fix: Modified code to use RVSL to format the S0 token while ! processing an external reversal. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2632766. #REPLACE B238690I SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.pmnt^acct^data.se^01.pmnt^acct^ref.tag^data ); #ENDSCN = SW0L212 !#CMP2.28 10/23/17 BNETLIBS6291 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6291 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6291 * ******************************************************************************** #SCN = SW0L230 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6291 #NEWVERSION = 6292 #ADD F078500F ! 23OCT2017 wielerk ! Symptom: The interface was not processing DE-48.SE-33 ! ( addl data.PAN mapping file ) as it was being sent by ! MasterCard. ! Problem: The interface was using values "C", "H", or "F" in DE- ! 48.SE-33.tag "01", and it was reported that the value ! "M" was more appropriate. ! Fix: Modified code to change an edit for "C", "H", or "F" to ! "M". ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2630067. #ADD 19395900 SEM^FRMT^XRESP^TO^PSTM^0210 if ( sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data <> "M" ) or ( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag <> "05" and sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag <> "06" ) then #DELETE 19395901/19395902 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 19395906 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "M" and ( sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^assurance^lvl.tag = "05" or sem.addl^data.info.paypass^mapping^sub^fld^33. tkn^rq^id.tag = "06" ) then #DELETE 19395907/19395908 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0L230 !#CMP2.28 11/15/17 BNETG 60106FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60106 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60106 * ******************************************************************************** #SCN = SW0L248 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U000260N ! 15NOV2017 wielerk ! Symptom: Unmatched reversal from MasterCard sets the life-cycle ! indicator in the Compliance token to "I". ! Problem: The define used to identify Incremental Auth ! transactions does not specify request messages. ! When an unmatched reversal initializes the PSTM ! the request formatting proc is invoked and this ! define allows the incorrect setting of life-cycle ind. ! Fix: Added an edit for SEM.TYP = "0100" to the define ! sem^incr^auth^d. ! Dependency: Apply fixes to: ! SW60BNET: BNETG. ! Run Make. ! Reference: Case #2663379. #ADD L0023301 ( x.typ = sem^auth^request^d and #REPLACE L0023302 x.proc^cde.byte[ 0 ] = sem^purchase^d and #ENDSCN = SW0L248 !#CMP2.28 11/17/17 BNETDDLS6060 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6060 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6060 * ******************************************************************************** #SCN = SW0L249 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6060 #NEWVERSION = 6061 #ADD 00262:0P * 17NOV2017 gruberg * Symptom: Banknet Release 17.Q4 Phase 2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * - AN 1028 Debt Repayment Transactions * - AN 1033 Visa Gateway Enhancements * - Case #2607277 BNET sends incorrect reversal reason * code to MasterCard * - Case #2619627 Banknet does not send DE 54 amount type * 44 (gratuity amount) outbound * - Case #2659192 POS Data1 Token (CH) fields * num-mm-gratuity and instl-gratuity-prd not being * set correctly * For DE 112, added a new redefinition to support U.K. * debt repayment transactions (SE 033). * For DE 48, modified the definition of SE 78 to support a * Visa Checkout indicator (SF 4), and reduced the size of * the RSRVD field by one byte. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #008802 #ADD 01157z0S SEM 08 chkout-ind pic x. 08 rsrvd pic x(2). #DELETE 01157z0T SEM #ADD 01411+0G SEM 04 gb redefines info. 06 sub-fld-33. 08 tag pic x(3). 08 lgth pic x(3). 08 rcv-nam. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(35). 08 rcv-postal-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(10). 08 rcv-dob. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(8). 08 rcv-acct-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(20). 06 user-fld-aci pic x(684). #ENDSCN = SW0L249 !#CMP2.28 11/17/17 BNETLIBS6292 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6292 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6292 * ******************************************************************************** #SCN = SW0L250 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6292 #NEWVERSION = 6293 #ADD G078500F ! 17NOV2017 gruberg ! Symptom: Banknet Release 17.Q4 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1028 Debt Repayment Transactions ! - AN 1033 Visa Gateway Enhancements ! - Case #2607277 BNET sends incorrect reversal reason ! code to MasterCard ! - Case #2619627 Banknet does not send DE 54 amount type ! 44 (gratuity amount) outbound ! - Case #2659192 POS Data1 Token (CH) fields ! num-mm-gratuity and instl-gratuity-prd not being ! set correctly ! pstm^frmt^0200^to^xrqst ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^natl^data^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^instl^pmnt^to^pstm ! sem^frmt^natl^data^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #008802 #ADD 10138 SUB^LOG^ERROR if visa_tran_g and sem.typ = sem^auth^request^d then begin if found^pos^data1^tkn and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then begin movd( sem.pos^entry^mde, "10" ); end; end; #ADD 1020780I SUB^LOG^ERROR end else if base24^rel^g >= 5 and sem.typ = sem^auth^request^d and sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.ntl^pos^data.cntry^cde = "826" then begin ! ! Format transaction for U.K. debt repayment ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; #REPLACE 12084 PSTM^FRMT^AMT^TO^SEM^AMT int .adnl^amts^tkn( adnl^amts^tkn^def ); #REPLACE 12104 PSTM^FRMT^AMT^TO^SEM^AMT int tkn^lgth; #DELETE 12285 /12292 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 12294 PSTM^FRMT^AMT^TO^SEM^AMT tkn^id ':=' adnl^amts^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @adnl^amts^tkn, tkn^lgth ) then begin call ascii^integer^( adnl^amts^tkn.num^amts, cnt ); for i := 0 to ( cnt - 1 ) do begin if amt^num < $occurs( sem.addl^amt.info ) then begin if adnl^amts^tkn.info[ i ].amt^typ = bnet^amt^typ^gratuity^d then begin movl( sem.addl^amt.info[ amt^num ]. acct^typ, sem.proc^cde.byte[ 2 ], 2 ); move( sem.addl^amt.info[ amt^num ]. amt^typ, adnl^amts^tkn.info[ i ].amt^typ ); move( sem.addl^amt.info[ amt^num ]. crncy^cde, adnl^amts^tkn.info[ i ].crncy^cde ); move( sem.addl^amt.info[ amt^num ]. typ^amt, adnl^amts^tkn.info[ i ].amt^sign ); move( sem.addl^amt.info[ amt^num ].amt, adnl^amts^tkn.info[ i ].amt ); lgth := lgth + $len( sem.addl^amt.info ); amt^num := amt^num + 1; end; end; ! of amt^num < $occurs end; ! of for i := 0 to cnt end; ! of if adnl^amt^tkn present if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; #ADD 1295580Q PSTM^FRMT^NATL^DATA^TO^SEM int done := false; #ADD 1295580R PSTM^FRMT^NATL^DATA^TO^SEM int idx := 0; #ADD 1295580S PSTM^FRMT^NATL^DATA^TO^SEM int tag^data^lgth := 0; #ADD 1295580g PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "826" and intra^cntry^data^tkn.frmt^cde = "07" then begin ! ! Format DE 112 tag 33 ! if intra^cntry^data^tkn.gb^bnet.rcv^nam <> [ $len( intra^cntry^data^tkn.gb^bnet.rcv^nam ) * [ " " ] ] then begin ! ! Format variable length tag 01 ! movd( sem.adnl^data^natl.gb.sub^fld^33.rcv^nam.tag, "01" ); idx := $len( intra^cntry^data^tkn.gb^bnet.rcv^nam ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.gb^bnet.rcv^nam. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.gb.sub^fld^33.rcv^nam. tag^data, intra^cntry^data^tkn.gb^bnet.rcv^nam, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.gb.sub^fld^33.rcv^nam.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^nam tag "01" if intra^cntry^data^tkn.gb^bnet.rcv^postal^cde <> [ $len( intra^cntry^data^tkn.gb^bnet.rcv^postal^cde ) * [ " " ] ] then begin ! ! Format fixed length tag 02 ! movd( sem.adnl^data^natl.gb.sub^fld^33.rcv^postal^cde.tag, "02" ); tag^data^lgth := $len( intra^cntry^data^tkn.gb^bnet.rcv^postal^cde ); movl( sem.adnl^data^natl.gb.sub^fld^33.rcv^postal^cde. tag^data, intra^cntry^data^tkn.gb^bnet.rcv^postal^cde, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.gb.sub^fld^33.rcv^postal^cde.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^postal^cde tag "02" if intra^cntry^data^tkn.gb^bnet.rcv^dob <> [ $len( intra^cntry^data^tkn.gb^bnet.rcv^dob ) * [ " " ] ] then begin ! ! Format fixed length tag 03 ! movd( sem.adnl^data^natl.gb.sub^fld^33.rcv^dob.tag, "03" ); tag^data^lgth := $len( intra^cntry^data^tkn.gb^bnet.rcv^dob ); movl( sem.adnl^data^natl.gb.sub^fld^33.rcv^dob.tag^data, intra^cntry^data^tkn.gb^bnet.rcv^dob, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.gb.sub^fld^33.rcv^dob.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^dob tag "03" if intra^cntry^data^tkn.gb^bnet.rcv^acct^num <> [ $len( intra^cntry^data^tkn.gb^bnet.rcv^acct^num ) * [ " " ] ] then begin ! ! Format variable length tag 04 ! movd( sem.adnl^data^natl.gb.sub^fld^33.rcv^acct^num.tag, "04" ); idx := $len( intra^cntry^data^tkn.gb^bnet.rcv^acct^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.gb^bnet.rcv^acct^num. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.gb.sub^fld^33.rcv^acct^num. tag^data, intra^cntry^data^tkn.gb^bnet.rcv^acct^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.gb.sub^fld^33.rcv^acct^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^acct^num tag "04" if lgth > 0 then begin ! ! Tag data was formatted so set the tag and length ! fields for DE 112 tag 33 ! found^natl^data := true; movd( sem.adnl^data^natl.gb.sub^fld^33.tag, "033" ); call integer^ascii^( sem.adnl^data^natl.gb.sub^fld^33.lgth, lgth ); ! ! Increment the length to account for the 033 tag and ! subfield length to set the overall field length. ! lgth := lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; ! of if sem.ntl^pos^data.cntry^cde = "826" and ... #REPLACE 13532 PSTM^FRMT^SEM^ADDL^DATA int dgtl^wallet^tkn^fnd := false; #ADD 13559 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' dgtl^wallet^tkn^id^d; dgtl^wallet^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, tkn^lgth ); #ADD 14828v0I PSTM^FRMT^SEM^ADDL^DATA if dgtl^wallet^tkn^fnd and dgtl^wallet^tkn.wallet^ind^flg = "04" and dgtl^wallet^tkn.visa^dgtl^entity.id <> blanks for $len( dgtl^wallet^tkn.visa^dgtl^entity.id ) then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. chkout^ind, "Y" ); end; #ADD 14895 PSTM^FRMT^SEM^ADDL^DATA if dgtl^wallet^tkn^fnd and #DELETE 14896 /14900500 PSTM^FRMT^SEM^ADDL^DATA #REPLACE 17092#07/17092#08 SEM^FRMT^INSTL^PMNT^TO^PSTM movd( pos^data1^tkn.instl^gratuity^prd, "0" ); movd( pos^data1^tkn.num^mm^gratuity, "00" ); #REPLACE 17092X1N/17092X1O SEM^FRMT^INSTL^PMNT^TO^PSTM movd( pos^data1^tkn.instl^gratuity^prd, "0" ); movd( pos^data1^tkn.num^mm^gratuity, "00" ); #ADD 17092*75 SEM^FRMT^NATL^DATA^TO^PSTM tkn^id ':=' intra^cntry^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, intra^cntry^data^tkn ); #DELETE 17092*7C/17092*7J SEM^FRMT^NATL^DATA^TO^PSTM #REPLACE 1709210m SEM^FRMT^NATL^DATA^TO^PSTM end; ! of if sem.ntl^pos^data.cntry^cde = "392" ! #ADD 1709210n SEM^FRMT^NATL^DATA^TO^PSTM if sem.ntl^pos^data.cntry^cde = "826" then begin ! ! UK debt repayment ! movd( intra^cntry^data^tkn.frmt^cde, "07" ); move( intra^cntry^data^tkn.gb^bnet.rcv^nam, sem.adnl^data^natl.gb.sub^fld^33.rcv^nam.tag^data ); move( intra^cntry^data^tkn.gb^bnet.rcv^postal^cde, sem.adnl^data^natl.gb.sub^fld^33.rcv^postal^cde. tag^data ); move( intra^cntry^data^tkn.gb^bnet.rcv^dob, sem.adnl^data^natl.gb.sub^fld^33.rcv^dob.tag^data ); move( intra^cntry^data^tkn.gb^bnet.rcv^acct^num, sem.adnl^data^natl.gb.sub^fld^33.rcv^acct^num. tag^data ); tkn^add^lgth := $offset( intra^cntry^data^tkn.gb^bnet. user^fld^gb^bnet ); end; ! of if sem.ntl^pos^data.cntry^cde = "826" #ADD 1709210o SEM^FRMT^NATL^DATA^TO^PSTM if tkn^add^lgth > 0 then begin #REPLACE 17092*9B SEM^FRMT^NATL^DATA^TO^PSTM end; ! of if tkn^add^lgth > 0 ! #DELETE 17092*9C/17092*9F SEM^FRMT^NATL^DATA^TO^PSTM #ADD 21520801 SEM^FRMT^XRQST^TO^PSTM^0200 else if adnl^data^ntl^bit^d and sem.adnl^data^natl.gb.sub^fld^33.tag = "033" then begin call sem^frmt^natl^data^to^pstm( pstm, sem ); end #REPLACE 26914*33/26914*33 OFFSET 0 TRACE^SEM end ! of tag = "030" ! else if hdr.adnl^data^natl.gb. sub^fld^33.tag = "033" then begin call ascii^integer( hdr.adnl^data^natl.gb. sub^fld^33.lgth, 3, t^length ); ! ! Move the tag 033 and tag length field ! movl( ptr, hdr.adnl^data^natl.gb.sub^fld^33.tag, 6 ); @ptr := @ptr + 6; sub^lgth := 6; ! ! Process tag 033 subtag 01 if present ! if hdr.adnl^data^natl.gb.sub^fld^33. rcv^nam.tag = "01" then begin call ascii^integer( hdr.adnl^data^natl.gb.sub^fld^33. rcv^nam.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. gb.sub^fld^33.rcv^nam.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "01" ! ! Process tag 033 subtag 02 if present ! if hdr.adnl^data^natl.gb.sub^fld^33. rcv^postal^cde.tag = "02" then begin call ascii^integer( hdr.adnl^data^natl.gb.sub^fld^33. rcv^postal^cde.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. gb.sub^fld^33.rcv^postal^cde. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "02" ! ! Process tag 033 subtag 03 if present ! if hdr.adnl^data^natl.gb.sub^fld^33. rcv^dob.tag = "03" then begin call ascii^integer( hdr.adnl^data^natl.gb.sub^fld^33. rcv^dob.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. gb.sub^fld^33.rcv^dob.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "03" ! ! Process tag 033 subtag 04 if present ! if hdr.adnl^data^natl.gb.sub^fld^33. rcv^acct^num.tag = "04" then begin call ascii^integer( hdr.adnl^data^natl.gb.sub^fld^33. rcv^acct^num.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. gb.sub^fld^33.rcv^acct^num.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "04" call translate( ptr[ - sub^lgth ], sub^lgth, ascii^to^ebcdic^l ); if t^length <> ( sub^lgth - 6 ) then begin return( index + 1 ); end; end; ! of tag = "033" #ADD 28674*0l TRACE^SEM if ptr[ length ] = "033" then begin ! ! Move in the tag and length fields ! movl( sem^ptr.adnl^data^natl.gb. sub^fld^33.tag, ptr[ length ], 6 ); length := length + 6; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 2], 2, sub^lgth ); if ptr[ length ] = "01" then begin movl( sem^ptr.adnl^data^natl.gb. sub^fld^33.rcv^nam.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "02" then begin movl( sem^ptr.adnl^data^natl.gb. sub^fld^33. rcv^postal^cde.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "03" then begin movl( sem^ptr.adnl^data^natl.gb. sub^fld^33.rcv^dob.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "04" then begin movl( sem^ptr.adnl^data^natl.gb. sub^fld^33.rcv^acct^num. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else begin ! ! Unrecognized tag ! length := length + sub^lgth + 4; end; end; ! of while end ! of tag "033" else #ENDSCN = SW0L250 !#CMP2.28 11/17/17 BNETS 6138 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6138 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6138 * ******************************************************************************** #SCN = SW0L252 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6138 #NEWVERSION = 6139 #ADD 03821l0I ! 17NOV2017 gruberg ! Symptom: Banknet Release 17.Q4 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1028 Debt Repayment Transactions ! - AN 1033 Visa Gateway Enhancements ! - Case #2607277 BNET sends incorrect reversal reason ! code to MasterCard ! - Case #2619627 Banknet does not send DE 54 amount type ! 44 (gratuity amount) outbound ! - Case #2659192 POS Data1 Token (CH) fields ! num-mm-gratuity and instl-gratuity-prd not being ! set correctly ! Procs modified: ! pstm^0220^force^post ! pstm^send^unmatchd^xrvsl^pos ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #008802 #DELETE 16339V07/16339f03 PSTM^0220^FORCE^POST #ADD 17066f0d PSTM^SEND^UNMATCHD^XRVSL^POS if pos^purch^adjust^d( pstm ) then begin movd( pstm.tran.tran^cde, "10" ); end else if pstm.tran.orig <> "HOST" then begin return false; end; #ADD 17066f1H PSTM^SEND^UNMATCHD^XRVSL^POS if not ( auth^id^resp^bit^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) then begin return false; end; #ENDSCN = SW0L252 !#CMP2.28 01/24/18 BNETLIBS6293 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6293 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6293 * ******************************************************************************** #SCN = SW0M007 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6293 #NEWVERSION = 6294 #ADD H078500S ! 23JAN2018 jayaprm ! Symptom: PMNT-PLAN and AUTH-MSG-IND of CH token mapped with ! spaces in PSTM 0210. ! Problem: 0110 response message processing is overwriting the ! values in PMNT-PLAN and AUTH-MSG-IND of CH token ! with spaces. ! Fix: Modified the interface code to have the valid values ! in PMNT-PLAN and AUTH-MSG-IND of CH token while building ! sem for acquirer processing. In 0110 message processing, ! removed the code that overwrite PMNT-PLAN and ! AUTH-MSG-IND of CH token. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2687321. #ADD 10027e0E SUB^LOG^ERROR movd( pos^data1^tkn.pmnt^typ^ind, "C05" ); end else begin move( pos^data1^tkn.pmnt^typ^ind, sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data ); end; #DELETE 10027e0F SUB^LOG^ERROR #ADD 10037 SUB^LOG^ERROR if found^pos^data1^tkn then begin if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then begin movd( pos^data1^tkn.auth^msg^ind, "2" ); end else begin move( pos^data1^tkn.auth^msg^ind, sem.addl^data.info.ext^cond^cdes^sub^fld^61. tag^data.final^auth^ind ); end; end; #DELETE 18913e0E SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 18913p06/18913p0A SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0M007 !#CMP2.28 02/12/18 BNETDDLS6061 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6061 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6061 * ******************************************************************************** #SCN = SW0M011 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6061 #NEWVERSION = 6062 #ADD 00262;0O * 12FEB2018 jayaprm * Symptom: Banknet Release 18.Q2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * AN 1109 - Cardholder Authentication Enhancement * for Poland. * Added a field for DE 48 SE 53 (6 bytes), * and reduced the length of the user field * within the DE 48 definition by the same * amount (to 68 bytes), to ensure that the * overall length of the SEM structure * doesn't changed. * Modified the Switch token version to 20. * Added new field e-id-rqst-cde to the BNET * switch token. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLATTKN, DDLBATKN, DDLGPSTM, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, PSTKNID * OK60LIB: OKLIBTS * PS60RTAU: AUTHLIBS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run Make. * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #008889 #ADD 01157:0F SEM * * E-ID Request Code * Subfield tag = 53 * Contains information about additional cardholder information * requested by the acquirer * 06 e-id-rqst-cde-sub-fld-53. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 04 user-fld pic x(68). #DELETE 01157:0G SEM #ADD 02760*00 SAF-BNET * Switch token version (ver-id) will be "20". #DELETE 02760*01 SAF-BNET #ADD 02760*06 SAF-BNET 02 e-id-rqst-cde pic x(2). #ENDSCN = SW0M011 !#CMP2.28 02/12/18 BNETG 60107FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60107 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60107 * ******************************************************************************** #SCN = SW0M012 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V000260F ! 12FEB2018 jayaprm ! Symptom: Banknet Release 18.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the code in support of the following: ! AN 1103 - Credential on File Indicator for ! Mastercard-Branded Transactions. ! Added a new POS Entry Mode define ! credential^on^file^entry^d for value of "10". ! Modified the SEM^ECOMM^D define to be set ! when the POS Entry mode contain the value ! as "10" and DE48 SF42 is present. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLGPSTM, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, PSTKNID ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #008889 #ADD B0136602 credential^on^file^entry^d = "10"#, #ADD B0136605 x.pos^entry^mde = mobile^ecomm^d or ( x.pos^entry^mde = credential^on^file^entry^d and x.addl^data.info.ecom^sec^sub^fld^42 = "42" ) ) #; #DELETE 01366~05 #ENDSCN = SW0M012 !#CMP2.28 02/12/18 BNETLIBS6294 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6294 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6294 * ******************************************************************************** #SCN = SW0M013 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6294 #NEWVERSION = 6295 #ADD I078500G ! 12FEB2018 jayaprm ! Symptom: Banknet Release 18.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 1054 - Introduction of the New On-Behalf Services ! CVC 1 Pre-Validation Service ! AN 1085 - AAV Validation for EMV 3-D Secure ! AN 1103 - Credential on File Indicator for ! Mastercard-Branded Transactions ! AN 1109 - Cardholder Authentication Enhancement ! for Poland ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^pos^entry^mde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLGPSTM, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, PSTKNID ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #008889 #ADD 17536 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM sem.pos^entry^mde = credential^on^file^entry^d or #ADD 18730 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.cvc^sub^fld^87. tag^data = "E" then begin ! ! This is a CVC3 result. ! movd( card^vrfy^flg, "L" ); end else #ADD 18811 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Do Nothing ! #DELETE 18812 /18815 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 18843 SEM^FRMT^XRESP^TO^PSTM^0210 movd( crd^vrfy^flg2, "U" ) #ADD B2142206 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = mobile^ecomm^d or sem.pos^entry^mde = credential^on^file^entry^d then #DELETE B2142207 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD B2142407 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = credential^on^file^entry^d then begin movd( pos^data1^tkn.pmnt^info, "2" ); end; #ADD 22247*09 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = credential^on^file^entry^d or #ADD 22317#00 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = mobile^ecomm^d or sem.pos^entry^mde = credential^on^file^entry^d ) and #DELETE 22317#01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22417 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "I" then #ADD 22423 SEM^FRMT^XRQST^TO^PSTM^0200 end else begin ! ! Not Validated ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "0" ); #ADD 22429 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "10" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "11" or sem.addl^data.info. on^behalf^svc^sub^fld^71. #REPLACE 22449|0d SEM^FRMT^XRQST^TO^PSTM^0200 ! Keys not available ! #REPLACE 22449|0f SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "U" ); #REPLACE 22449|0y SEM^FRMT^XRQST^TO^PSTM^0200 ! UN length indicator mismatch ! #REPLACE 22449|10 SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "L" ); #REPLACE 22455 SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "N" ); #ADD 26021*0n TRACE^SEM ! ! E-ID Request Code ! if hdr.addl^data.info. e^id^rqst^cde^sub^fld^53.tag = "53" then begin call ascii^integer( hdr.addl^data.info. e^id^rqst^cde^sub^fld^53.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. e^id^rqst^cde^sub^fld^53.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 28022v00 TRACE^SEM if ptr[ length ] = "53" then begin ! ! E-ID Request Code ! movl( sem^ptr.addl^data.info. e^id^rqst^cde^sub^fld^53.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 36343`00 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "20"; #DELETE 36343`01 UTIL^SWI^TKN^INIT #ADD 36635*08 UTIL^SWI^TKN^INIT if sem.addl^data.info. e^id^rqst^cde^sub^fld^53.tag = "53" then begin movl( bnet^tkn^buf.e^id^rqst^cde, sem.addl^data.info.e^id^rqst^cde^sub^fld^53. tag^data, $len( bnet^tkn^buf.e^id^rqst^cde ) ); end; ! of if tag = "53" #ADD 37095*07 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.e^id^rqst^cde <> blanks for $len( bnet^tkn^buf.e^id^rqst^cde ) then begin movl( bnet^tkn.e^id^rqst^cde, bnet^tkn^buf.e^id^rqst^cde, $len( bnet^tkn.e^id^rqst^cde ) ); end; ! of if bnet^tkn^buf.e^id^rqst^cde #ENDSCN = SW0M013 !#CMP2.28 04/18/18 BNETG 60108FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60108 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60108 * ******************************************************************************** #SCN = SW0M080 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W000260O ! 17APR2018 gruberg ! Symptom: Banknet Release 18.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1103-Credential on File Indicator for Mastercard- ! Branded Transactions ! - AN 1109-Cardholder Authentication Enhancement for ! Poland ! - AN 1334-Switzerland Vending Machines: Preauthorization ! Requests on Swiss Maestro Cards ! - Case #02699403: Retirement of the Recurring Payment ! Test Transaction ! - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in ! ATM Transaction from BNET ! - Case #02711169: Use System Time to Avoid Manual ! Intervention ! - Removal of Issuer Support for the Transaction Specific ! Data Token (Token ID = "CT") ! Added a new PSTM define pos^swiss^vending^txn^d for a ! debit card transaction from an unattended Swiss vending ! machine, and modified the existing pos^preauth^match^d ! define to include the new define. ! Added a new SEM define sem^swiss^vending^txn^d for a ! debit card transaction from an unattended Swiss vending ! machine, and modified the existing sem^preauth^match^d ! define to include the new define. ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008931 #ADD Q0016602 define pos^swiss^vending^txn^d( x ) = ( x.term^cntry^cde = "CH" and ( x.retl^sic^cde = "5499" or x.retl^sic^cde = "7399" ) and ( x.pt^srv^cond^cde = "02" or x.pt^srv^cond^cde = "27" ) and util^debit^crd^typ( x.rte.srv ) )#; define pos^preauth^match^d( x ) = ( ( x.retl^sic^cde = "5542" ) or pos^swiss^vending^txn^d( x ) )#; #DELETE 00166>01 #ADD 00166>02 define sem^swiss^vending^txn^d( x ) = ( x.ntl^pos^data.cntry^cde = "756" and ( x.merch^typ = "5499" or x.merch^typ = "7399" ) and ( x.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or x.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) and x.ntl^pos^data.cond^cde.byte[ 6 ] = "4" and pct.dflt.cntry^cde = "756" and util^maestro( x.banknet^data.ntwk^id^cde ) )#; #ADD 00166^01 ( ( x.merch^typ = "5542" ) or sem^swiss^vending^txn^d( x ) ) )#; #DELETE 00166^02 #ENDSCN = SW0M080 !#CMP2.28 04/18/18 BNETLIBS6295 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6295 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6295 * ******************************************************************************** #SCN = SW0M081 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6295 #NEWVERSION = 6296 #ADD J078500V ! 17APR2018 gruberg ! Symptom: Banknet Release 18.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1103-Credential on File Indicator for Mastercard- ! Branded Transactions ! - AN 1109-Cardholder Authentication Enhancement for ! Poland ! - AN 1334-Switzerland Vending Machines: Preauthorization ! Requests on Swiss Maestro Cards ! - Case #02699403: Retirement of the Recurring Payment ! Test Transaction ! - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in ! ATM Transaction from BNET ! - Case #02711169: Use System Time to Avoid Manual ! Intervention ! - Removal of Issuer Support for the Transaction Specific ! Data Token (Token ID = "CT") ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xadv^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008931 #ADD B0967501 SUB^LOG^ERROR ! and must be sent as an ASI (DE 61.7 = "8") #ADD 09700 SUB^LOG^ERROR movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "8" ); #DELETE 09701 SUB^LOG^ERROR #ADD H1013800 SUB^LOG^ERROR if sem.typ = sem^auth^request^d then #DELETE H1013801/H1013802 SUB^LOG^ERROR #REPLACE H1013808 SUB^LOG^ERROR movd( sem.pos^entry^mde, credential^on^file^entry^d ); #ADD 13536v03 PSTM^FRMT^SEM^ADDL^DATA int .pos^data2^tkn( pos^data2^tkn^def ); int .pos^data2^tkn^fnd := false; #ADD H1355906 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' pos^data2^tkn^id^d; pos^data2^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @pos^data2^tkn, tkn^lgth ); #ADD 14930 PSTM^FRMT^SEM^ADDL^DATA ! ! POS Data2 token (Id = 'CZ') ! if pos^data2^tkn^fnd then begin ! ! Process DE 48 SE 53 ! if ( pos^data2^tkn.adnl^data^cde = "01" or pos^data2^tkn.adnl^data^cde = "02" ) then begin movd( sem.addl^data.info.e^id^rqst^cde^sub^fld^53. tag, "53" ); movd( sem.addl^data.info.e^id^rqst^cde^sub^fld^53. lgth, "02" ); move( sem.addl^data.info.e^id^rqst^cde^sub^fld^53. tag^data, pos^data2^tkn.adnl^data^cde ); ! ! Adjust the length of DE 48 ! for the data added to DE 48 SE 53 ! call ascii^integer^( sem.addl^data.info. e^id^rqst^cde^sub^fld^53. lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; end; end; ! of POS Data2 token found #ADD 18146 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if bnet^g.tran^tim^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( rvsl.orig.dat^tim, pstm.tran^dat ); movl( pstm.tran^tim, rvsl.orig.dat^tim.byte[ 4 ], 6 ); end; #DELETE 18241 /18264 SEM^FRMT^XADV^TO^PSTM^0220 #ADD 18619 SEM^FRMT^XRESP^TO^PSTM^0210 end; if conv^dat^bit^d then !bit 16! begin #ADD 18636 SEM^FRMT^XRESP^TO^PSTM^0210 sem.iss^crncy^cde ); #DELETE 18637 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 20397502/20399 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 20783 /20798 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 20801v03/20955 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21798 SEM^FRMT^XRQST^TO^PSTM^0200 end; if conv^dat^bit^d then !bit 16! begin #ADD 21809 SEM^FRMT^XRQST^TO^PSTM^0200 if tran^amt^bit^d then !bit 4! #DELETE 21810 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22587502 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info. e^id^rqst^cde^sub^fld^53.tag = "53" or #ADD 2258750u SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. e^id^rqst^cde^sub^fld^53.tag = "53" then begin move( pos^data2^tkn.adnl^data^cde, sem.addl^data.info. e^id^rqst^cde^sub^fld^53.tag^data ); end; #ENDSCN = SW0M081 !#CMP2.28 04/18/18 BNETS 6139 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6139 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6139 * ******************************************************************************** #SCN = SW0M084 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6139 #NEWVERSION = 6140 #ADD 03821m0M ! 17APR2018 gruberg ! Symptom: Banknet Release 18.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1103-Credential on File Indicator for Mastercard- ! Branded Transactions ! - AN 1109-Cardholder Authentication Enhancement for ! Poland ! - AN 1334-Switzerland Vending Machines: Preauthorization ! Requests on Swiss Maestro Cards ! - Case #02699403: Retirement of the Recurring Payment ! Test Transaction ! - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in ! ATM Transaction from BNET ! - Case #02711169: Use System Time to Avoid Manual ! Intervention ! - Removal of Issuer Support for the Transaction Specific ! Data Token (Token ID = "CT") ! Procs modified: pstm^0200^request ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008931 #ADD 15202 PSTM^0200^REQUEST int .pt^srv^data^tkn( pt^srv^data^tkn^def ); #ADD 15346 SUB^APPRV^BLIND if base24^rel^g >= 5 then begin tkn^id ':=' pt^srv^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @pt^srv^data^tkn, tkn_lgth ) then begin if pt^srv^data^tkn.crdhldr^actvt^term^ind = cat^lvl^1^auto^disp^mach^d or pt^srv^data^tkn.crdhldr^actvt^term^ind = cat^lvl^2^self^srvc^term^d then begin if pt^srv^data^tkn.crd^captr^ind = "1" then begin movd( pstm.pt^srv^cond^cde, "02" ); end else begin movd( pstm.pt^srv^cond^cde, "27" ); end; end; end; end; #ENDSCN = SW0M084 !#CMP2.28 05/31/18 BNETS 6140 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6140 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6140 * ******************************************************************************** #SCN = SW0M098 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6140 #NEWVERSION = 6141 #ADD 03821n0S ! 31MAY2018 venugov ! Symptom: Incorrect BNET behavior on SPDH FF transaction ! Problem: Interface performs alternate routing for force post ! even though it is not a AFD completion advice ! transaction. ! Fix: Interface has been modified to prevent alternate ! routing when it is not a AFD completion advice ! transaction. ! Procs modified: pstm^0220^force^post ! Dependency: Apply fixes to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #2744480 #ADD 16235Z00 PSTM^0220^FORCE^POST if ( pos^preauth^comp^d( pstm ) and not pos^preauth^match^d( pstm ) ) or #REPLACE 16235Z01 PSTM^0220^FORCE^POST pos^return^d(pstm) or #ENDSCN = SW0M098 !#CMP2.28 07/17/18 BNETLIBS6296 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6296 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6296 * ******************************************************************************** #SCN = SW0M112 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6296 #NEWVERSION = 6297 #ADD K078500X ! 17JUL2018 wielerk ! Symptom: The interface does not correctly evaluate an edit ! for AFD transactions. ! Problem: The edit that determines whether a Maestro card has ! been used always evaluates as true and makes the PSTM ! tran code = "11". ! Fix: Modified edit to combine the AFD message type edits ! and combine the edits for DE-60 ( ntl pos data ) ! and DE-63 ( network id ). ! Proc modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2769631. #REPLACE 17849%05 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.advice^cde.reason^cde <> "191" )) and #REPLACE 17849%0A SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" ) ) then #ENDSCN = SW0M112 !#CMP2.28 07/24/18 BNETLIBS6297 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6297 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6297 * ******************************************************************************** #SCN = SW0M114 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6297 #NEWVERSION = 6298 #ADD L078500F ! 24JUL2018 wielerk ! Symptom: The interface does not correctly set DE-48.SE-20 ! ( addl data.card verify method ) when formatting an ! external pre-auth completion. ! Problem: The edit that determines whether a pre-auth contained ! a PIN was checking DE-48.SE.20 for blanks and setting ! the field to "S" ( no online PIN ). ! This particular field is set when formatting the ! pre-auth, checking for PIN presence and logging this ! to the ILF but not sending the value to Mastercard. ! The interface already locates the ILF for a completion ! and that is where the flag is set to be edited. ! Fix: Modified code to check orig^sem for the setting of ! DE-48.SE-20 and set the sem field accordingly. ! Proc modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2771650. #ADD 11244 PSTM^FRMT^0220^TO^XADV if orig^sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. tag^data = "P" then begin movd( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. tag^data, "P" ); end; #ADD 11365 PSTM^FRMT^0220^TO^XADV if sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data <> "P" then #DELETE 11366 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0M114 !#CMP2.28 08/22/18 BNETDDLS6062 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6062 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6062 * ******************************************************************************** #SCN = SW0M167 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00262<0S * 22AUG2018 jayaprm * Symptom: Banknet Release 18.Q4 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * - AN 1619-Enhancements to Dynamic CVC 3 Validation * Services * - AN 1626-Introduction of mPOS Indicators for Software * based Terminals * - AN 1630-AAV Verification Service Enhancements * - AN 1633-Enhancements to the Mastercard Installment * Payment Service * - AN 1638-Enabling Tokenized, Contactless ATM * Transactions * - Release 18.Q3 AN 1602-Colombia ATM Cash Withdrawal * Cardholder Fee Inquiry Request Service * - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in * ATM Transaction from BNET * - Case #02711169: Use System Time to Avoid Manual * Intervention * Dependency: Apply fixes to: * AT60IATH: AUTHEMVS * AT60QATH: AUTHDCVS * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: PSTKNCVS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run Make. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #008946 #ADD 01157<0B SEM * * Acceptance Data * Subfield tag = 21 * Contains information about the merchant terminal's capability to * support specific programs and services * 06 accpt-data-sub-fld-21. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 mpos-dev-typ pic x. 10 user-fld-aci pic x(4). * * Authentication Data * Subfield tag = 66 * Contains information about the 3D Secure process used to * authenticate the cardholder * 06 authn-data-sub-fld-66. 08 tag pic 99. 08 lgth pic 99. 08 pgm-proto. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 ds-txn-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(36). 04 user-fld pic x(10). #DELETE 01157<0C SEM #ADD 01411$1M SEM 04 co redefines info. 06 sub-fld-35. 08 tag pic x(3). 08 lgth pic x(3). 08 iss-fee-inq-ind pic x(2). 06 sub-fld-36. 08 tag pic x(3). 08 lgth pic x(3). 08 iss-fee-amt pic x(12). 06 user-fld-aci pic x(753). #ADD 02760*06 SAF-BNET 02 wallet-id pic x(3). #DELETE 02760<05/02760*07 SAF-BNET #ENDSCN = SW0M167 !#CMP2.28 08/22/18 BNETG 60109FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60109 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60109 * ******************************************************************************** #SCN = SW0M168 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X000260Z ! 22AUG2018 jayaprm ! Symptom: Banknet Release 18.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1619-Enhancements to Dynamic CVC 3 Validation ! Services ! - AN 1626-Introduction of mPOS Indicators for Software ! based Terminals ! - AN 1630-AAV Verification Service Enhancements ! - AN 1633-Enhancements to the Mastercard Installment ! Payment Service ! - AN 1638-Enabling Tokenized, Contactless ATM ! Transactions ! - Release 18.Q3 AN 1602-Colombia ATM Cash Withdrawal ! Cardholder Fee Inquiry Request Service ! - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in ! ATM Transaction from BNET ! - Case #02711169: Use System Time to Avoid Manual ! Intervention ! Added logic to source in ext^authn^data^tkn and ! issuer^fee^rebate^tkn from BADDLTAL ! Added define sem^atm^wdl^inq^d to identify an ATM ! cash withdrawal inquiry. ! Dependency: Apply fixes to: ! AT60IATH: AUTHEMVS ! AT60QATH: AUTHDCVS ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008946 #ADD K000260K ?nolist, source =basrc_baddltal( ? ? adnl^amts^tkn ? adnl^mrch^data^tkn ? at^flg1^tkn ? atm ? atmicf ? atmicfe_ ? at50^tkn ? blk^size^constants ? chip^data^tkn ? cntctlss^txn^data^tkn ? dgtl^wallet^tkn ? e^com^addl^data^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? ichg^compliance^atm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? instl^resp^data^tkn ? intra^cntry^data^tkn ? iss^tknztn^data^tkn ? issuer^fee^rebate^tkn ? language^tkn ? mobile^pmnts^tkn ? ncdicf ? ncd^tkn ? ntwk^tkn^srvc^tkn ? p2p^addl^data^tkn ? p2p^rcv^data^tkn ? p2p^sender^data^tkn ? p2p^txn2^tkn ? pan^mapping^tkn ? par^tkn ? pinc^tkn ? pos^bal^tkn ? pos^data2^tkn ? rcpt^data^tkn ? stm ? stm_ ? surcharge^data^tkn ? transit^txn^tkn ? txn^analysis^tkn ? txn^prfl^tkn ? txn_prfl_tkn ? user^data ? ? ) #DELETE R000260e/R000261S #ADD I0002616 ! ext^authn^data^tkn #ADD K000261A ! issuer^fee^rebate^tkn #ADD 00233}0A define sem^atm^wdl^inq^d( x ) = ( ( x.proc^cde.byte[ 0 ] = sem^wdl^d ) and x.ntl^pos^data.cond^cde.byte[ 6 ] = "8" )#; #ENDSCN = SW0M168 !#CMP2.28 08/22/18 BNETLIBS6298 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6298 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6298 * ******************************************************************************** #SCN = SW0M169 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6298 #NEWVERSION = 6299 #ADD M078500K ! 22AUG2018 jayaprm ! Symptom: Banknet Release 18.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1619-Enhancements to Dynamic CVC 3 Validation ! Services ! - AN 1626-Introduction of mPOS Indicators for Software ! based Terminals ! - AN 1630-AAV Verification Service Enhancements ! - AN 1633-Enhancements to the Mastercard Installment ! Payment Service ! - AN 1638-Enabling Tokenized, Contactless ATM ! Transactions ! - Release 18.Q3 AN 1602-Colombia ATM Cash Withdrawal ! Cardholder Fee Inquiry Request Service ! - Case #02693780: Incorrect mult^crncy.auth^crncy^cde in ! ATM Transaction from BNET ! - Case #02711169: Use System Time to Avoid Manual ! Intervention ! Procs modified: SEM^FRMT^POS^ENTRY^MDE^TO^PSTM ! SEM^FRMT^XRQST^TO^PSTM^0200 ! UTIL^COLLAPSE^SEM ! UTIL^EXPAND^SEM ! UTIL^SWI^TKN^INIT ! UTIL^SWI^TKN^UPDT ! Dependency: Apply fixes to: ! AT60IATH: AUTHEMVS ! AT60QATH: AUTHDCVS ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #008946 #ADD 17581 SEM^FRMT^POS^ENTRY^MDE^TO^PSTM if sem.pos^entry^mde.byte[ 2 ] = "3" then begin movd( pstm.pt^srv^entry^mde.byte[ 2 ], "1" ); end; #ADD 20384 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ext^authn^data^tkn( ext^authn^data^tkn^def ); #ADD B2142409 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde.byte[ 2 ] = "1" then begin movd( pos^data1^tkn.crdhldr^authn^cap^ind, "1" ); add^pos^data1 := true; end else if sem.pos^entry^mde.byte[ 2 ] = "3" then begin movd( pos^data1^tkn.crdhldr^authn^cap^ind, "7" ); add^pos^data1 := true; end else if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" and ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "1" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "2" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "3" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind = "5" ) then begin movd( pos^data1^tkn.crdhldr^authn^cap^ind, "9" ); add^pos^data1 := true; end; #ADD 21424k04 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.accpt^data^sub^fld^21. tag = "21" and sem.addl^data.info.accpt^data^sub^fld^21. tag^data.mpos^dev^typ = "1" then begin movd( pos^data1^tkn.term^typ, "8" ); end; #REPLACE 22446 SEM^FRMT^XRQST^TO^PSTM^0200 ! Valid CVD, Invalid ATC ! #REPLACE 22448 SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "Y" ); #REPLACE 22449|0B SEM^FRMT^XRQST^TO^PSTM^0200 ! Valid CVD, Invalid ATC ! #REPLACE 22449|0D SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "Y" ); #ADD 22463 SEM^FRMT^XRQST^TO^PSTM^0200 "X" -> begin ! ! Security platform time out ! movd( card^vrfy^flg, "N" ); end; "Z" -> begin ! ! Security platform system error ! movd( card^vrfy^flg, "N" ); end; #ADD 22859 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66 = "66" then begin ! ! Extended Authentication Data Token ! tkn^id ':=' ext^authn^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, ext^authn^data^tkn ); movd( ext^authn^data^tkn.data^ind^flg, "02" ); movd( ext^authn^data^tkn.info^data^lgth, "0037" ); movl( ext^authn^data^tkn.mc^authn^data.pgm^proto, sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data ) ); movl( ext^authn^data^tkn.mc^authn^data.ds^txn^id, sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data ) ); tkn^add^lgth := $offset( ext^authn^data^tkn.mc^authn^data. user^fld^mc ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1796, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1797, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1797 ); end; end; end; #ADD 25732 TRACE^SEM ! ! Acceptance Data ! if hdr.addl^data.info. accpt^data^sub^fld^21.tag = "21" then begin call ascii^integer( hdr.addl^data.info. accpt^data^sub^fld^21.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. accpt^data^sub^fld^21.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 26693`15 TRACE^SEM ! ! Authentication Data ! if hdr.addl^data.info. authn^data^sub^fld^66.tag = "66" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. authn^data^sub^fld^66.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - Program Protocol ! if hdr.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag = "01" then begin call ascii^integer( hdr.addl^data.info. authn^data^sub^fld^66. pgm^proto.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. authn^data^sub^fld^66. pgm^proto.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! Move Subfield 2 - Directory Server Txn Id ! if hdr.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag = "02" then begin call ascii^integer( hdr.addl^data.info. authn^data^sub^fld^66. ds^txn^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. authn^data^sub^fld^66. ds^txn^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! end; ! of if hdr...tag = "66" #REPLACE H269142C/H269142C OFFSET 0 TRACE^SEM end ! of tag = "033" ! else if hdr.adnl^data^natl.co. sub^fld^35.tag = "035" then begin call ascii^integer( hdr.adnl^data^natl.co. sub^fld^35.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.co. sub^fld^35.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "035" else if hdr.adnl^data^natl.co. sub^fld^36.tag = "036" then begin call ascii^integer( hdr.adnl^data^natl.co. sub^fld^36.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.co. sub^fld^36.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "036" else begin ! unrecognized tag - do nothing ! end; #ADD 27917 TRACE^SEM else if ptr[ length ] = "21" then begin ! ! Acceptance Data ! movl( sem^ptr.addl^data.info. accpt^data^sub^fld^21.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end #ADD 28064k0E TRACE^SEM if ptr[ length ] = "66" then begin ! ! Authentication Data ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. authn^data^sub^fld^66.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - Program Protocol ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. authn^data^sub^fld^66. pgm^proto.tag ); end ! subfield 01 ! else ! ! Move Subfield 2 - Directory Server ! Transaction Id ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. authn^data^sub^fld^66. ds^txn^id.tag ); end ! subfield 02 ! else ! ! bad data, clear sem de-48.se-66 ! end loop ! begin init( sem^ptr.addl^data.info. authn^data^sub^fld^66, " ", $len( sem^ptr.addl^data.info. authn^data^sub^fld^66 ) ); loop^lgth := tag^length; end; end; length := length + tag^length + 4; end ! of if ptr[ length ] = "66" else #ADD H286741B TRACE^SEM if ptr[ length ] = "035" then begin movl( sem^ptr.adnl^data^natl.co. sub^fld^35.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "036" then begin movl( sem^ptr.adnl^data^natl.co. sub^fld^36.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 36635 UTIL^SWI^TKN^INIT if sem.addl^data.info. wallet^pgm^sub^fld^26.tag = "26" then begin move( bnet^tkn^buf.wallet^id, sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id ); end; ! of if tag = "26" #DELETE J3663500/J3663508 UTIL^SWI^TKN^INIT #ADD 37095 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.wallet^id <> blanks for $len( bnet^tkn^buf.wallet^id ) then begin movl( bnet^tkn.wallet^id, bnet^tkn^buf.wallet^id, $len( bnet^tkn.wallet^id ) ); end; ! of if bnet^tkn^buf.wallet^id #DELETE J3709500/J3709508 UTIL^SWI^TKN^UPDT #ENDSCN = SW0M169 !#CMP2.28 08/24/18 BNETLIBS6299 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6299 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 6299 * ******************************************************************************** #SCN = SW0M188 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6299 #NEWVERSION = 62100 #ADD N078500b ! 24AUG2018 wielerk ! Symptom: The interface dumps after applying 18Q2 phase II fixes. ! Problem: An integer was added to identify a token found status ! and was defined as a pointer and not a direct variable. ! Fix: Modified code to remove the indirection symbol for ! pos^data2^tkn^fnd. ! Proc modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2787896. #REPLACE K1353602 PSTM^FRMT^SEM^ADDL^DATA int pos^data2^tkn^fnd := false; #ENDSCN = SW0M188 !#CMP2.28 09/17/18 BNETDDLS6063 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6063 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6063 * ******************************************************************************** #SCN = SW0M195 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00262=0V * 14SEP2018 jayaprm * Symptom: Fix for DE48 SE21(Acceptance Data) * Problem: The structure of DE48 SE21 defined is not matching with * with the MasterCard specification. * Fix: Modified the DDL structure of DE48 SE21. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETLIBS * Run Make. * Reference: Case #2797234 #ADD 01157=09 SEM 08 mpos-dev-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. #DELETE 01157=0A/01157=0C SEM #ENDSCN = SW0M195 !#CMP2.28 09/17/18 BNETLIBS62100FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62100 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62100 * ******************************************************************************** #SCN = SW0M196 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62100 #NEWVERSION = 62101 #ADD O078500C ! 14SEP2018 jayaprm ! Symptom: Fix for DE48 SE21(Acceptance Data) ! Problem: The structure of DE48 SE21 defined in BNETDDLS is not ! matching with the MasterCard specification. ! Fix: Modified the code inorder to support the new DDL ! structure of DE48 SE21. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETLIBS ! Run Make. ! Reference: Case #2797234 #REPLACE N214240V SEM^FRMT^XRQST^TO^PSTM^0200 mpos^dev^typ.tag^data = "1" then #ADD N2573206 TRACE^SEM ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. accpt^data^sub^fld^21.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - mPOS Acceptance ! Device Type ! if hdr.addl^data.info.accpt^data^sub^fld^21. mpos^dev^typ.tag = "01" then begin call ascii^integer( hdr.addl^data.info. accpt^data^sub^fld^21. mpos^dev^typ.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. accpt^data^sub^fld^21. mpos^dev^typ.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! #DELETE N2573207/N257320M TRACE^SEM #REPLACE N279170A TRACE^SEM 4 ); #ADD N279170A TRACE^SEM @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - mPOS Acceptance ! Device Type ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. accpt^data^sub^fld^21. mpos^dev^typ.tag ); end ! subfield 01 ! else ! ! bad data, clear sem de-48.se-21 ! end loop ! begin init( sem^ptr.addl^data.info. accpt^data^sub^fld^21, " ", $len( sem^ptr.addl^data.info. accpt^data^sub^fld^21 ) ); loop^lgth := tag^length; end; end; #ENDSCN = SW0M196 !#CMP2.28 10/17/18 BNETDDLS6064 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6064 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6064 * ******************************************************************************** #SCN = SW0M224 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00262>0A * 15OCT2018 velsamv * Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * - AN 1621 Visa Gateway Enhancements * - AN 1630 AAV Verification Service Enhancements * - Case #2785276 Multiple Authorization Requests for * Card-Not-Present Transactions * - Case #2802056 Authorization Best Practices and * Support Tools for the Latin America and Caribbean * Region * For DE 48, modified the definition of SE 78 to support a * Message Reason Code (SF 5), and reduced the size of * the RSRVD field by one byte. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETLIBS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #009009 #ADD 01157;01 SEM 08 msg-rsn-cde pic x. 08 rsrvd pic x(1). #DELETE 01157;02 SEM #ENDSCN = SW0M224 !#CMP2.28 10/17/18 BNETLIBS62101FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62101 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62101 * ******************************************************************************** #SCN = SW0M226 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62101 #NEWVERSION = 62102 #ADD P078500E ! 17OCT2018 velsamv ! Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 1621 Visa Gateway Enhancements ! - AN 1630 AAV Verification Service Enhancements ! - Case #2785276 Multiple Authorization Requests for ! Card-Not-Present Transactions ! - Case #2802056 Authorization Best Practices and ! Support Tools for the Latin America and Caribbean ! Region ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETLIBS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009009 #ADD 11771 PSTM^FRMT^0420^TO^ACQ^XRVSL call util^frmt^addl^data^to^xrvsl ( orig^sem, sem, de48^lgth ); #DELETE 11772 /11885 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 13076 PSTM^FRMT^RESP^CDE^TO^SEM "054",! No Atalla Box ! "88",! Cryptographic failure ! #DELETE 13077 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13088 PSTM^FRMT^RESP^CDE^TO^SEM "060",! No Accounts ! "*7",! A - 14, P - 78 ! #DELETE 13089 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13090 PSTM^FRMT^RESP^CDE^TO^SEM "061",! No PBF ! "96",! System problem ! #DELETE 13091 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13093 PSTM^FRMT^RESP^CDE^TO^SEM "063",! Invalid Auth Type ! "96",! System problem ! #DELETE 13094 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13097t04 PSTM^FRMT^RESP^CDE^TO^SEM "069",! Message Edit Error ! "96",! System problem ! #DELETE 13097t05 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13097t09 PSTM^FRMT^RESP^CDE^TO^SEM "074",! Unable to Authorize ! "96",! System problem ! #DELETE 13097t0A PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13097t0C PSTM^FRMT^RESP^CDE^TO^SEM "077",! Pre-Auth limit reached ! "65",! Exceeds withdraw count! #DELETE 13097t0D PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13097t0L PSTM^FRMT^RESP^CDE^TO^SEM "086",! Over Floor Limit ! "13",! Invalid Amount ! #DELETE 13097t0M PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13140s00 PSTM^FRMT^RESP^CDE^TO^SEM "093",! Delinquent ! "*7",! A - 14, P - 78 ! #DELETE 13140s01 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13145t02 PSTM^FRMT^RESP^CDE^TO^SEM "099",! bad PBF ! "*7",! A - 14, P - 78 ! #DELETE 13145t03 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13145t0R PSTM^FRMT^RESP^CDE^TO^SEM "200",! Error; account ! "*7",! A - 14, P - 78 ! #DELETE 13145t0S PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13145t0U PSTM^FRMT^RESP^CDE^TO^SEM "203",! Error; need admin card ! "*4",! A - 57, P - 12 ! #DELETE 13145t0V PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13145t0Z PSTM^FRMT^RESP^CDE^TO^SEM "208",! Error; invalid exp date ! "14",! Invalid card number ! "209",! Error; invalid trancode ! "*4",! A - 57, P - 12 ! #DELETE 13145t0a/13145t0b PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13201s01 PSTM^FRMT^RESP^CDE^TO^SEM "401",! HSM param error ! "88",! Cryptographic failure ! "402",! HSM failure ! "88",! Cryptographic failure ! "403",! KEYI record not found ! "88",! Cryptographic failure ! #DELETE 13202 /13204 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13204s04 PSTM^FRMT^RESP^CDE^TO^SEM "408",! Fallback decline ! "58",! Tran not supp at term ! #DELETE 13204s05 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 13255 PSTM^FRMT^RESP^CDE^TO^SEM if rcode = "*7" then begin rcode ':=' "14"; end; #ADD 13271 PSTM^FRMT^RESP^CDE^TO^SEM if rcode = "*7" then begin rcode ':=' "78"; end else #ADD 13344 PSTM^FRMT^SEM^ADDL^DATA int .ext^authn^data^tkn( ext^authn^data^tkn^def ); int ext^authn^data^tkn^lgth; #ADD K1353600 PSTM^FRMT^SEM^ADDL^DATA int .pos^data1^tkn( pos^data1^tkn^def ); int pos^data1^tkn^fnd := false; #ADD 13559 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' pos^data1^tkn^id^d; pos^data1^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, tkn^lgth ); #ADD 14491 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' ext^authn^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @ext^authn^data^tkn, ext^authn^data^tkn^lgth ) then begin ! ! Populate DE 48, SE 66, SF 1 ! movd( sem.addl^data.info.authn^data^sub^fld^66.tag, "66" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag, "01" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.lgth, "01" ); move( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, ext^authn^data^tkn. mc^authn^data.pgm^proto ); sub^lgth := $len( sem.addl^data.info. authn^data^sub^fld^66. pgm^proto ); ! ! Populate DE 48, SE 66, SF 2 ! if ext^authn^data^tkn.mc^authn^data.ds^txn^id <> [ $len( ext^authn^data^tkn.mc^authn^data. ds^txn^id ) * [ " " ] ] then begin movd( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag, "02" ); movd( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.lgth, "36" ); move( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data, ext^authn^data^tkn. mc^authn^data.ds^txn^id ); sub^lgth := sub^lgth + $len( sem.addl^data.info. authn^data^sub^fld^66.ds^txn^id ); end; ! ! Convert sub field length to ASCII ! call integer^ascii^( sem.addl^data.info. authn^data^sub^fld^66.lgth, sub^lgth ); ! ! Convert total length to ASCII ! lgth := lgth + sub^lgth + 4; end; #ADD H148280A PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn^fnd and pos^data1^tkn.pmnt^ind <> blanks for $len( pos^data1^tkn.pmnt^ind ) then begin if pos^data1^tkn.pmnt^ind = "N" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "0" ); end else if pos^data1^tkn.pmnt^ind = "S" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "1" ); end else if pos^data1^tkn.pmnt^ind = "D" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "2" ); end else if pos^data1^tkn.pmnt^ind = "A" or pos^data1^tkn.pmnt^ind = "P" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "3" ); end else if pos^data1^tkn.pmnt^ind = "X" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "4" ); end else if pos^data1^tkn.pmnt^ind = "T" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "5" ); end; end; #ADD 14828v0U PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn^fnd and pos^data1^tkn.pmnt^ind <> blanks for $len( pos^data1^tkn.pmnt^ind ) then begin if pos^data1^tkn.pmnt^ind = "U" then begin movd( sem.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86.tag^data, "C" ); end else if pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" then begin move( sem.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86.tag^data, pos^data1^tkn.pmnt^ind ); end; end; if sem.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86 <> blanks for $len( sem.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86 ) then begin movd( sem.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86. tag, "86" ); movd( sem.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86. lgth, "01" ); lgth := lgth + 5; end; #ADD 17966 SEM^FRMT^RESP^CDE^TO^PSTM "14",! Invalid card number ! "206",! Card not found ! "15",! Card iss. not found ! "070",! No issuer ! #DELETE 17967 /17968 SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 23502 /23513 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 23549 SEM^FRMT^XRQST^TO^SEM^XRVSL call util^frmt^addl^data^to^xrvsl ( sem, rvsl, de48^lgth ); #DELETE 23550 /23578 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 29053e00 UTIL^FRMT^ADDL^DATA^TO^XRESP ?section util^frmt^addl^data^to^xrvsl ?page "util^frmt^addl^data^to^xrvsl" !##################################################################### !# # !# util^frmt^addl^data^to^xrvsl # !# # !# This procedure formats DE 48 subfields during reversal message. # !# # !# INPUT PARAMETERS: # !# de48^lgth - DE 48 length. # !# rvsl - updated external message. # !# sem - original external message. # !# # !# OUTPUT PARAMETERS: # !# rvsl - updated external message. # !# de48^lgth - length of DE 48 # !# # !##################################################################### proc util^frmt^addl^data^to^xrvsl( sem, rvsl, de48^lgth ) extensible; int .de48^lgth; int .rvsl( sem^def ); int .sem( sem^def ); begin int tag^lgth := 0; ! ! Subelement 14-Account Type Indicator ! if sem.addl^data.info.acct^typ^ind^sub^fld^14 = "14" then begin move( rvsl.addl^data.info.acct^typ^ind^sub^fld^14, sem.addl^data.info.acct^typ^ind^sub^fld^14 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. acct^typ^ind^sub^fld^14 ); end; ! ! Subelement 23-Payment Initiation Channel ! if sem.addl^data.info.pmnt^init^chan^sub^fld^23 = "23" then begin move( rvsl.addl^data.info.pmnt^init^chan^sub^fld^23, sem.addl^data.info.pmnt^init^chan^sub^fld^23 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. pmnt^init^chan^sub^fld^23 ); end; ! ! Subelement 32—MasterCard Assigned ID ! if sem.addl^data.info.mc^asgn^id^sub^fld^32 = "32" then begin move( rvsl.addl^data.info.mc^asgn^id^sub^fld^32, sem.addl^data.info.mc^asgn^id^sub^fld^32 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. mc^asgn^id^sub^fld^32 ); end; ! ! Subelement 33-PAN Mapping Information ! if sem.addl^data.info.paypass^mapping^sub^fld^33= "33" then begin move( rvsl.addl^data.info.paypass^mapping^sub^fld^33, sem.addl^data.info.paypass^mapping^sub^fld^33 ); call ascii^integer^ ( sem.addl^data.info. paypass^mapping^sub^fld^33.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; if sem.addl^data.info.ecom^sec^sub^fld^42 = "42" then begin move( rvsl.addl^data.info.ecom^sec^sub^fld^42, sem.addl^data.info.ecom^sec^sub^fld^42 ); call ascii^integer^ ( sem.addl^data.info.ecom^sec^sub^fld^42. lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; ! ! Subelement 43-Universal Card Authentication Field ! if sem.addl^data.info.ucaf^sub^fld^43 = "43" then begin move( rvsl.addl^data.info.ucaf^sub^fld^43, sem.addl^data.info.ucaf^sub^fld^43 ); call ascii^integer^ ( sem.addl^data.info. ucaf^sub^fld^43.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; ! ! Subelement 44-Visa Secure Electronic Commerce ! Transaction Identifier ! if sem.addl^data.info.visa^ecom^xid^sub^fld^44 = "44" then begin move( rvsl.addl^data.info.visa^ecom^xid^sub^fld^44, sem.addl^data.info.visa^ecom^xid^sub^fld^44 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. visa^ecom^xid^sub^fld^44 ); end; ! ! Subelement 77-Payment Transaction Type Indicator ! if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77 = "77" then begin move( rvsl.addl^data.info.pmnt^txn^typ^ind^sub^fld^77, sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); end; ! ! Subelement 78-Visa Payment Service Indicators ! if sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78 = "78" then begin move( rvsl.addl^data.info.visa^pmnt^srvcs^sub^fld^78, sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78 ); call ascii^integer^ ( sem.addl^data.info. visa^pmnt^srvcs^sub^fld^78.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; ! ! Subelement 95-MasterCard Promotion Code ! if sem.addl^data.info.mc^prmtn^cde^sub^fld^95 = "95" then begin move( rvsl.addl^data.info.mc^prmtn^cde^sub^fld^95, sem.addl^data.info.mc^prmtn^cde^sub^fld^95 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. mc^prmtn^cde^sub^fld^95 ); end; ! ! Subelement 96-Visa Market-Specific Data Identifier ! if sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96 = "96" then begin move( rvsl.addl^data.info.visa^mkt^spcfc^data^sub^fld^96, sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. visa^mkt^spcfc^data^sub^fld^96 ); end; end; ! of proc util^frmt^addl^data^to^xrvsl #ENDSCN = SW0M226 !#CMP2.28 10/24/18 BNETLIBS62102FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62102 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62102 * ******************************************************************************** #SCN = SW0M235 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62102 #NEWVERSION = 62103 #ADD Q078500H ! 24OCT2018 venugov ! Symptom: The interface does not formats DE61, subfield 11 ! properly for recurring payment transactions. ! Problem: The interface is formatting DE61, subfield 11 with ! invalid values for recurring payment transactions. ! Fix: Added code to format DE61, subfield 11 as expected ! for recurring payment transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make ! Reference: Case #2812793. #ADD 09645 SUB^LOG^ERROR if not pos^data^tkn^found and ( pos^data1^recur^pmnt or ps51^recur^pmnt ) then #DELETE 09646 SUB^LOG^ERROR #ADD 09673 SUB^LOG^ERROR end; ! of if not pos^data^tkn^found if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then begin #ENDSCN = SW0M235 !#CMP2.28 11/29/18 BNETLIBS62103FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62103 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62103 * ******************************************************************************** #SCN = SW0M252 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62103 #NEWVERSION = 62104 #ADD R078500D ! 29NOV2018 gruberg ! Symptom: Interface does not correctly expand DE-48.SE-66. ! Problem: If a bad tag is encountered, the subfield is set to ! spaces. However, if DE-48 is returned in the 0110 ! response, the length is incorrectly adjusted and the ! message is sent corrupted. ! Fix: The interface was modified to subtract SE-66 tag and ! data length from DE-48 total length. The fix was also ! applied to TLV-encoded DE-48 subelements SE-21, SE-33, ! SE-48, SE-55, SE-67 and SE-75. ! Proc modified: util^expand^sem ! Dependency: Apply fix to BNETLIBS. Run Make. ! Reference: Case #2830635 #ADD P279170V TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ADD 28022&0y TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ADD 28022`0o TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ADD N280640o TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ADD 28064k0Q TRACE^SEM loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - ! Sanction Screening Score ! if sub^ptr = "01" then begin sub^move^subfield( sem^ptr.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.tag ); end ! subfield 01 ! else ! ! bad data, clear sem de-48.se-67 ! end loop ! begin init( sem^ptr.addl^data.info. moneysend^info^sub^fld^67, " ", $len( sem^ptr.addl^data.info. moneysend^info^sub^fld^67 ) ); loop^lgth := tag^length; bad^lgth := bad^lgth + tag^length + 4; end; end; #DELETE 28064k0R/28064k0h TRACE^SEM #ADD 28137&18 TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ADD 28438&1U TRACE^SEM bad^lgth := bad^lgth + tag^length + 4; #ENDSCN = SW0M252 !#CMP2.28 12/18/18 BNETDDLS6065 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6065 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETDDLS BNETDDLS 6065 * ******************************************************************************** #SCN = SW0M271 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00262|0K * 18DEC2018 velsamv * Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements * ( Argentina Domestic Processing ) * Problem: None * Fix: Modified the interface in support of the following: * - Argentina Purchases in Installments * - Argentina Recurring Payments * - Argentina Online Merchant Real-time Refunds/Reversals * For DE 112, added a new redefinition to support * installment payment for Argentina(SE 001). * Region * For DE 124, replaced the TOKEN-MAINT-RQST redefinition * and the TOKEN-MAINT-RESP redefinition (no longer * supported by Mastercard) with a new redefinition * RECUR-PMNT to support recurring payments for Argentina * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009009 #ADD 01411$0P SEM 04 ar redefines info. 06 sub-fld-01. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-plan-typ pic x(2). 10 num-instl pic x(2). 06 user-fld-aci pic x(769). #ADD 01411w1I SEM * Format for recurring payment data for Argentina. * 04 recur-pmnt redefines info. 06 billing-prd pic x(5). 06 ref-num pic x(12). 06 filler pic x(282). #DELETE 01411w1J/01411w1X SEM #ENDSCN = SW0M271 !#CMP2.28 12/18/18 BNETG 60110FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETG BNETG 60110 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETG BNETG 60110 * ******************************************************************************** #SCN = SW0M272 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y000260Z ! 18DEC2018 velsamv ! Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements ! ( Argentina Domestic Processing ) ! Problem: None ! Fix: Modified the interface in support of the following: ! - Argentina Purchases in Installments ! - Argentina Recurring Payments ! - Argentina Online Merchant Real-time Refunds/Reversals ! Added define sem^argcta^instl^txn^d to identify ! installment transaction from Argentina ! Added logic to source in ichg^pgm^tkn from BADDLTAL ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009009 #ADD 00026N3F ?nolist, source =basrc_baddltal( ? ichg^pgm^tkn ? ) ?list ! ichg^pgm^tkn ! ) #ADD 00233)05 define sem^argcta^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "ARGCTA" ) )#; #ENDSCN = SW0M272 !#CMP2.28 12/18/18 BNETLIBS62104FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62104 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62104 * ******************************************************************************** #SCN = SW0M273 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62104 #NEWVERSION = 62105 #ADD S078500E ! 18DEC2018 velsamv/jayaprm ! Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements ! ( Argentina Domestic Processing ) ! Case 2836472 - MC New Data Integrity Edit 21- COF ! Indicator for Recurring Payments ! Problem: None ! Fix: Modified the interface in support of the following: ! - Argentina Purchases in Installments ! - Argentina Recurring Payments ! - Argentina Online Merchant Real-time Refunds/Reversals ! - Case 2836472 - The first series of the Recurring ! Payments will no longer be identifed as a ! Recurring Payment and also in subsequent recurring ! payments request, BNET will set DE 61.10 with ! value "0". ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! pstm^frmt^natl^data^to^sem ! sem^frmt^instl^pmnt^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^expand^sem ! util^collapse^sem ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009009 ! Case #2836472 #ADD R0967301 SUB^LOG^ERROR if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and pos^data1^recur^pmnt = true and pos^data1^tkn.pmnt^info = "0" then begin ! ! First transaction in recurring payment series must ! not contain DE 61.4 = 4, so set different value ! if pstm.pt^srv^cond^cde = "15" or sem.pos^entry^mde = "81" then begin ! ! Electronic order, home PC. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "5" ); end else if pos^mail^phone^d( pstm ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); end else if pstm.pt^srv^cond^cde = "01" then begin ! ! Cardholder not present, unspecified. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "1" ); end else if pstm.pt^srv^cond^cde = "07" then begin ! ! Cardholder not present, telephone/ARU order. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "3" ); end else if pstm.pt^srv^cond^cde = "08" then begin ! ! Cardholder not present, mail/facsimile order. ! movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "2" ); end else begin movd( sem.ntl^pos^data.cond^cde.byte[ 3 ], "0" ); end; end; #REPLACE 09674 SUB^LOG^ERROR movd( sem.ntl^pos^data.cond^cde.byte[ 9 ], "0" ); #ADD 09749 SUB^LOG^ERROR if sem.typ = sem^auth^request^d then begin if found^pos^data1^tkn and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then begin movd( sem.pos^entry^mde, credential^on^file^entry^d ); end; end; #REPLACE 09751 /09751 OFFSET 0 SUB^LOG^ERROR if util^stf^get( stf ) and sem.pos^entry^mde <> credential^on^file^entry^d then #ADD 09812 SUB^LOG^ERROR if sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "4" then #DELETE K1013801/H101380A SUB^LOG^ERROR #ADD 10194#01 SUB^LOG^ERROR ( sem.ntl^pos^data.cntry^cde = "032" and found^pos^data1^tkn and pos^data1^tkn.pmnt^ind = "I" ) or #ADD H102070F SUB^LOG^ERROR end else if base24^rel^g >= 5 and sem.typ = sem^auth^request^d and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and sem.ntl^pos^data.cntry^cde = "032" then begin ! ! ! Format transaction for Argentina recurring payment ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin mbr^def^bit^d := 1; end; #ADD 10446a01 PSTM^FRMT^0210^TO^XRESP not sem^argcta^instl^txn^d( sem ) and #ADD 10446*09 PSTM^FRMT^0210^TO^XRESP ! messages except Installment Payments for Greece, Argentina #DELETE 10446*0A PSTM^FRMT^0210^TO^XRESP #ADD 11549*0L PSTM^FRMT^0420^TO^ACQ^XRVSL if pos^data1^tkn^found and pos^data1^tkn.pmnt^ind = "I" and sem.ntl^pos^data.cntry^cde = "032" then begin adnl^data^ntl^bit^d := 0; end else #ADD 12803 PSTM^FRMT^INSTL^PMNT^TO^SEM int found^ichg^pgm^tkn := false; #ADD 12805X01 PSTM^FRMT^INSTL^PMNT^TO^SEM int .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 12814X00 PSTM^FRMT^INSTL^PMNT^TO^SEM if sem.ntl^pos^data.cntry^cde = "032" then begin tkn^id ':=' ichg^pgm^tkn^id^d; found^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^tkn, lgth ); if found^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "04" then begin found^instl^data := true; end else begin return false; end; ! ! DE 112, SE 001 is populated ! move( sem.adnl^data^natl.ar.sub^fld^01.tag^data.instl^plan^typ, ichg^pgm^tkn.mc^cuotas^pmnt^data.instl^plan^typ ); move( sem.adnl^data^natl.ar.sub^fld^01.tag^data.num^instl, ichg^pgm^tkn.mc^cuotas^pmnt^data.num^instl ); movd( sem.adnl^data^natl.ar.sub^fld^01.tag, "001" ); movd( sem.adnl^data^natl.ar.sub^fld^01.lgth, "004" ); movd( sem.adnl^data^natl.lgth, "010" ); ! ! DE 48, SE 95 is populated. ! movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag^data, "ARGCTA" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); return found^instl^data; end; #ADD 1295580g PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "032" and intra^cntry^data^tkn.frmt^cde = "09" then begin found^natl^data := true; ! ! Format DE 124 ! move( sem.mbr^def.recur^pmnt.billing^prd, intra^cntry^data^tkn.ar^bnet.billing^prd ); move( sem.mbr^def.recur^pmnt.ref^num, intra^cntry^data^tkn.ar^bnet.recur^pmnt^ref^num ); movd( sem.mbr^def.lgth, "017" ); end; #ADD 17092X0g SEM^FRMT^INSTL^PMNT^TO^PSTM struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 17092*4p SEM^FRMT^INSTL^PMNT^TO^PSTM else if sem^argcta^instl^txn^d( sem ) then begin movd( pos^data1^tkn.pmnt^ind, "I" ); movd( tkn^id, ichg^pgm^tkn^id^d ); ! ! Add Interchange Program Token ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, ichg^pgm^tkn ); movd( ichg^pgm^tkn.frmt^cde, "04" ); move( ichg^pgm^tkn.mc^cuotas^pmnt^data.instl^plan^typ, sem.adnl^data^natl.ar.sub^fld^01.tag^data. instl^plan^typ ); move( ichg^pgm^tkn.mc^cuotas^pmnt^data.num^instl, sem.adnl^data^natl.ar.sub^fld^01.tag^data.num^instl ); tkn^add^lgth := $offset( ichg^pgm^tkn.mc^cuotas^pmnt^data. user^fld^aci ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3165, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3173, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3173 ); end; ! error on tkn add other than no room end;! of if tkn^result on token add return true; end #ADD 21468X0K SEM^FRMT^XRQST^TO^PSTM^0200 if sem^argcta^instl^txn^d( sem ) then begin ! ! Installment Payment for Argentina ! ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.ar.sub^fld^01.tag = "001" and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem.tran^crncy^cde = sem.iss^crncy^cde for $len( sem.iss^crncy^cde ) then begin call sem^frmt^instl^pmnt^to^pstm( pstm, sem, pos^data1^tkn ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end; end else #ADD H2152008 SEM^FRMT^XRQST^TO^PSTM^0200 else if sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) and sem.ntl^pos^data.cntry^cde = "032" and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and mbr^def^bit^d then begin tkn^add^lgth := 0; tkn^id ':=' intra^cntry^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, intra^cntry^data^tkn ); movd( intra^cntry^data^tkn.frmt^cde, "09" ); move( intra^cntry^data^tkn.ar^bnet.billing^prd, sem.mbr^def.recur^pmnt.billing^prd ); move( intra^cntry^data^tkn.ar^bnet.recur^pmnt^ref^num, sem.mbr^def.recur^pmnt.ref^num ); tkn^add^lgth := $offset( intra^cntry^data^tkn. ar^bnet.user^fld^ar^bnet ); if tkn^add^lgth > 0 then begin if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1798, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1799, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1799 ); end; end; ! of if tkn^result end; !tkn^add^lgth > 0 end #ADD 23355a01 SEM^FRMT^XRQST^TO^SEM^XRESP not sem^argcta^instl^txn^d( sem ) and #ADD 23453 SEM^FRMT^XRQST^TO^SEM^XRVSL mbr^def^bit^d := 0; !de 124! #ADD 23454 SEM^FRMT^XRQST^TO^SEM^XRVSL if sem^mc^instl^txn^d( sem ) or sem^argcta^instl^txn^d( sem ) then begin adnl^data^ntl^bit^d := 0; end; #ADD 26914 TRACE^SEM if hdr.adnl^data^natl.ar. sub^fld^01.tag = "001" then begin call ascii^integer( hdr.adnl^data^natl.ar. sub^fld^01.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.ar.sub^fld^01.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "001" ! else #ADD 28655 TRACE^SEM if ptr[ length ] = "001" then begin movl( sem^ptr.adnl^data^natl.ar. sub^fld^01.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ENDSCN = SW0M273 !#CMP2.28 12/18/18 BNETS 6141 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETS BNETS 6141 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETS BNETS 6141 * ******************************************************************************** #SCN = SW0M276 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6141 #NEWVERSION = 6142 #ADD 03821o0E ! 18DEC2018 velsamv ! Symptom: Banknet Release 18.Q4 Phase 2 Functional Enhancements ! ( Argentina Domestic Processing ) ! Problem: None ! Fix: Modified the interface in support of the following: ! - Argentina Purchases in Installments ! - Argentina Recurring Payments ! - Argentina Online Merchant Real-time Refunds/Reversals ! Procs modified: pstm^0200^request ! pstm^0220^force^post ! pstm^0420^reversal ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009009 #ADD 15438 SUB^APPRV^BLIND pstm.term^cntry^cde <> "AR" and #ADD 15496 SUB^APPRV^BLIND if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) or ( pos^return^adjust^d( pstm ) and pstm.term^cntry^cde = "AR" ) then #DELETE 15497 SUB^APPRV^BLIND #ADD 16246 PSTM^0220^FORCE^POST if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) or ( pos^return^adjust^d( pstm ) and pstm.term^cntry^cde = "AR" ) then #DELETE 16247 PSTM^0220^FORCE^POST #ADD 16736 PSTM^0420^REVERSAL if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) or ( pos^return^adjust^d( pstm ) and pstm.term^cntry^cde = "AR" ) then #DELETE 16737 PSTM^0420^REVERSAL #ADD 16790 PSTM^0420^REVERSAL if ( pos^return^d( pstm ) and pstm.term^cntry^cde <> "AR" and not pos^pmnt^d( pstm ) ) or #DELETE 16791 PSTM^0420^REVERSAL #ENDSCN = SW0M276 !#CMP2.28 01/08/19 BNETLIBS62105FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62105 * * NEW FILE: \K9.$CHKOUT.SW6DBNET.BNETLIBS BNETLIBS 62105 * ******************************************************************************** #SCN = SW0N001 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62105 #NEWVERSION = 62106 #ADD T078500Y ! 08JAN2019 wielerk ! Symptom: Interface does not correctly format de-28( tran fee ) ! for external reversals. ! Problem: Mastercard now wants the fee in a reversal to be the ! same as the request. ! Fix: Modified code to remove fee formatting for external ! reversals. ILF record will provide fee data. ! Procs modified: pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^fee^to^sem^fee ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS. ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #2827898. #DELETE 11902 PSTM^FRMT^0420^TO^ACQ^XRVSL #REPLACE 12718 PSTM^FRMT^FEE^TO^SEM^FEE end;! of request or completion ! #DELETE 12719 /12771 PSTM^FRMT^FEE^TO^SEM^FEE #ENDSCN = SW0N001 !#CMP2.28 02/08/19 BNETDDLS6066 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6066 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6066 * ******************************************************************************** #SCN = SW0N013 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00262@0M * 08FEB2019 jayaprm * Symptom: Banknet Release 19.Q2 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * - AN 2120 - U.S. Commercial Interchange Structure * Changes * - AN 2134 - Issuer-Provided Format Error Responses * - AN 1630 - AAV Verification Service Enhancements * - AN 2259 - Revised Standards-Merchant Category Code * 9754 * - R19.Q1 AN 2102-Account Status Inquiry Transit for * Netherlands: * For DE 112, Added a new redefinition to support * the data sent in an account status inquiry * response message to a transit merchant * in the Netherlands (SE 037) * - R19.Q1 AN 2103-IIAS Real-time Substantiation for * Vision Enhancement for the U.S. Region * - Case #02826785: Issuer Currency Code in BNET's * Global Installment Payment Support * - Case #02833345: New DATA-IND-FLG Value in FB Token * - Case #02750375: Why is maximum 4 ILFs checked in BNET * when searching for a match for a BASE24 acquired * CNP reversal * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Run Make. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009038 #ADD 01411=0B SEM 04 nl redefines info. 06 sub-fld-37. 08 tag pic x(3). 08 lgth pic x(3). 08 pri-crdhldr-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(34). 08 scnd-crdhldr-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(34). 06 user-fld-aci pic x(697). #ENDSCN = SW0N013 !#CMP2.28 02/08/19 BNETG 60111FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60111 * ******************************************************************************** #SCN = SW0N014 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z000260I ! 08FEB2019 jayaprm ! Symptom: Banknet Release 19.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2120 - U.S. Commercial Interchange Structure ! Changes ! - AN 2134 - Issuer-Provided Format Error Responses ! - AN 1630 - AAV Verification Service Enhancements ! - AN 2259 - Revised Standards-Merchant Category Code ! 9754 ! - R19.Q1 AN 2102-Account Status Inquiry Transit for ! Netherlands ! - R19.Q1 AN 2103-IIAS Real-time Substantiation for ! Vision Enhancement for the U.S. Region ! - Case #02826785: Issuer Currency Code in BNET's ! Global Installment Payment Support ! - Case #02833345: New DATA-IND-FLG Value in FB Token ! - Case #02750375: Why is maximum 4 ILFs checked in BNET ! when searching for a match for a BASE24 acquired ! CNP reversal ! Added new define bnet^amt^vision^rx^d for amount type 12 ! Increased the length of data^elem^err^g to 6 bytes ! Sourced in genrc^ichg^resp^data^tkn from BADDLTAL ! Sourced in clearbit from UTILEXTS ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009038 #ADD 00026N3F ?nolist, source =basrc_baddltal( ? genrc^ichg^resp^data^tkn ? ichg^pgm^tkn ? ) ?list ! genrc^ichg^resp^data^tkn ! ichg^pgm^tkn ! ) #DELETE Z000260J/Z000260Q #ADD 00078u02 define bnet^amt^vision^rx^d = "12"#; #ADD 00501T00 string .data^elem^err^g[ 0:5 ] := [ $occurs( data^elem^err^g ) * #DELETE 00501T01 #ADD 01366M09 ? clearbit, #ADD 01366L3I ! clearbit, #ENDSCN = SW0N014 !#CMP2.28 02/08/19 BNETLIBS62106FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62106 * ******************************************************************************** #SCN = SW0N015 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62106 #NEWVERSION = 62107 #ADD U078500F ! 08FEB2019 jayaprm ! Symptom: Banknet Release 19.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2120 - U.S. Commercial Interchange Structure ! Changes ! - AN 2134 - Issuer-Provided Format Error Responses ! - AN 1630 - AAV Verification Service Enhancements ! - AN 2259 - Revised Standards-Merchant Category Code ! 9754 ! - R19.Q1 AN 2102-Account Status Inquiry Transit for ! Netherlands ! - R19.Q1 AN 2103-IIAS Real-time Substantiation for ! Vision Enhancement for the U.S. Region ! - Case #02826785: Issuer Currency Code in BNET's ! Global Installment Payment Support ! - Case #02833345: New DATA-IND-FLG Value in FB Token ! - Case #02750375: Why is maximum 4 ILFs checked in BNET ! when searching for a match for a BASE24 acquired ! CNP reversal ! Procs Added: pstm^frmt^resp^data^to^sem ! sem^frmt^resp^data^to^pstm ! Procs Modified: pstm^check^ilfs^to^match ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^check^ilfs^to^match ! sem^frmt^amt^to^pstm^amt ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^expand^sem ! util^collapse^sem ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009038 #ADD 08680=12 PSTM^CHECK^ILFS^TO^MATCH if bnet^g.enhncd^ilf^match^acq^g and num^of^ilfs < 4 then #DELETE 08680=13 PSTM^CHECK^ILFS^TO^MATCH #ADD 10020s01 SUB^LOG^ERROR sem.merch^typ = "7802" ) and #DELETE 10020s02/10021 SUB^LOG^ERROR #ADD 11136 PSTM^FRMT^0210^TO^XRESP if base24^rel^g >= 5 and sem^acct^stat^inq^d( sem ) and sem^transit^aggr^d( sem ) and sem.addl^data.info.transit^pgm^sub^fld^64.tag = "64" and sem.addl^data.info.transit^pgm^sub^fld^64.tag^data. txn^typ^ind = "06" then begin ! ! ! Include response data for Netherlands transit merchant ! ! ! if pstm^frmt^resp^data^to^sem( sem, pstm ) then begin adnl^data^ntl^bit^d := 1; end; end; #ADD 12209 PSTM^FRMT^AMT^TO^SEM^AMT if base24^rel^g >= 5 then #DELETE 12210 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 12226 PSTM^FRMT^AMT^TO^SEM^AMT hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4V" or #ADD 12253 PSTM^FRMT^AMT^TO^SEM^AMT if hlthcr^get^tkn.adnl^amt[ i ].amt^typ = "4V" then begin movd( sem.addl^amt.info[ amt^num ]. amt^typ, bnet^amt^vision^rx^d ); end; #ADD 13314 PSTM^FRMT^RESP^CDE^TO^SEM ?section pstm^frmt^resp^data^to^sem ?page "pstm^frmt^resp^data^to^sem" !##################################################################### !# # !# pstm^frmt^resp^data^to^sem # !# # !# This proc formats the SEM with data from the Generic Interchange # !# Response Data token ("SU") # !# # !# INPUT PARAMETERS: # !# SEM - Pointer to Banknet external message # !# PSTM - Pointer to BASE24 internal POS message # !# # !# OUTPUT PARAMETERS: # !# SEM - Pointer to Banknet external message # !# # !# RETURN: # !# True - when Generic Interchange Response Data is found # !# False - when Generic Interchange Response Data is not found # !# # !##################################################################### int proc pstm^frmt^resp^data^to^sem( sem, pstm ); int .sem( sem^def ); int .pstm( pstm^def ); begin int done := false; int found^resp^data := false; int .genrc^ichg^resp^data^tkn(genrc^ichg^resp^data^tkn^def); int idx := 0; int lgth := 0; int tag^data^lgth := 0; int tkn^lgth := 0; string tkn^id[ 0:1 ]; tkn^id ':=' genrc^ichg^resp^data^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @genrc^ichg^resp^data^tkn, tkn^lgth ) then begin return false; end; if genrc^ichg^resp^data^tkn.frmt^cde = "01" and genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.cntry^cde = "528" then begin if genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.pri^crdhldr^id <> [ $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl. pri^crdhldr^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.tag, "01" ); idx := $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl. pri^crdhldr^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.pri^crdhldr^id.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.tag^data, genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.pri^crdhldr^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.nl.sub^fld^37.pri^crdhldr^id.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of pri^crdhldr^id tag "01" if genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id <> [ $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.tag, "02" ); idx := $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.tag^data, genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.nl.sub^fld^37.scnd^crdhldr^id.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of scnd^crdhldr^id tag "02" if lgth > 0 then begin ! ! Tag data was formatted so set the tag and length ! fields for DE 112 tag 37 ! found^resp^data := true; movd( sem.adnl^data^natl.nl.sub^fld^37.tag, "037" ); call integer^ascii^( sem.adnl^data^natl.nl.sub^fld^37.lgth, lgth ); ! ! Increment the length to account for the 037 tag and ! subfield length to set the overall field length. ! lgth := lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; ! of cntry^cde = "528" and frmt^cde = "01" return found^resp^data; end; ! of pstm^frmt^natl^data^to^sem #ADD 13440s00 PSTM^FRMT^SEM^ADDL^DATA "8241" , "9406" , "R" ]; #DELETE 13440s01/13455 PSTM^FRMT^SEM^ADDL^DATA #ADD Q1449105 PSTM^FRMT^SEM^ADDL^DATA ext^authn^data^tkn^lgth ) and ( ext^authn^data^tkn.data^ind^flg = "02" or ext^authn^data^tkn.data^ind^flg = "10" ) then #DELETE Q1449106 PSTM^FRMT^SEM^ADDL^DATA #ADD 15424=0z SEM^CHECK^ILFS^TO^MATCH if enhncd^ilf^match and num^of^ilfs < 4 then #DELETE 15424=10 SEM^CHECK^ILFS^TO^MATCH #ADD 15713 SEM^FRMT^AMT^TO^PSTM^AMT sem.addl^amt.info[ i ].amt^typ = bnet^amt^vision^rx^d or #ADD 15791 SEM^FRMT^AMT^TO^PSTM^AMT if sem.addl^amt.info[ i ].amt^typ = bnet^amt^vision^rx^d then begin movd( hlthcr^tkn.adnl^amt[ hlthcr^tkn.num^adnl^amt ].amt^typ, "4V" ); end; ! of if sem.addl^amt.info[ i ].amt^typ ! #ADD 17092*17 SEM^FRMT^INSTL^PMNT^TO^PSTM move( instl^resp^data^tkn.mc^instl^resp^data. iss^crncy^cde, sem.iss^crncy^cde ); #ADD 18030 SEM^FRMT^RESP^CDE^TO^PSTM ?section sem^frmt^resp^data^to^pstm ?page "sem^frmt^resp^data^to^pstm" !##################################################################### !# # !# sem^frmt^resp^data^to^pstm # !# # !# This proc formats Generic Interchange Response Data token. # !# National Additional Data from SEM DE 112 is mapped to the # !# Generic Interchange Response Data token ("SU") as required. # !# # !# INPUT PARAMETERS: # !# PSTM - Pointer to BASE24 internal POS message # !# SEM - Pointer to Banknet external message # !# # !# OUTPUT PARAMETERS: # !# PSTM - Pointer to BASE24 internal POS message # !# # !# RETURN: # !# TRUE - Always returns true # !# # !##################################################################### int proc sem^frmt^resp^data^to^pstm( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin wlform( no^room, "NO ROOM TO ADD TOKEN: \\, PAN : \?, " ','" SEQ NUM : \\\\\\, REF NUM: \\\\\\\\\\\\, " ','" SETL DATE: \\\\ " ) wlform( erradd^tkn, "UNABLE TO ADD TOKEN: \\, PAN : \?," ','" SEQ NUM : \\\\\\, REF NUM: \\\\\\\\\\\\, " ','" SETL DATE: \\\\ ERR: # " ) wlform( errupdt^tkn, "UNABLE TO UPDATE TOKEN: \\, PAN : \?, " ','" SEQ NUM : \\\\\\, REF NUM: \\\\\\\\\\\\, " ','" SETL DATE: \\\\ ERR: # " ) struct .genrc^ichg^resp^data^tkn(genrc^ichg^resp^data^tkn^def); int evt^pan^lgth := 0; int fnd^genrc^ichg^resp^data^tkn := false; int ofst; int pos^userdata; int tkn^add^lgth := 0; int tkn^lgth; int tkn^result; string .pan[ 0:18 ] := [ 19 * [" "] ]; string tkn^id[ 0:1 ]; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem.pan.lgth, evt^pan^lgth ); movl( pan, sem.pan.num, evt^pan^lgth ); tkn^id ':=' genrc^ichg^resp^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, genrc^ichg^resp^data^tkn ); if sem^acct^stat^inq^d( sem ) and sem.ntl^pos^data.cntry^cde = "528" then begin movd( genrc^ichg^resp^data^tkn.frmt^cde, "01" ); tkn^lgth := $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.cntry^cde ) + $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl ); call integer^ascii^( genrc^ichg^resp^data^tkn.lgth, tkn^lgth ); move( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.cntry^cde, sem.ntl^pos^data.cntry^cde ); move( genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.pri^crdhldr^id, sem.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.tag^data ); move( genrc^ichg^resp^data^tkn.bnet^cntry^spcf^resp^data. nl.scnd^crdhldr^id, sem.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.tag^data ); tkn^add^lgth := $offset( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.user^fld^aci ); end; if tkn^add^lgth > 0 then begin if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! ! Add the Generic Interchange Response Data token (ID = "SU") ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! fnd^genrc^ichg^resp^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^resp^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1893, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.ref^num, @sem.setl^dat ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^genrc^ichg^resp^data^tkn then begin call log^message^( 1894, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1894 ); end else begin call log^message^( 1895, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1895 ); end; end; ! of if tkn^result ("SU") end; ! of if tkn^add^lgth > 0 return true; end; ! of sem^frmt^natl^data^to^pstm #ADD 19936*0S SEM^FRMT^XRESP^TO^PSTM^0210 move( instl^resp^data^tkn.mc^instl^resp^data. iss^crncy^cde, sem.iss^crncy^cde ); #ADD 20026*02 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 and adnl^data^ntl^bit^d and sem.adnl^data^natl.nl.sub^fld^37.tag = "037" then begin ! ! ! Netherlands domestic transaction ! ! ! call sem^frmt^resp^data^to^pstm( pstm, sem ); end ! of adnl^data^ntl^bit^d and tag = "037") ! else #ADD 21468*06 SEM^FRMT^XRQST^TO^PSTM^0200 bnet^g.sppt^instl^txn^g = 3 ) then #DELETE 21468*07/21468*09 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N269140Z TRACE^SEM else if hdr.adnl^data^natl.nl. sub^fld^37.tag = "037" then begin call ascii^integer( hdr.adnl^data^natl.nl. sub^fld^37.lgth, 3, t^length ); ! ! Move the tag 037 and tag length field ! movl( ptr, hdr.adnl^data^natl.nl.sub^fld^37.tag, 6 ); @ptr := @ptr + 6; sub^lgth := 6; ! ! Process tag 037 subtag 01 if present ! if hdr.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.tag = "01" then begin call ascii^integer( hdr.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.nl.sub^fld^37. pri^crdhldr^id.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "01" ! ! ! Process tag 037 subtag 02 if present ! if hdr.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.tag = "02" then begin call ascii^integer( hdr.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.nl.sub^fld^37. scnd^crdhldr^id.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "02" ! call translate( ptr[ - sub^lgth ], sub^lgth, ascii^to^ebcdic^l ); if t^length <> ( sub^lgth - 6 ) then begin return( index + 1 ); end; end ! of tag = "037" ! #ADD 27659 UTIL^EXPAND^SEM int(32) field := 0d; #ADD 27662#03 UTIL^EXPAND^SEM int fld^lgth; #ADD 27754 TRACE^SEM end else if field = 0d and data^elem^err^g = [ "055" ] then begin field := 55d; end; #DELETE 27755 TRACE^SEM #ADD 27810 TRACE^SEM begin if field = 0d then begin field := $dbl( index ) + 1d; end else begin return ( index + 1 ); end; end; #DELETE 27811 TRACE^SEM #ADD 27842 TRACE^SEM if not ascii^integer( ptr[ length + 2 ], 2, tag^length ) then begin ! ! ! DE 48 sub-element has invalid data. ! ! ! return ( index + 1 ); end; #DELETE 27843 /27844 TRACE^SEM #ADD P279170P TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. accpt^data^sub^fld^21.tag, field ); field := field + 48000d; end; #ADD 2794450i TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. txn^analysis^sub^fld^27. tag, field ); field := field + 48000d; end; #ADD 28022&0s TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. mobile^pgm^inds^sub^fld^48. tag, field ); field := field + 48000d; end; #ADD 28022`0i TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. mrch^fraud^scoring^sub^fld^55. tag, field ); field := field + 48000d; end; #ADD N280640i TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. authn^data^sub^fld^66. tag, field ); field := field + 48000d; end; #ADD S280640O TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. moneysend^info^sub^fld^67. tag, field ); field := field + 48000d; end; #ADD 28137&12 TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. fraud^scoring^data^sub^fld^75. tag, field ); field := field + 48000d; end; #ADD 28438&1O TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. paypass^mapping^sub^fld^33. tag, field ); field := field + 48000d; end; #ADD 28515&0h TRACE^SEM if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. adnl^mrch^data^sub^fld^37. tag, field ); field := field + 48000d; end; #ADD 28600 TRACE^SEM return ( index + 1 ); #DELETE 28601 TRACE^SEM #ADD 28620#0V TRACE^SEM if not ascii^integer( ptr[ subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, sub^lgth ) then begin ! ! ! DE 108 sub-element has invalid data. ! ! ! return ( index + 1 ); end; #DELETE 28620#0W/28620#0Z TRACE^SEM #ADD 28652 TRACE^SEM if not ascii^integer( ptr[ length + 3 ], 3, tag^length ) then begin ! ! ! DE 112 sub-element has invalid data. ! ! ! return ( index + 1 ); end; #DELETE 28653 /28654 TRACE^SEM #ADD H286740y TRACE^SEM if ptr[ length ] <> " " then #ADD H2867413 TRACE^SEM end else begin return ( index + 1 ); #ADD 28674*0m TRACE^SEM if ptr[ length ] = "037" then begin ! ! Move in the tag and length fields ! movl( sem^ptr.adnl^data^natl.nl. sub^fld^37.tag, ptr[ length ], 6 ); length := length + 6; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 2], 2, sub^lgth ); if ptr[ length ] = "01" then begin movl( sem^ptr.adnl^data^natl.nl. sub^fld^37. pri^crdhldr^id.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "02" then begin movl( sem^ptr.adnl^data^natl.nl. sub^fld^37. scnd^crdhldr^id.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] <> " " then begin ! ! Unrecognized tag ! length := length + sub^lgth + 4; end else begin return ( index + 1 ); end; end; ! of while end ! of tag "037" else #ADD 28689 TRACE^SEM return ( index + 1 ); #DELETE 28690 TRACE^SEM #ADD 28725 TRACE^SEM fld^lgth := length; if length > sem^bit^map^length( index ) then begin length := sem^bit^map^length( index ); end; #ADD 28756k02 TRACE^SEM length := fld^lgth; #ADD 28762 TRACE^SEM if field > 128d then begin call double^ascii( data^elem^err^g, 6, field ); end else if field > 0d then begin call double^ascii( data^elem^err^g, 3, field ); end; #ENDSCN = SW0N015 !#CMP2.28 02/08/19 BNETS 6142 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6142 * ******************************************************************************** #SCN = SW0N018 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6142 #NEWVERSION = 6143 #ADD 03821p0I ! 08FEB2019 jayaprm ! Symptom: Banknet Release 19.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2120 - U.S. Commercial Interchange Structure ! Changes ! - AN 2134 - Issuer-Provided Format Error Responses ! - AN 1630 - AAV Verification Service Enhancements ! - AN 2259 - Revised Standards-Merchant Category Code ! 9754 ! - R19.Q1 AN 2102-Account Status Inquiry Transit for ! Netherlands ! - R19.Q1 AN 2103-IIAS Real-time Substantiation for ! Vision Enhancement for the U.S. Region ! - Case #02826785: Issuer Currency Code in BNET's ! Global Installment Payment Support ! - Case #02833345: New DATA-IND-FLG Value in FB Token ! - Case #02750375: Why is maximum 4 ILFs checked in BNET ! when searching for a match for a BASE24 acquired ! CNP reversal ! Procs Modified: sem^request^deny ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009038 #ADD 21289 SEM^REQUEST^DENY int bit^map[ 0:7 ], extlgth, index := 0, #DELETE 21290 SEM^REQUEST^DENY #ADD 21429 ELIM^DE54^CASH^BACK^AMT if data^elem^err^g[ 3 ] <> " " then begin movd( resp.addl^resp^data.lgth, "06" ); end; #ADD 21437 ELIM^DE54^CASH^BACK^AMT movl ( bit^map, resp.pbit^map, $len( resp.pbit^map ) + $len( resp.sbit^map ) ); call ascii^integer( data^elem^err^g, 3, index ); call clearbit( bit^map, index - 1 ); movl ( resp.pbit^map, bit^map, $occurs( bit^map ) ); #ENDSCN = SW0N018 !#CMP2.28 02/13/19 BNETLIBS62107FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62107 * ******************************************************************************** #SCN = SW0N034 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62107 #NEWVERSION = 62108 #ADD V078500i ! 13FEB2019 jayaprm ! Symptom: DSRP MasterCard transactions are declined ! Problem: For DSRP transactions, POS Router/Auth SIV extension ! module declines the transactions while trying to ! perform ARQC cryptogram verify. ! Fix: Modified the Banknet interface to ensure that the POS ! Router/Auth SIV extension module identifies that the ! ARQC cryptogram has already been verified for DSRP ! transactions. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #2858672. #ADD 22427 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "51" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "61" ) and sem.pos^entry^mde = remote^ecomm^d then begin case sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 of begin "G", "P", "V" -> begin ! ! Passed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "2" ); end; otherwise -> begin movd( ps51^tkn^data.cavv^aav^rslt^cde, "1" ); end; end; end else if ( sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "51" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "61" ) and sem.pos^entry^mde = elec^commerce then begin case sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 of begin "G", "V" -> begin ! ! Passed validation. ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "2" ); end; otherwise -> begin movd( ps51^tkn^data.cavv^aav^rslt^cde, "1" ); end; end; end else #ENDSCN = SW0N034 !#CMP2.28 03/27/19 BNETLIBS62108FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62108 * ******************************************************************************** #SCN = SW0N063 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62108 #NEWVERSION = 62109 #ADD W078500E ! 28MAR2019 wielerk ! Symptom: Interface does not support M/Chip requirement for ! contactless transactions. ! Problem: MasterCard wants DE-2 ( PAN ) to match tag 5A if ! present. The interface always provides DE-2 from ! PSTM.TRAN.TRACK2. ! Fix: Modified code to recognize tag 5A in Chip Data token ! and format DE-2 from the contents. ! Proc Modified: util^frmt^chip^data^to^xrqst ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS ! Run Make. ! Reference: Case #2869771. #ADD 29053e0Z UTIL^FRMT^CHIP^DATA^TO^XRQST int pan^lgth := 0; #ADD 29053e0a UTIL^FRMT^CHIP^DATA^TO^XRQST int ptr^idx := 0; int tag^data^lgth := 0; #REPLACE 29053e0d UTIL^FRMT^CHIP^DATA^TO^XRQST string .pan[ 0:27 ] := [ 28 * [" "] ]; #ADD 29053e1X UTIL^FRMT^CHIP^DATA^TO^XRQST if ptr[ length ] = tag^appl^pan^d then begin ! ! Application PAN - tag = 5A ! ptr^idx := length + tag^lgth; tag^data^lgth := 0; tag^data^lgth.<0:7> := 0; tag^data^lgth.<8:15> := ptr[ ptr^idx ].<8:15>; tag^data^lgth := ( tag^data^lgth * 2 ); ptr^idx := ptr^idx + de55^lgth^l; call binary^hexchar( pan, tag^data^lgth, ptr[ ptr^idx ] ); pan^lgth := -1; while ( pan^lgth < $occurs( pan ) and pan[ pan^lgth := pan^lgth + 1 ] <> "F" ) do; init( sem.pan, " ", $len( sem.pan ) ); sem.pan.num ':=' pan for pan^lgth; call integer^ascii^( sem.pan.lgth, pan^lgth ); end; ! of Application PAN - tag = 5A #ENDSCN = SW0N063 !#CMP2.28 03/27/19 BNETG 60112FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60112 * ******************************************************************************** #SCN = SW0N064 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a000260Z ! 28MAR2019 wielerk ! Symptom: Interface does not support M/Chip requirement for ! contactless transactions. ! Problem: MasterCard wants DE-2 ( PAN ) to match tag 5A if ! present. The interface always provides DE-2 from ! PSTM.TRAN.TRACK2. ! Fix: Added define tag^appl^pan^d for tag 5A. ! and format DE-2 from the contents. ! Proc Modified: util^frmt^chip^data^to^xrqst ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS ! Run Make. ! Reference: Case #2869771. #ADD 01366O28 tag^appl^pan^d = [ %h5A ]#, #ENDSCN = SW0N064 !#CMP2.28 04/15/19 BNETLIBS62109FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62109 * ******************************************************************************** #SCN = SW0N071 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62109 #NEWVERSION = 62110 #ADD X078500E ! 15APR2019 wielerk ! Symptom: Interface forwards unmatched external reversal. ! Problem: Original unmatched logic is working, however logic ! added to forward a reversal within an LCONF param ! value allows forwarding when the param is 0. ! Fix: Modified code to recognize the value of 0 in the global ! bnet^g.max^days^for^old^rvsl^g means do not forward. ! Proc Modified: sem^check^unmatchd^xrvsl^pos ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2887066. #ADD 15424M0i SEM^CHECK^UNMATCHD^XRVSL^POS if bnet^g.max^days^for^old^rvsl^g = 0 then begin ! ! Do not forward unmatched reversals of any age ! return false; end; #DELETE 15424e01 SEM^CHECK^UNMATCHD^XRVSL^POS #REPLACE 15424e02 SEM^CHECK^UNMATCHD^XRVSL^POS if num^of^days > bnet^g.max^days^for^old^rvsl^g then #ENDSCN = SW0N071 !#CMP2.28 04/17/19 BNETS 6143 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6143 * ******************************************************************************** #SCN = SW0N073 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6143 #NEWVERSION = 6144 #ADD 03821q0W ! 17APR2019 jayaprm ! Symptom: Issue with Mastercard Mandate 19.Q2 ! Problem: The authorization response message (0110) is dropped by ! BNET process for the transaction where DE48 SE37 ! in 0110 message is invalid. ! Fix: Added check to the code to ensure that format errors in ! response messages are ignored. ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Run Make. ! Reference: Case #2889605 #ADD 17177 SEM^^INPUT^FROM^STATION if sem.typ.byte[ 2 ] = "1" or sem.typ.byte[ 2 ] = "3" then begin ! ! Ignore format errors in response messages ! data^elem^err^g ':=' [ $occurs( data^elem^err^g ) * [" "] ]; end; #ENDSCN = SW0N073 !#CMP2.28 04/26/19 BNETLIBS62110FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62110 * ******************************************************************************** #SCN = SW0N083 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62110 #NEWVERSION = 62111 #ADD Y078500D ! 26APR2019 velsamv ! Symptom: Banknet 19.Q2 Mandates Phase2 ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2113-Enhancements to AAV Validation for EMV ! 3-D Secure ! - AN 2479-Electronic Commerce Security Level Indicators ! for the Mastercard Identity Check Program ! Procs Modified: pstm^frmt^sem^addl^data ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60BNET: BNETLIBS ! Replace files: ! SW60BNET: BNETUPDT ! Reference: WO #009078. #ADD 14376 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [" "] ] then begin move( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); end else begin movd( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec.ucaf^ind, "0" ); ! UCAF collection not supported ! end; #DELETE 14398 /14413 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14413k00/14413k0A PSTM^FRMT^SEM^ADDL^DATA #DELETE 14422k00/14422k02 PSTM^FRMT^SEM^ADDL^DATA #ADD 14428#00 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "2" or ps51^get^tkn.authn^coll^ind = "3" then #DELETE 14428#01 PSTM^FRMT^SEM^ADDL^DATA #ADD 14428j19 PSTM^FRMT^SEM^ADDL^DATA move( sem.addl^data.info. #DELETE 14428j1A PSTM^FRMT^SEM^ADDL^DATA #ADD 14428x00 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); #DELETE 14428x01 PSTM^FRMT^SEM^ADDL^DATA #ADD 14485#00 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "2" or ps51^get^tkn.authn^coll^ind = "3" then #DELETE 14485#01 PSTM^FRMT^SEM^ADDL^DATA #ADD 14486 PSTM^FRMT^SEM^ADDL^DATA move( sem.addl^data.info.ecom^sec^sub^fld^42. #DELETE 14487 PSTM^FRMT^SEM^ADDL^DATA #ADD 14488x00 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); #DELETE 14488x01 PSTM^FRMT^SEM^ADDL^DATA #ADD 17767 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = " " or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "0" ) ) and #DELETE 17768 /17771 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 22188k02 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "217" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "215" or #ADD 22788 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind <> " " and sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind <> "0" ) and #DELETE 22788f00/22789f02 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0N083 !#CMP2.28 05/07/19 BNETLIBS62111FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62111 * ******************************************************************************** #SCN = SW0N100 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62111 #NEWVERSION = 62112 #ADD Z078500K ! 07MAY2019 jayaprm ! Symptom: BNET Interface does not support receiving DE48 SE83 ! in request messages. ! Problem: MasterCard specifies that data element 48, subelement 83 ! is valid for 0110 and 0120 messages but MasterCard is ! allowing this subelement in 0100 messages. So BNET ! interface is returning an invalid DE48 length in 0110 ! message. ! Fix: Added checks for DE 48 SEs(74, 83, 84, 87) that should ! not be in a request message. ! Added logic to ensure that DE 48 SE 83 and DE 48 SE 87 ! are not added to the response message if already present ! in the request. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2897595 #ADD 20603 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and ( sem.addl^data.info.adnl^proc^info^sub^fld^74.tag = "74" or sem.addl^data.info.avs^resp.tag = "83" or sem.addl^data.info.mrch^advc^cde^sub^fld^84.tag = "84" or sem.addl^data.info.cvc^sub^fld^87.tag = "87" ) then begin if sem.addl^data.info. adnl^proc^info^sub^fld^74.tag = "74" then begin movd( data^elem^err^g, "048074" ); end else if sem.addl^data.info.avs^resp.tag = "83" then begin movd( data^elem^err^g, "048083" ); end else if sem.addl^data.info. mrch^advc^cde^sub^fld^84.tag = "84" then begin movd( data^elem^err^g, "048084" ); end else if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then begin movd( data^elem^err^g, "048087" ); end; return resp^format^error^sem^l; end; #REPLACE 23300 /23300 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRESP sem.addl^data.info.avs^rqst.cde <> "0" and sem.addl^data.info.avs^resp.tag <> "83" then #REPLACE 23318 /23318 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRESP sem.addl^data.info.cvc2^sub^fld^92.tag^data <> "0" and sem.addl^data.info.cvc^sub^fld^87.tag <> "87" then #ENDSCN = SW0N100 !#CMP2.28 05/08/19 BNETLIBS62112FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62112 * ******************************************************************************** #SCN = SW0N101 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62112 #NEWVERSION = 62113 #ADD a078500K ! 08MAY2019 jayaprm ! Symptom: MCD19 scenario - PAN mismatch in DE-2 and SUSP timer ! buffer ! Problem: For MCD19 scenario, DE 2 is built from the S4 token ! which resulted in mismatch of pan present in DE 35 ! and DE 2. In request, susp.timer buffer is built using ! TRACK2.PAN and in response, susp.prikey uses DE 2 to ! fetch the record and it fails. ! Fix: Modified code to ensure that the Track-2 PAN is ! available to the interface to match the incoming ! response to the outgoing request. ! Proc Modified: pstm^frmt^0200^to^xrqst ! sem^frmt^prikey ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS, BNETS ! Run Make. ! Reference: Case #2895648. #ADD 10216 SUB^LOG^ERROR call ascii^integer^( sem.pan.lgth, panlgth ); if sem.pan.num <> pstm.tran.track2 for panlgth then begin movl ( sem.private^data.info.byte[ 26 ], pstm.tran.track2.byte[ 1 ], panlgth ); movd ( sem.private^data.lgth, "045" ); end; #ADD 17679 SEM^FRMT^PRIKEY if $param( orig^b24 ) and orig^b24 and sem.private^data.lgth > "026" then begin movl ( prikey.pan, sem.private^data.info.byte[ 26 ], $len( prikey.pan) ); end; #ENDSCN = SW0N101 !#CMP2.28 05/08/19 BNETS 6144 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6144 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6144 * ******************************************************************************** #SCN = SW0N102 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6144 #NEWVERSION = 6145 #ADD 03821r0C ! 08MAY2019 jayaprm ! Symptom: MCD19 scenario - PAN mismatch in DE-2 and SUSP timer ! buffer ! Problem: For MCD19 scenario, DE 2 is built from the S4 token ! which resulted in mismatch of pan present in DE 35 ! and DE 2. In request, susp.timer buffer is built using ! TRACK2.PAN and in response, susp.prikey uses DE 2 to ! fetch the record and it fails. ! Fix: Modified code to ensure that the Track-2 PAN is ! available to the interface to match the incoming ! response to the outgoing request. ! Proc Modified: pstm^0200^send^compl^advc ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS, BNETS ! Run Make. ! Reference: Case #2895648. #ADD 15844J04 PSTM^0200^SEND^COMPL^ADVC if sem.private^data.lgth < "026" then begin movd( sem.private^data.lgth, "026" ); end; #DELETE 15844J05 PSTM^0200^SEND^COMPL^ADVC #ENDSCN = SW0N102 !#CMP2.28 06/05/19 BNETLIBS62113FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62113 * ******************************************************************************** #SCN = SW0N112 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62113 #NEWVERSION = 62114 #ADD b078500I ! 05JUN2019 wielerk ! Symptom: Interface does not support M/Chip requirement for ! contactless transactions. ! Problem: The previous fix assumed that the PAN in tag 5A would ! be padded with Fs. This would only occur is the PAN ! contained an odd number of digits. ! Fix: Modified code to recognize tag 5A in Chip Data token ! and format DE-2 from the contents by parsing Chip Data ! by editing for numeric values. ! Proc Modified: util^frmt^chip^data^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2906206. #REPLACE X2905300 UTIL^FRMT^CHIP^DATA^TO^XRQST int idx := 0; #REPLACE X290530Q/X290530S UTIL^FRMT^CHIP^DATA^TO^XRQST idx := -1; while ( ( idx := idx + 1 ) < $occurs( pan ) ) and ( $numeric( pan[ idx ] ) ) do; #REPLACE X290530V/X290530W UTIL^FRMT^CHIP^DATA^TO^XRQST sem.pan.num ':=' pan for idx; call integer^ascii^( sem.pan.lgth, idx ); #ENDSCN = SW0N112 !#CMP2.28 06/19/19 BNETDDLS6067 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6067 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6067 * ******************************************************************************** #SCN = SW0N122 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00262\0Z * 19JUN2019 jayaprm * Symptom: Banknet Release 19.Q3 Functional Enhancements * Problem: None * Fix: Modified the interface in support of the following: * - AN 2606 - Enhancements to Support Contactless * Tracking with Single Tap and PIN Request * - AN 2609 - Enhancements to Low-Risk Transaction * Indicator to Support EEA Customers Compliance * to PSD2 RTS * - AN 2146 - Support of Card Acceptor Business Code * (MCC) 4829 for Funding Transactions with * Additional Data in the U.S. Region * - Case #02895648 - Fix to the Fix - Interface has * been enhanced to check the second byte of PSTM. * TRACK-2 field to determine whether the PAN needs * to be included in DE 127. * - Case #02908546 - Interface has been enhanced to check * the EMV Supplementary Data token for tag "5F24". * If found moved its value to DE 14 in the SEM. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run Make. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009095 #ADD 01157s0P SEM * * Time Validation Information * Subfield tag = 49 * Contains the Time Validation Information * 06 tim-valid-info-sub-fld-49 redefines srvc-params-sub-fld-18. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(15). #ADD 01157#0X SEM * * Multi-Purpose Merchant Indicator * Subfield tag = 22 * Contains data that is unique to programs, services or other * specifics about the transaction * 06 mrch-inds-sub-fld-22. 08 tag pic 99. 08 lgth pic 99. 08 low-risk-mrch-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 single-tap-pin-cap-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 single-tap-pin-rqst-from-acq. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 single-tap-pin-rqst-from-iss. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). #DELETE 01157$06/01157$0Q SEM #ADD 01157=0V SEM * * Transaction Integrity Class * Subfield tag = 52 * Contains the Transaction Integrity Class * 06 txn-intgty-clas-sub-fld-52. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 04 user-fld pic x(4). #DELETE 01157=0W SEM #ENDSCN = SW0N122 !#CMP2.28 06/19/19 BNETG 60113FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60113 * ******************************************************************************** #SCN = SW0N123 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b000260F ! 19JUN2019 jayaprm ! Symptom: Banknet Release 19.Q3 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2606 - Enhancements to Support Contactless ! Tracking with Single Tap and PIN Request ! - AN 2609 - Enhancements to Low-Risk Transaction ! Indicator to Support EEA Customers Compliance ! to PSD2 RTS ! - AN 2146 - Support of Card Acceptor Business Code ! (MCC) 4829 for Funding Transactions with ! Additional Data in the U.S. Region ! - Case #02895648 - Fix to the Fix - Interface has ! been enhanced to check the second byte of PSTM. ! TRACK-2 field to determine whether the PAN needs ! to be included in DE 127. ! - Case #02908546 - Interface has been enhanced to check ! the EMV Supplementary Data token for tag "5F24". ! If found moved its value to DE 14 in the SEM. ! Sourced in definition sca^acq^data^tkn from BADDLTAL. ! Added the define sem^non^card^form^factor^d, ! sem^funding^txn^d and tag^appl^exp^dat^d. ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009095 #ADD a000260a ?nolist, source =basrc_baddltal( ? genrc^ichg^resp^data^tkn ? ichg^pgm^tkn ? sca^acq^data^tkn ? ) ?list ! genrc^ichg^resp^data^tkn ! ichg^pgm^tkn ! sca^acq^data^tkn ! ) #DELETE a000260b/a000260k #ADD X001660U define sem^funding^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.merch^typ = "4829" or x.merch^typ = "6538" ) )#; #ADD H002330M define sem^non^card^form^factor^d( x ) = ( ( x.addl^data.info.pmnt^init^chan^sub^fld^23. tag = "23" and x.addl^data.info.pmnt^init^chan^sub^fld^23. tag^data <> "00" and x.addl^data.info.pmnt^init^chan^sub^fld^23. tag^data <> "20" ) or x.addl^data.info.wallet^pgm^sub^fld^26. tag = "26" )#; #REPLACE b0136602 tag^appl^exp^dat^d = [ %h5F, %h24 ]#, #ENDSCN = SW0N123 !#CMP2.28 06/19/19 BNETLIBS62114FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62114 * ******************************************************************************** #SCN = SW0N124 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62114 #NEWVERSION = 62115 #ADD c078500F ! 19JUN2019 jayaprm ! Symptom: Banknet Release 19.Q3 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support of the following: ! - AN 2606 - Enhancements to Support Contactless ! Tracking with Single Tap and PIN Request ! - AN 2609 - Enhancements to Low-Risk Transaction ! Indicator to Support EEA Customers Compliance ! to PSD2 RTS ! - AN 2146 - Support of Card Acceptor Business Code ! (MCC) 4829 for Funding Transactions with ! Additional Data in the U.S. Region ! - Case #02895648 - Fix to the Fix - Interface has ! been enhanced to check the second byte of PSTM. ! TRACK-2 field to determine whether the PAN needs ! to be included in DE 127. ! - Case #02908546 - Interface has been enhanced to check ! the EMV Supplementary Data token for tag "5F24". ! If found moved its value to DE 14 in the SEM. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xresp ! util^frmt^chip^data^to^xrqst ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009095 #ADD 10027e0H SUB^LOG^ERROR if found^pos^data1^tkn and sem.typ = sem^auth^request^d and sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.merch^typ = "4829" then begin if pos^data1^tkn.pmnt^typ^ind <> " " then begin move( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, pos^data1^tkn.pmnt^typ^ind ); if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag <> "77" then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); call ascii^integer( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77. lgth, 2, se^lgth ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); end end; end; #REPLACE b1021603 SUB^LOG^ERROR if sem.pan.num <> pstm.tran.track2.byte[ 1 ] for panlgth then #ADD 10672 PSTM^FRMT^0210^TO^XRESP if pstm.tran.resp^cde = "096" then begin case ps50^tkn.err^flg of begin "5" -> begin movd( sem.resp^cde, "65" ); if not sem^non^card^form^factor^d( sem ) and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag = "02" then begin call ascii^integer^( sem.addl^data.info. mrch^inds^sub^fld^22.lgth, se^lgth ); mov^( sem.addl^data.info. mrch^inds^sub^fld^22, blanks ); set^addl^data^d( mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss. tag^data, "1" ); end; end; "6" -> begin movd( sem.resp^cde, "65" ); end; end; ! of case end; ! of pstm.tran.resp^cde = "096" #ADD 10934 PSTM^FRMT^0210^TO^XRESP if sem.resp^cde = "65" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag^data <> " " then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag, "04" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.lgth, "01" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth - se^lgth; call integer^ascii^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.mrch^inds^sub^fld^22.tag, "22" ); se^lgth := $len( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss ); call integer^ascii^( sem.addl^data.info. mrch^inds^sub^fld^22.lgth, se^lgth ); end; #ADD 13352 PSTM^FRMT^SEM^ADDL^DATA int .sca^acq^data^tkn( sca^acq^data^tkn^def ); int sca^acq^data^tkn^lgth; #ADD 14806k1L PSTM^FRMT^SEM^ADDL^DATA sub^lgth := 0; movd( tkn^id, sca^acq^data^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^data^tkn, sca^acq^data^tkn^lgth ) then begin if sca^acq^data^tkn.sca^exempt^inds = "0400" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "01" ); end else if sca^acq^data^tkn.sca^exempt^inds = "4000" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "02" ); end else if sca^acq^data^tkn.sca^exempt^inds = "0800" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "03" ); end else if sca^acq^data^tkn.sca^exempt^inds = "8000" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "04" ); end else if sca^acq^data^tkn.sca^exempt^inds = "0200" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "05" ); end else begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, " " ); end; if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data <> blanks for $len( sem.addl^data.info. mrch^inds^sub^fld^22.low^risk^mrch^ind. tag^data ) then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.lgth, "02" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind ); end; ! of DE48 SE22 SF01 tag^data <> blanks if pos^data1^tkn^fnd and pos^data1^tkn.cvm^ind = "2" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag, "02" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.lgth, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag^data, "1" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind ); end; if pos^data1^tkn^fnd and pos^data1^tkn.real^time^data^ind = "3" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag, "03" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.lgth, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq. tag^data, "1" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq ); end; if sub^lgth > 0 then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22.tag, "22" ); call integer^ascii^( sem.addl^data.info. mrch^inds^sub^fld^22. lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; end; end; ! of sca^acq^data^tkn #ADD 18660 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin move( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind, rqst.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind ); move( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind, rqst.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind ); move( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq, rqst.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq ); end; #ADD 19184 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = "65" and ( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data <> "P" and sem.addl^data.info.authn^data^sub^fld^66.pgm^proto. tag^data <> "2" ) then begin if ( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag = "01" or sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag = "02" ) then begin ! ! Issuer requires stronger customer authentication ! movd( pstm.tran.resp^cde, "096" ); if sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin movd( err^flg, "5" ); end else begin movd( err^flg, "6" ); end end else begin ! ! Issuer may require stronger customer authentication ! movd( err^flg, "6" ); end; call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, ofst, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, ! card^vrfy^flg ! ); end; #ADD 20395 SEM^FRMT^XRQST^TO^PSTM^0200 struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 20695 SEM^FRMT^XRQST^TO^PSTM^0200 sem^funding^txn^d( sem ) ) then #DELETE 20696 /20698 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 21425e02 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag = "03" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag^data = "1" then begin movd( pos^data1^tkn.real^time^data^ind, "3" ); add^pos^data1 := true; end; if sem.typ = sem^auth^request^d and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag = "02" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag^data = "1" then begin movd( pos^data1^tkn.cvm^ind, "2" ); add^pos^data1 := true; end; #ADD 22859 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind = "01" then begin tkn^id ':=' sca^acq^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, sca^acq^data^tkn ); if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "01" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0400" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "02" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "4000" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "03" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0800" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "04" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "8000" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "05" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0200" ); end else begin movd( sca^acq^data^tkn.sca^exempt^inds, "0000" ); end; tkn^add^lgth := $len( sca^acq^data^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, sca^acq^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1801, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1802, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1802 ); end; end; ! of if tkn^result end; #ADD N257320N TRACE^SEM ! ! ! Multi-Purpose Merchant Indicator ! ! ! if hdr.addl^data.info. mrch^inds^sub^fld^22.tag = "22" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Low-Risk Merchant Ind ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag = "01" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. low^risk^mrch^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. low^risk^mrch^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! ! Move Subfield 2 - Single Tap Indicator ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag = "02" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^cap^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Response to PIN Request ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag = "03" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq. tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! ! ! ! Move Subfield 4 - issuer PIN Request ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss. tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! end; ! of if hdr...tag = "22" #ADD N279170E TRACE^SEM else if ptr[ length ] = "22" then begin ! ! ! Multi-Purpose Merchant Indicator ! ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. mrch^inds^sub^fld^22.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! ! Move Subfield 1 - Low-Risk Merchant ! ! Indicator ! ! ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. low^risk^mrch^ind.tag ); end ! subfield 01 ! else ! ! ! Move Subfield 2 - Single Tap ! ! Indicator ! ! ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag ); end ! subfield 02 ! else ! ! ! Move Subfield 3 - Response to PIN ! ! Request ! ! ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq. tag ); end ! subfield 03 ! else ! ! ! Move Subfield 4 - Issuer PIN ! ! Request ! ! ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss. tag ); end ! subfield 04 ! else ! ! ! bad data, clear sem de-48.se-22,! ! end loop ! ! ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. mrch^inds^sub^fld^22.tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. mrch^inds^sub^fld^22, " ", $len( sem^ptr.addl^data.info. mrch^inds^sub^fld^22 ) ); loop^lgth := tag^length; end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "22" #ADD 28958 UTIL^FRMT^ADDL^DATA^TO^XRESP ! ! ! SE 22-Multi-Purpose Merchant Indicator ! if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin call ascii^integer^( sem.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag ) + $len( sem.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.lgth ); lgth := lgth + delta^lgth; end; #ADD X290530Y UTIL^FRMT^CHIP^DATA^TO^XRQST if ptr[ length ] = tag^appl^exp^dat^d then begin ! ! ! Application Expiration Date - tag = 5F24 ! ! ! ptr^idx := length + tag^lgth; tag^data^lgth := 0; tag^data^lgth.<0:7> := 0; tag^data^lgth.<8:15> := ptr[ ptr^idx ].<8:15>; tag^data^lgth := ( tag^data^lgth * 2 ); ptr^idx := ptr^idx + de55^lgth^l; call binary^hexchar( sem.exp^dat, tag^data^lgth, ptr[ ptr^idx ] ); end; ! of Application Expiration Date - tag = 5F24 #ENDSCN = SW0N124 !#CMP2.28 07/15/19 BNETLIBS62115FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62115 * ******************************************************************************** #SCN = SW0N137 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62115 #NEWVERSION = 62116 #ADD d078500Z ! 08MAY2019 VulliL ! Symptom: DE48 SE63 (Trace ID) is not moved to Token 20 when a ! reversal is recieved from Banknet. ! Problem: When a partial reversal is received from Banknet then ! Token 20 TRACE-ID field is set to DE63 and DE15 from ! the ILF SEM instead of DE48 SE63. ! Fix: Modified code to set TRACE-ID field in Token 20 to ! DE48 SE63 from the reversal message, if the Interchange ! Compliance token (Id = "20") is not found in the ILF ! record. ! Proc Modified: SEM^FRMT^XRVSL^TO^PSTM^0420 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #02916000. #ADD B236740M SEM^FRMT^XRVSL^TO^PSTM^0420 movl( compliance^tkn.trace^id, rvsl.addl^data.info.trc^id^sub^fld^63.bnet^ref^num, $len( rvsl.addl^data.info. trc^id^sub^fld^63.bnet^ref^num ) ); idx := $len( rvsl.addl^data.info. trc^id^sub^fld^63.bnet^ref^num ); movl( compliance^tkn.trace^id.byte[ idx ], rvsl.addl^data.info.trc^id^sub^fld^63.dat^setl, $len( rvsl.addl^data.info. trc^id^sub^fld^63.dat^setl ) ); #DELETE B236740N/B236740R SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0N137 !#CMP2.28 08/05/19 BNETLIBS62116FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62116 * ******************************************************************************** #SCN = SW0N149 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62116 #NEWVERSION = 62117 #ADD e078500G ! 05AUG2019 wielerk ! Symptom: Interface does not send DE48 SE22 SF02 ( addl data ! mrch-inds-sub-fld-22 single-tap-pin-cap-ind ) ! when a correct CH token is presented. ! Problem: The logic to process this external field required the ! SCA Acquirer Data Token ( FH token ). ! The requirement for the FH token is not correct. ! Fix: Modified code to place the logic for DE48 SE22 SF02 ! outside the edit for the FH token. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #02935390. #ADD d148060z PSTM^FRMT^SEM^ADDL^DATA end; ! of sca^acq^data^tkn if pos^data1^tkn^fnd and pos^data1^tkn.cvm^ind = "2" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag, "02" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.lgth, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind.tag^data, "1" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind ); end; ! of pos data1 tkn found if pos^data1^tkn^fnd and pos^data1^tkn.real^time^data^ind = "3" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag, "03" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.lgth, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq.tag^data, "1" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq ); end; ! of pos data1 tkn found if sub^lgth > 0 then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22.tag, "22" ); call integer^ascii^( sem.addl^data.info. mrch^inds^sub^fld^22.lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; end; #DELETE d1480610/d148061r PSTM^FRMT^SEM^ADDL^DATA #DELETE d148061t PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0N149 !#CMP2.28 08/08/19 BNETLIBS62117FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62117 * ******************************************************************************** #SCN = SW0N150 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62117 #NEWVERSION = 62118 #ADD f078500F ! 08AUG2019 jayaprm ! Symptom: BNET Abends In Production Due to Missing Otherwise ! Problem: As otherwise statement is not present while checking ! ps50^tkn.err^flg the BNET code was abended. ! Fix: Added otherwise statement to the case that have check ! for ps50^tkn.err^flg. ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2940222 #ADD d106720V PSTM^FRMT^0210^TO^XRESP otherwise -> begin ! do nothing ! end; #ENDSCN = SW0N150 !#CMP2.28 08/20/19 BNETLIBS62118FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62118 * ******************************************************************************** #SCN = SW0N178 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62118 #NEWVERSION = 62119 #ADD g078500C ! 20AUG2019 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA ! Problem: None ! Fix: Modified the interface to set PGM-PROTO field in the ! SCA Acquirer Data token (ID = "FH") to DE48 SE66 SF1 in ! 0100 messages received inbound from the network. ! Proc Modified: SEM^FRMT^XRQST^TO^PSTM^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60BNET: BNETLIBS ! Run Make. ! Replace files: ! SW60BNET: BNETUPDT ! Reference: WO #009106. #ADD d2285901 SEM^FRMT^XRQST^TO^PSTM^0200 ( ( sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind = "01" ) or ( sem.addl^data.info.authn^data^sub^fld^66.tag = "66" and sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data <> " " ) ) then #DELETE d2285902/d2285904 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0N178 !#CMP2.28 08/22/19 BNETLIBS62119FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62119 * ******************************************************************************** #SCN = SW0N180 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62119 #NEWVERSION = 62120 #ADD h078500F ! 22AUG2019 wielerk ! Symptom: Interface declines Contactless transactions when DE-2 ! ( PAN ) and DE-35 ( Track2 ) do not match. ! Problem: MasterCard rules allow DE-2 to differ from DE-35 for ! Contactless transactions. ! Fix: Modified code to exclude Contactless transactions from ! the edit that compares DE-2 and DE-35. ! Proc Modified: sem^frmt^data^to^pstm^track2 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #02939144. #ADD 16775 SEM^FRMT^DATA^TO^PSTM^TRACK2 if pan^bit^d and ( sem.pos^entry^mde <> pan^auto^cntctlss^m^chip and sem.addl^data.info.paypass^mapping^sub^fld^33. tag <> "33" ) then #DELETE 16776 SEM^FRMT^DATA^TO^PSTM^TRACK2 #ENDSCN = SW0N180 !#CMP2.28 08/26/19 BNETLIBS62120FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62120 * ******************************************************************************** #SCN = SW0N181 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62120 #NEWVERSION = 62121 #ADD i078500D ! 26AUG2019 wielerk ! Symptom: Interface passes manually-entered ATM transactions to ! Base24 which can be approved. ! Problem: MasterCard rules specifically disallow manual entry of ! ATM transactions yet these transactions are received ! by Base24. ! Fix: Modified code to deny transactions with DE-18 ( MCC ) ! set to "6010" or "6011" and manually entered data and ! to deny transaction with DE-18 = "6011" without a PIN ! or an indication of a pre-verified PIN. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #02946124. #ADD 20555 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.merch^typ = automated^cash^disbursement^d or ( sem.merch^typ = manual^cash^disbursement^d and sem.proc^cde = sem^wdl^d ) ) and not sem^atm^allwd^entry^mde^d( sem ) then begin return resp^tran^not^supp^sem^l; end else if sem.merch^typ = automated^cash^disbursement^d and not ( pin^bit^d or ( sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" and sem.addl^data.info.pin^svc^cde^sub^fld^80.cde = "PV" ) ) then begin return resp^tran^not^supp^sem^l; end; #ENDSCN = SW0N181 !#CMP2.28 08/27/19 BNETLIBS62121FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62121 * ******************************************************************************** #SCN = SW0N182 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62121 #NEWVERSION = 62122 #ADD j078500G ! 27AUG2019 VulliL ! Symptom: Issue with logging DE 48 SE 22 subfields in ILF. ! Problem: Interface moves DE 48 SE 22 subfields from the request ! message to the response message structure only if ! DE 48 SE 22 SF 04 is present in the response. ! Fix: Modified the code to move DE 48 SE 22 subfields from ! the request message to the response message structure ! if DE 48 SE 22 is present in the request. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #02944966. #ADD d1866000 SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.addl^data.info.mrch^inds^sub^fld^22.tag = "22" then #DELETE d1866001/d1866002 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0N182 !#CMP2.28 09/03/19 BNETDDLS6068 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6068 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6068 * ******************************************************************************** #SCN = SW0N186 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00262]0Q * 28AUG2019 GadiA * Symptom: Banknet Release 19.Q4 Functional Enhancements. * Problem: None * Fix: Modified the interface in support of the following: * AN 2615 - Enhancements to Mastercard Funds Transfer * Transaction Processing and MoneySend Program * AN 2620 - Introduction of Digital Payment Data * AN 2628 - High-Risk Purchase Identifier Enhancement * AN 2630 - Use of Trace ID to Support PSD2 Recurring * Payment Requirements * AN 2639 - Enhancement to SPA2 AAV Verification * AN 2643 - Authorization of Purchase Returns * AN 2645 - Enhancement to Low-Risk Transaction Indicator * AN 2697 - Revised Standards-Electronic Commerce * Transactions at Automated Fuel Dispensers * AN 2723 - Revised Standards-Europe Region PSD2 RTS * Compliance for Remote Electronic Transactions * Case #02929452 - Regarding Mastercard Data Integrity * for Invalid Response Code for CVV2 failure * Added field for DE 104 (37 bytes) to the area of the SEM * not logged to the ILF: dgtl-pmnt-data * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Run Make. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009103 #ADD 01411z0Q SEM * ! * Digital payment data ! * bit map position = 104 ! * EBCDIC in transmission, variable in length ! * ! 02 dgtl-pmnt-data. 04 lgth pic 9(3). 04 crypto. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(28). #ENDSCN = SW0N186 !#CMP2.28 09/03/19 BNETG 60114FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60114 * ******************************************************************************** #SCN = SW0N187 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c000260T ! 28AUG2019 GadiA ! Symptom: Banknet Release 19.Q4 Functional Enhancements. ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2615 - Enhancements to Mastercard Funds Transfer ! Transaction Processing and MoneySend Program ! AN 2620 - Introduction of Digital Payment Data ! AN 2628 - High-Risk Purchase Identifier Enhancement ! AN 2630 - Use of Trace ID to Support PSD2 Recurring ! Payment Requirements ! AN 2639 - Enhancement to SPA2 AAV Verification ! AN 2643 - Authorization of Purchase Returns ! AN 2645 - Enhancement to Low-Risk Transaction Indicator ! AN 2697 - Revised Standards-Electronic Commerce ! Transactions at Automated Fuel Dispensers ! AN 2723 - Revised Standards-Europe Region PSD2 RTS ! Compliance for Remote Electronic Transactions ! Case #02929452 - Regarding Mastercard Data Integrity ! for Invalid Response Code for CVV2 failure ! Sourced in definition adnl^trace^id^tkn from BADDLTAL. ! Modified defines pos^pmnt^adj^d, pos^pmnt^d to include ! MCC values: 6536 and 6537 ! Modified define sem^funding^txn^d to include ! MCC value: 6540 ! Modified define sem^moneysend^txn^ind^d to include ! values: C58, C59, C65, and to exclude value C67 ! Added define to identify the bit, DE 104: ! dgtl^pmnt^data^bit^d ! Added entry to sem^bit^map^tbl^g to support DE 104 ! Added define to specify the default Trace ID: ! dflt^trace^id^d ! Added define to identify a refund transaction from ! Banknet: sem^return^d ("20") ! Added variable to hold the value of the new LCONF ! parameter: sppt^sca^g ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009103 #ADD a000260o ?nolist, source =basrc_baddltal( ? adnl^trace^id^tkn ? ) ?list ! adnl^trace^id^tkn ! ) #ADD 00119 sem^return^d = "20"#, #ADD 00166501 x.retl^sic^cde = "6533" or x.retl^sic^cde = "6536" or x.retl^sic^cde = "6537" ) ) )#; #DELETE 00166800/00166802 #ADD 00166509 x.retl^sic^cde = "6533" or x.retl^sic^cde = "6536" or x.retl^sic^cde = "6537" ) ) )#; #DELETE 00166805/00166807 #ADD c0016602 x.merch^typ = "6540" or #ADD 00193z02 define dflt^trace^id^d = "MCC9999991231 "#; #ADD L002330A x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C58" or x.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C59" or #REPLACE H002330F tag^data = "C65" )#; #ADD R0043502 int sppt^sca^g; #ADD 00612 dgtl^pmnt^data^bit^d = sbit^map[2].<07> #, !bit 104 ! #ADD 01040 104, 3, sem^field( dgtl^pmnt^data ), #DELETE 01041 #ENDSCN = SW0N187 !#CMP2.28 09/03/19 BNETLIBS62122FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62122 * ******************************************************************************** #SCN = SW0N188 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62122 #NEWVERSION = 62123 #ADD k078500E ! 28AUG2019 GadiA ! Symptom: Banknet Release 19.Q4 Functional Enhancements. ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2615 - Enhancements to Mastercard Funds Transfer ! Transaction Processing and MoneySend Program ! AN 2620 - Introduction of Digital Payment Data ! AN 2628 - High-Risk Purchase Identifier Enhancement ! AN 2630 - Use of Trace ID to Support PSD2 Recurring ! Payment Requirements ! AN 2639 - Enhancement to SPA2 AAV Verification ! AN 2643 - Authorization of Purchase Returns ! AN 2645 - Enhancement to Low-Risk Transaction Indicator ! AN 2697 - Revised Standards-Electronic Commerce ! Transactions at Automated Fuel Dispensers ! AN 2723 - Revised Standards-Europe Region PSD2 RTS ! Compliance for Remote Electronic Transactions ! Case #02929452 - Regarding Mastercard Data Integrity ! for Invalid Response Code for CVV2 failure ! Proc Added: util^frmt^txn^ref^data^to^sem ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^proc^cde^to^pstm^tran ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009103 #ADD T0967302 SUB^LOG^ERROR pos^data1^tkn.pmnt^info = "0" and not bnet^g.sppt^sca^g then #DELETE T0967303 SUB^LOG^ERROR #ADD T096730p SUB^LOG^ERROR if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and pos^data1^recur^pmnt = true and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then #DELETE R0967302 SUB^LOG^ERROR #ADD 09973 SUB^LOG^ERROR sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "2" and sem.ntl^pos^data.cond^cde.byte[ 9 ] <> "6" ) then #DELETE 09974 SUB^LOG^ERROR #ADD d1002702 SUB^LOG^ERROR sem.proc^cde.byte[ 0 ] = sem^purchase^d then begin if ( ( sem.merch^typ = "4829" or sem.merch^typ = "6540" ) and pos^data1^tkn.pmnt^typ^ind = "F" ) or ( sem.merch^typ = "6538" and pos^data1^tkn.pmnt^typ^ind = "C" ) then #DELETE d1002703/d1002706 SUB^LOG^ERROR #ADD d100270Y SUB^LOG^ERROR if sem.typ = sem^auth^request^d and ( sem.proc^cde.byte[ 0 ] = sem^pmnt^txn^d or sem^funding^txn^d( sem ) ) and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data <> " " then begin if not util^frmt^txn^ref^data^to^sem( sem, pstm ) then begin return resp^tran^bad^pos^l; end; end; #DELETE 10587 /10597 PSTM^FRMT^0210^TO^XRESP #ADD 11543 PSTM^FRMT^0420^TO^ACQ^XRVSL moneysend^ref^data^bit^d := 0; ! S-108 ! #ADD 11903 PSTM^FRMT^0420^TO^ACQ^XRVSL if ( sem.proc^cde.byte[ 0 ] = sem^pmnt^txn^d or sem^funding^txn^d( sem ) ) and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data <> " " then begin call util^frmt^txn^ref^data^to^sem( sem, pstm ); end; #ADD 13304 PSTM^FRMT^RESP^CDE^TO^SEM if sem.proc^cde = sem^return^d and sem.resp^cde = "51" then begin movd( rcode, "05" ); end; #ADD 13414s02 PSTM^FRMT^SEM^ADDL^DATA "6532" , "6537" , "P" , "6538" , "6540" , "R" , #DELETE 13418 /13420 PSTM^FRMT^SEM^ADDL^DATA #ADD 13895 PSTM^FRMT^SEM^ADDL^DATA end else if pos^data1^tkn^fnd and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "C" and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then begin ! ! ! Compliance token ('20') not found. ! ! Populate DE 48 SE 63 with default value ! ! ! movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movd( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num, dflt^trace^id^d ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. trc^id^sub^fld^63 ); call integer^ascii^( sem.addl^data.lgth, lgth ); #ADD d148060c PSTM^FRMT^SEM^ADDL^DATA if sca^acq^data^tkn.sca^exempt^inds = "1000" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "06" ); end else #ADD 14826 PSTM^FRMT^SEM^ADDL^DATA if pos^mrch^tkn.spcl^pos^cond = "7" and pstm.retl^sic^cde = "6051" then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, "P70" ); lgth := lgth + 7; end ! cryptocurrency else if pos^mrch^tkn.spcl^pos^cond = "S" and pstm.retl^sic^cde = "6211" then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, "P71" ); lgth := lgth + 7; end; ! high-risk securities #ADD 17849%08 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( ( ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" ) and #DELETE 17849V02 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD L1784903 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" ) ) ) then #DELETE L1784904 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #ADD 18078 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM wlform( noroom^tkn, "NOROOM TO ADD TOKEN: \\ " ',' " PAN : \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( err^tkn, "UNABLE TO ADD TOKEN: \\ " ',' " PAN : \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF: \\\\\\\\\ SETL DATE: \\\\ ERR: # " ) #ADD 18079M00 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM struct .adnl^trace^id^tkn( adnl^trace^id^tkn^def ); int adnl^add^lgth; int add^adnl^trace^id^tkn := false; int .adnl^trace^id^get^tkn( adnl^trace^id^tkn^def ); int adnl^trace^id^tkn^lgth; int dspy := false; #ADD B1808102 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int pos^userdata; int tkn^add^lgth; int tkn^lgth; int tkn^result; #ADD B180980F SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^id ':=' adnl^trace^id^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @adnl^trace^id^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^trace^id^tkn ); add^adnl^trace^id^tkn := true; end else begin @adnl^trace^id^tkn := @adnl^trace^id^get^tkn; end; movl( adnl^trace^id^tkn.trace^id, rvsl.banknet^data.ntwk^id^cde, 9 ); movl( adnl^trace^id^tkn.trace^id.byte[ 9 ], rvsl.setl^dat, $len( rvsl.setl^dat ) ); movd( adnl^trace^id^tkn.origin, "2" ); if add^adnl^trace^id^tkn = true then begin adnl^add^lgth := $len( adnl^trace^id^tkn ); tkn^lgth := 0; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^trace^id^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 1803, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @rvsl.pan.num, @pstm.seq^num, @rvsl.banknet^data.ref^num, @rvsl.setl^dat ); end else begin call log^message^( 1804, ! routing code !, @err^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @rvsl.pan.num, @pstm.seq^num, @rvsl.banknet^data.ref^num, @rvsl.setl^dat, tkn^result ); call abend^( 1804 ); end; end; ! of if add^adnl^trace^id^tkn = true #ADD 18913p00 SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "F" or rqst.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "C" then begin movl( pmnt^typ^ind, rqst.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, $occurs ( pmnt^typ^ind) ); end; #DELETE 18913p01/18913p04 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 18913e0H SEM^FRMT^XRESP^TO^PSTM^0210 movl( pos^data1^tkn^ptr.pmnt^typ^ind, pmnt^typ^ind, $len( pos^data1^tkn^ptr.pmnt^typ^ind ) ); #ADD d1918401 SEM^FRMT^XRESP^TO^PSTM^0210 ( sem.pos^entry^mde <> chip^read and #DELETE d1918402/d1918403 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD d191840Q SEM^FRMT^XRESP^TO^PSTM^0210 if bnet^g.sppt^sca^g and ( sem.addl^data.info.crd^vrfy^mthd^sub^fld^20.tag^data <> "P" and sem.addl^data.info.authn^data^sub^fld^66.pgm^proto. tag^data <> "1" ) then begin ! ! Issuer requires stronger customer authentication ! movd( pstm.tran.resp^cde, "096" ); movd( err^flg, "6" ); end else #ADD 20359 SEM^FRMT^XRQST^TO^PSTM^0200 struct .adnl^trace^id^tkn( adnl^trace^id^tkn^def ); #ADD 21045 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 then begin tkn^id ':=' adnl^trace^id^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^trace^id^tkn ); if sem^incr^auth^d( sem ) then begin movl( adnl^trace^id^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( adnl^trace^id^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); movd( adnl^trace^id^tkn.origin, "2" ); end else if sem.proc^cde.byte[ 0 ] = sem^purchase^d and sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin movl( adnl^trace^id^tkn.trace^id, sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num, $len( adnl^trace^id^tkn.trace^id ) ); movd( adnl^trace^id^tkn.origin, "1" ); end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^trace^id^tkn, $len( adnl^trace^id^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1805, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1806, ! routing code !, @erradd^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1806 ); end; end; ! of if tkn^result end; ! of if base24^rel^g >= 5 then #REPLACE 21181 /21181 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 tag= "76" or sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag = "77" then #ADD 21189 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "P70" then begin movd( pos^mrch^tkn.spcl^pos^cond, "7" ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "P71" then begin movd( pos^mrch^tkn.spcl^pos^cond, "S" ); end; #ADD J2142201 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = credential^on^file^entry^d or sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then #DELETE J2142202 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22067 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde = sem^pmnt^txn^d or sem.proc^cde = sem^return^d then #DELETE 22068 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD B2215303 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.proc^cde = sem^pmnt^txn^d or sem.proc^cde = sem^return^d ) then #DELETE B2215304 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 22408 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].rslt^1 = "A" or sem.addl^data.info.on^behalf^svc^sub^fld^71. #ADD 22417 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "B" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "S" then begin ! ! ! Passed validation, but authorization ! ! amount is up to 20% greater than the ! ! authentication amount. ! ! ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "S" ); end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "C" or sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "T" then begin ! ! ! Passed validation, but authorization ! ! amount is 20% or more greater than the ! ! authentication amount. ! ! ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "T" ); end else #ADD J2241701 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].rslt^1 = "D" or sem.addl^data.info.on^behalf^svc^sub^fld^71. #ADD 22805 SEM^FRMT^XRQST^TO^PSTM^0200 if dgtl^pmnt^data^bit^d and sem.dgtl^pmnt^data.crypto.tag = "001" and ( sem.dgtl^pmnt^data.crypto.tag^data <> [ $len( sem.dgtl^pmnt^data.crypto.tag^data ) * [" "] ] and sem.dgtl^pmnt^data.crypto.tag^data <> [ $len( sem.dgtl^pmnt^data.crypto.tag^data ) * ["0"] ] ) then begin call ascii^integer^( sem.dgtl^pmnt^data.crypto. lgth, temp^lgth ); movd( authn^data^tkn.authn^ind^flg, "04" ); movl( authn^data^tkn.dgtl^pmnt^data.crypto, sem.dgtl^pmnt^data.crypto.tag^data, temp^lgth ); temp^lgth := temp^lgth + $len( authn^data^tkn. dgtl^pmnt^data.aav ); end; #ADD d228590h SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "06" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "1000" ); end else #ADD 23638 SEM^FRMT^XRVSL^TO^PSTM^0420 int add^adnl^trace^id^tkn := false; int .adnl^trace^id^get^tkn( adnl^trace^id^tkn^def ); int adnl^trace^id^get^lgth; int adnl^tkn^add^lgth; #ADD B2363801 SEM^FRMT^XRVSL^TO^PSTM^0420 int dspy := false; #ADD 23662 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .adnl^trace^id^tkn( adnl^trace^id^tkn^def ); #ADD B236741E SEM^FRMT^XRVSL^TO^PSTM^0420 tkn^id ':=' adnl^trace^id^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @adnl^trace^id^get^tkn, adnl^trace^id^get^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^trace^id^tkn ); add^adnl^trace^id^tkn := true; end else begin @adnl^trace^id^tkn := @adnl^trace^id^get^tkn; end; movl( adnl^trace^id^tkn.trace^id, rvsl.banknet^data.ntwk^id^cde, 9 ); movl( adnl^trace^id^tkn.trace^id.byte[ 9 ], rvsl.setl^dat, $len( rvsl.setl^dat ) ); movd( adnl^trace^id^tkn.origin, "2" ); if add^adnl^trace^id^tkn = true then begin adnl^tkn^add^lgth := $len( adnl^trace^id^tkn ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^trace^id^tkn, adnl^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1807, ! routing code !, @no^room, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1808, ! routing code !, @err^add^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1808 ); end; end; ! of if tkn^result end; ! of if add^adnl^trace^id^tkn = true #ADD 29828 UTIL^FRMT^INT^PIN^TO^EXT^PIN ?section util^frmt^txn^ref^data^to^sem ?page "util^frmt^txn^ref^data^to^sem" !##################################################################### !# # !# util^frmt^txn^ref^data^to^sem # !# # !# This procedure format DE 108 from P2P Sender Data token (SI), # !# P2P Receiver Data token (SJ), P2P Additional Data token (SK) # !# in the internal message, when a funding transaction or payment # !# transaction is sent to Banknet. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Pstm internal message # !# # !# OUTPUT PARAMETERS: # !# sem - Internal message. # !# # !# RETURN: # !# # !##################################################################### int proc util^frmt^txn^ref^data^to^sem( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin define moneysend^ref^data^d = sem.moneysend^ref^data.info.byte#; int data^idx := 0; int .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); int .p2p^rcv^data^tkn( p2p^rcv^data^tkn^def ); int .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); int processed^tag^lgth; int .pstm( pstm^def ) := @sim; int subelement^lgth; int tkn^lgth; int txtlgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); string tkn^id[ 0:1 ]; string .pan[ 0:18 ] := [ 19 * [" "] ]; string .ptr; ?page "subproc sub^process^addl^data of util^frmt^txn^ref^data^to^sem" !################################################################# !# # !# sub^process^addl^data # !# # !# This subprocedure will format DE 108 SE 03 from the # !# Person-to-Person Additional Data token (SK). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^addl^data; begin processed^tag^lgth := data^idx; data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^id^lgth^l; ! ! Process the tag data from fields in the token. ! if p2p^addl^data^tkn.mc.unique^ref^num <> blanks for $len( p2p^addl^data^tkn.mc.unique^ref^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "01"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^addl^data^tkn.mc.unique^ref^num ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^addl^data^tkn.mc.unique^ref^num for $len( p2p^addl^data^tkn.mc.unique^ref^num ); data^idx := data^idx + $len( p2p^addl^data^tkn.mc.unique^ref^num ); end; if p2p^addl^data^tkn.mc.addl^msg <> blanks for $len( p2p^addl^data^tkn.mc.addl^msg ) then begin moneysend^ref^data^d[ data^idx ] ':=' "02"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^addl^data^tkn.mc.addl^msg while " " -> @ptr; txtlgth := $min( $len( p2p^addl^data^tkn.mc.addl^msg ), $max( 0, ( @ptr '-' @p2p^addl^data^tkn.mc.addl^msg ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^addl^data^tkn.mc.addl^msg for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^addl^data^tkn.mc.fund^src <> blanks for $len( p2p^addl^data^tkn.mc.fund^src ) then begin moneysend^ref^data^d[ data^idx ] ':=' "03"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^addl^data^tkn.mc.fund^src ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^addl^data^tkn.mc.fund^src for $len( p2p^addl^data^tkn.mc.fund^src ); data^idx := data^idx + $len( p2p^addl^data^tkn.mc.fund^src ); end; if p2p^addl^data^tkn.mc.participant^id <> blanks for $len( p2p^addl^data^tkn.mc.participant^id ) then begin moneysend^ref^data^d[ data^idx ] ':=' "04"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^addl^data^tkn.mc.participant^id while " " -> @ptr; txtlgth := $min( $len( p2p^addl^data^tkn.mc. participant^id ), $max( 0, ( @ptr '-' @p2p^addl^data^tkn.mc.participant^id ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^addl^data^tkn.mc.participant^id for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^addl^data^tkn.mc.txn^rsn <> blanks for $len( p2p^addl^data^tkn.mc.txn^rsn ) then begin moneysend^ref^data^d[ data^idx ] ':=' "05"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^addl^data^tkn.mc.txn^rsn ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^addl^data^tkn.mc.txn^rsn for $len( p2p^addl^data^tkn.mc.txn^rsn ); data^idx := data^idx + $len( p2p^addl^data^tkn.mc.txn^rsn ); end; if data^idx > ( processed^tag^lgth + subelement^id^lgth^l + subelement^lgth^fld^lgth^l ) then begin moneysend^ref^data^d[ processed^tag^lgth ] ':=' "03"; subelement^lgth := data^idx - processed^tag^lgth - subelement^lgth^fld^lgth^l - subelement^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ processed^tag^lgth + subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, subelement^lgth ); processed^tag^lgth := data^idx; end; end; ! of subproc sub^process^addl^data ?page "subproc sub^process^rcv^data of util^frmt^txn^ref^data^to^sem" !################################################################# !# # !# sub^process^rcv^data # !# # !# This subprocedure will format format DE 108 SE 01 from the # !# Person-to-Person Receiver Data token (SJ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^rcv^data; begin processed^tag^lgth := data^idx; data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^id^lgth^l; ! ! Process the tag data from fields in the token. ! if p2p^rcv^data^tkn.mc.first^nam <> blanks for $len( p2p^rcv^data^tkn.mc.first^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "01"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.first^nam while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.first^nam ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.first^nam ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.first^nam for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.middle^nam <> blanks for $len( p2p^rcv^data^tkn.mc.middle^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "02"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.middle^nam ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.middle^nam for $len( p2p^rcv^data^tkn.mc.middle^nam ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.middle^nam ); end; if p2p^rcv^data^tkn.mc.last^nam <> blanks for $len( p2p^rcv^data^tkn.mc.last^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "03"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.last^nam while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.last^nam ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.last^nam ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.last^nam for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.street^addr <> blanks for $len( p2p^rcv^data^tkn.mc.street^addr ) then begin moneysend^ref^data^d[ data^idx ] ':=' "04"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.street^addr while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.street^addr ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.street^addr ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.street^addr for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.city <> blanks for $len( p2p^rcv^data^tkn.mc.city ) then begin moneysend^ref^data^d[ data^idx ] ':=' "05"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.city while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.city ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.city ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.city for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.st <> blanks for $len( p2p^rcv^data^tkn.mc.st ) then begin moneysend^ref^data^d[ data^idx ] ':=' "06"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.st while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.st ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.st ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.st for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.cntry <> blanks for $len( p2p^rcv^data^tkn.mc.cntry ) then begin moneysend^ref^data^d[ data^idx ] ':=' "07"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.cntry ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.cntry for $len( p2p^rcv^data^tkn.mc.cntry ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.cntry ); end; if p2p^rcv^data^tkn.mc.postal^cde <> blanks for $len( p2p^rcv^data^tkn.mc.postal^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "08"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.postal^cde while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.postal^cde ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.postal^cde ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.postal^cde for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.phn^num <> blanks for $len( p2p^rcv^data^tkn.mc.phn^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "09"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.phn^num while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.phn^num ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.phn^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.phn^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.dob <> blanks for $len( p2p^rcv^data^tkn.mc.dob ) then begin moneysend^ref^data^d[ data^idx ] ':=' "10"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.dob ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.dob for $len( p2p^rcv^data^tkn.mc.dob ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.dob ); end; if p2p^rcv^data^tkn.mc.acct^num <> blanks for $len( p2p^rcv^data^tkn.mc.acct^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "11"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.acct^num while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.acct^num ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.acct^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.acct^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.id^typ <> blanks for $len( p2p^rcv^data^tkn.mc.id^typ ) then begin moneysend^ref^data^d[ data^idx ] ':=' "12"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.id^typ ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.id^typ for $len( p2p^rcv^data^tkn.mc.id^typ ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.id^typ ); end; if p2p^rcv^data^tkn.mc.id^num <> blanks for $len( p2p^rcv^data^tkn.mc.id^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "13"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^rcv^data^tkn.mc.id^num while " " -> @ptr; txtlgth := $min( $len( p2p^rcv^data^tkn.mc.id^num ), $max( 0, ( @ptr '-' @p2p^rcv^data^tkn.mc.id^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.id^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^rcv^data^tkn.mc.id^cntry^cde <> blanks for $len( p2p^rcv^data^tkn.mc.id^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "14"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.id^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.id^cntry^cde for $len( p2p^rcv^data^tkn.mc.id^cntry^cde ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.id^cntry^cde ); end; if p2p^rcv^data^tkn.mc.id^exp^dat <> blanks for $len( p2p^rcv^data^tkn.mc.id^exp^dat ) then begin moneysend^ref^data^d[ data^idx ] ':=' "15"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.id^exp^dat ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.id^exp^dat for $len( p2p^rcv^data^tkn.mc.id^exp^dat ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.id^exp^dat ); end; if p2p^rcv^data^tkn.mc.natl^cntry^cde <> blanks for $len( p2p^rcv^data^tkn.mc.natl^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "16"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.natl^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.natl^cntry^cde for $len( p2p^rcv^data^tkn.mc.natl^cntry^cde ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.natl^cntry^cde ); end; if p2p^rcv^data^tkn.mc.birth^cntry^cde <> blanks for $len( p2p^rcv^data^tkn.mc.birth^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "17"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^rcv^data^tkn.mc.birth^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^rcv^data^tkn.mc.birth^cntry^cde for $len( p2p^rcv^data^tkn.mc.birth^cntry^cde ); data^idx := data^idx + $len( p2p^rcv^data^tkn.mc.birth^cntry^cde ); end; if data^idx > ( processed^tag^lgth + subelement^id^lgth^l + subelement^lgth^fld^lgth^l ) then begin moneysend^ref^data^d[ processed^tag^lgth ] ':=' "01"; subelement^lgth := data^idx - processed^tag^lgth - subelement^lgth^fld^lgth^l - subelement^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ processed^tag^lgth + subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, subelement^lgth ); processed^tag^lgth := data^idx; end; end; ! of subproc sub^process^rcv^data ?page "subproc sub^process^sender^data of util^frmt^txn^ref^data^to^sem" !################################################################# !# # !# sub^process^sender^data # !# # !# This subprocedure will format DE 108 SE 02 from the # !# Person-to-Person Sender Data token (SI). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !################################################################# subproc sub^process^sender^data; begin processed^tag^lgth := data^idx; data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^id^lgth^l; ! ! Process the tag data from fields in the token. ! if p2p^sender^data^tkn.mc.first^nam <> blanks for $len( p2p^sender^data^tkn.mc.first^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "01"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.first^nam while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.first^nam ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.first^nam ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.first^nam for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.middle^nam <> blanks for $len( p2p^sender^data^tkn.mc.middle^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "02"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.middle^nam ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.middle^nam for $len( p2p^sender^data^tkn.mc.middle^nam ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.middle^nam ); end; if p2p^sender^data^tkn.mc.last^nam <> blanks for $len( p2p^sender^data^tkn.mc.last^nam ) then begin moneysend^ref^data^d[ data^idx ] ':=' "03"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.last^nam while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.last^nam ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.last^nam ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.last^nam for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.street^addr <> blanks for $len( p2p^sender^data^tkn.mc.street^addr ) then begin moneysend^ref^data^d[ data^idx ] ':=' "04"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.street^addr while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc. street^addr ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc. street^addr ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.street^addr for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.city <> blanks for $len( p2p^sender^data^tkn.mc.city ) then begin moneysend^ref^data^d[ data^idx ] ':=' "05"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.city while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.city ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.city ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.city for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.st <> blanks for $len( p2p^sender^data^tkn.mc.st ) then begin moneysend^ref^data^d[ data^idx ] ':=' "06"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.st while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.st ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.st ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.st for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.cntry <> blanks for $len( p2p^sender^data^tkn.mc.cntry ) then begin moneysend^ref^data^d[ data^idx ] ':=' "07"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.cntry ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.cntry for $len( p2p^sender^data^tkn.mc.cntry ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.cntry ); end; if p2p^sender^data^tkn.mc.postal^cde <> blanks for $len( p2p^sender^data^tkn.mc.postal^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "08"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.postal^cde while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc. postal^cde ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.postal^cde ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.postal^cde for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.phn^num <> blanks for $len( p2p^sender^data^tkn.mc.phn^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "09"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.phn^num while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.phn^num ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.phn^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.phn^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.dob <> blanks for $len( p2p^sender^data^tkn.mc.dob ) then begin moneysend^ref^data^d[ data^idx ] ':=' "10"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.dob ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.dob for $len( p2p^sender^data^tkn.mc.dob ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.dob ); end; if p2p^sender^data^tkn.mc.acct^num <> blanks for $len( p2p^sender^data^tkn.mc.acct^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "11"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.acct^num while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.acct^num ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.acct^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.acct^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.id^typ <> blanks for $len( p2p^sender^data^tkn.mc.id^typ ) then begin moneysend^ref^data^d[ data^idx ] ':=' "12"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.id^typ ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.id^typ for $len( p2p^sender^data^tkn.mc.id^typ ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.id^typ ); end; if p2p^sender^data^tkn.mc.id^num <> blanks for $len( p2p^sender^data^tkn.mc.id^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "13"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^sender^data^tkn.mc.id^num while " " -> @ptr; txtlgth := $min( $len( p2p^sender^data^tkn.mc.id^num ), $max( 0, ( @ptr '-' @p2p^sender^data^tkn.mc.id^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.id^num for txtlgth; data^idx := data^idx + txtlgth; end; if p2p^sender^data^tkn.mc.id^cntry^cde <> blanks for $len( p2p^sender^data^tkn.mc.id^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "14"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.id^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.id^cntry^cde for $len( p2p^sender^data^tkn.mc.id^cntry^cde ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.id^cntry^cde ); end; if p2p^sender^data^tkn.mc.id^exp^dat <> blanks for $len( p2p^sender^data^tkn.mc.id^exp^dat ) then begin moneysend^ref^data^d[ data^idx ] ':=' "15"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.id^exp^dat ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.id^exp^dat for $len( p2p^sender^data^tkn.mc.id^exp^dat ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.id^exp^dat ); end; if p2p^sender^data^tkn.mc.natl^cntry^cde <> blanks for $len( p2p^sender^data^tkn.mc.natl^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "16"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.natl^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.natl^cntry^cde for $len( p2p^sender^data^tkn.mc.natl^cntry^cde ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.natl^cntry^cde ); end; if p2p^sender^data^tkn.mc.birth^cntry^cde <> blanks for $len( p2p^sender^data^tkn.mc.birth^cntry^cde ) then begin moneysend^ref^data^d[ data^idx ] ':=' "17"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^sender^data^tkn.mc.birth^cntry^cde ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^sender^data^tkn.mc.birth^cntry^cde for $len( p2p^sender^data^tkn.mc.birth^cntry^cde ); data^idx := data^idx + $len( p2p^sender^data^tkn.mc.birth^cntry^cde ); end; if data^idx > ( processed^tag^lgth + subelement^id^lgth^l + subelement^lgth^fld^lgth^l ) then begin moneysend^ref^data^d[ processed^tag^lgth ] ':=' "02"; subelement^lgth := data^idx - processed^tag^lgth - subelement^lgth^fld^lgth^l - subelement^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ processed^tag^lgth + subelement^id^lgth^l ], subelement^lgth^fld^lgth^l, subelement^lgth ); processed^tag^lgth := data^idx; end; end; ! of subproc sub^process^sender^data ?page "util^add^moneysend^tkns" !################################################################# !# # !# This is the main body of PROC util^add^moneysend^tkns # !# # !################################################################# if not $param( sem ) or not $param( sim ) then begin call abend^( 1777 ); end; if base24^rel^g >= 5 then begin tkn^id ':=' p2p^rcv^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data^tkn, tkn^lgth ) and p2p^rcv^data^tkn.frmt^cde = "01" then begin call sub^process^rcv^data; end; tkn^id ':=' p2p^sender^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data^tkn, tkn^lgth ) and p2p^sender^data^tkn.frmt^cde = "01" then begin call sub^process^sender^data; end; tkn^id ':=' p2p^addl^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^tkn, tkn^lgth ) and p2p^addl^data^tkn.frmt^cde = "01" then begin call sub^process^addl^data; end; end; ! of base24^rel^g >= 5 if sem.moneysend^ref^data.info.byte[ 0 ] = " " and sem^moneysend^d( sem ) then begin return false; end; if sem.moneysend^ref^data.info.byte[ 0 ] <> " " then begin moneysend^ref^data^bit^d := 1; call integer^ascii^( sem.moneysend^ref^data.lgth, data^idx ); end; return true; end; ! of proc util^frmt^txn^ref^data^to^sem #ENDSCN = SW0N188 !#CMP2.28 09/03/19 BNETS 6145 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6145 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6145 * ******************************************************************************** #SCN = SW0N189 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6145 #NEWVERSION = 6146 #ADD 03821s0H ! 28AUG2019 GadiA ! Symptom: Banknet Release 19.Q4 Functional Enhancements. ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2615 - Enhancements to Mastercard Funds Transfer ! Transaction Processing and MoneySend Program ! AN 2620 - Introduction of Digital Payment Data ! AN 2628 - High-Risk Purchase Identifier Enhancement ! AN 2630 - Use of Trace ID to Support PSD2 Recurring ! Payment Requirements ! AN 2639 - Enhancement to SPA2 AAV Verification ! AN 2643 - Authorization of Purchase Returns ! AN 2645 - Enhancement to Low-Risk Transaction Indicator ! AN 2697 - Revised Standards-Electronic Commerce ! Transactions at Automated Fuel Dispensers ! AN 2723 - Revised Standards-Europe Region PSD2 RTS ! Compliance for Remote Electronic Transactions ! Case #02929452 - Regarding Mastercard Data Integrity ! for Invalid Response Code for CVV2 failure ! Procs Modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009103 #ADD 10428j02 INIT^BNET^G bnet^g.sppt^sca^g := false; #ADD 12676j02 INIT^PARAMPROC "P", "SW-BNET-SUPPORT-SCA ", #ADD 13501j0Z INIT^PARAMPROC ! ! SW-BNET-SUPPORT-SCA ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin bnet^g.sppt^sca^g := true; end else begin bnet^g.sppt^sca^g := false; end; end; #ENDSCN = SW0N189 !#CMP2.28 09/04/19 BNETLIBS62123FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62123 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62123 * ******************************************************************************** #SCN = SW0N200 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62123 #NEWVERSION = 62124 #ADD l078500e ! 05SEP2019 wielerk ! Symptom: MasterCard denies 0120 messages with format error ! response code. ! Problem: DE-48.SE-63 ( addl data.trc id ) is added to the length ! of DE-48 twice when formatting the 0120 completion. ! Fix: Modified code to format DE-48.SE-63 only if it is not ! present when formatting 0120 messages. ! Proc Modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2946461. #ADD 11251X00 PSTM^FRMT^0220^TO^XADV if sem.addl^data.info.trc^id^sub^fld^63.tag = " " then begin call ascii^integer^( sem.addl^data.lgth, de48^lgth ); movd( sem.addl^data.info.trc^id^sub^fld^63.tag, "63" ); movd( sem.addl^data.info.trc^id^sub^fld^63.lgth, "15" ); movl( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num, sem.banknet^data.ntwk^id^cde, $len( sem.banknet^data.ntwk^id^cde ) ); movl( sem.addl^data.info.trc^id^sub^fld^63. bnet^ref^num.byte[ 3 ], sem.banknet^data.ref^num, 6 ); movl( sem.addl^data.info.trc^id^sub^fld^63.dat^setl, sem.setl^dat, $len( sem.setl^dat ) ); de48^lgth := de48^lgth + $len( sem.addl^data.info.trc^id^sub^fld^63 ); call integer^ascii^( sem.addl^data.lgth, de48^lgth ); end; #DELETE 11251X01/11251X0F PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0N200 !#CMP2.28 09/12/19 BNETLIBS62124FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62124 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62124 * ******************************************************************************** #SCN = SW0N219 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62124 #NEWVERSION = 62125 #ADD m078500D ! 12SEP2019 jayaprm ! Symptom: MasterCard DE48 SE01 (TCC) Debt Repayment ! Problem: Interface didn't support the part of Oct 2017 mandate ! to set DE48 SE01 Transaction Category Code to "U" for ! United Kingdom region when the SIC code is 6012. ! Fix: Modified code to set DE48 SE01 TCC with the value of ! "U" when the SIC code is 6012 for United Kingdom region. ! Proc Modified: pstm^frmt^natl^data^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2950511. #ADD H129550C PSTM^FRMT^NATL^DATA^TO^SEM if sem.merch^typ = merchandise^and^services^d then begin movd( sem.addl^data.info.tran^cat^cde, "U" ); end; #ENDSCN = SW0N219 !#CMP2.28 09/16/19 BNETLIBS62125FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62125 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62125 * ******************************************************************************** #SCN = SW0N230 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62125 #NEWVERSION = 62126 #ADD n078500D ! 13SEP2019 jayaprm ! Symptom: Issue with SW token ! Problem: SW token is added to the transaction even if it is empty ! Fix: Modified code to add SW token only if DE 48 SE 63 ! is present. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2954762. #REPLACE l2104502 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then #DELETE l210450L/l210450M SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0N230 !#CMP2.28 09/24/19 BNETLIBS62126FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62126 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62126 * ******************************************************************************** #SCN = SW0N233 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62126 #NEWVERSION = 62127 #ADD o078500B ! 23SEP2019 VulliL ! Symptom: SCA checks are not mapped in BNET. ! Problem: The interface does not map pstm.pt^srv^cond^cde values ! "02" and "27" in inbound message processing. The values ! are used to determine SCA exemption. ! Fix: Modified code to set pstm.pt^srv^cond^cde to "02"/"27" ! based on the contents of DE 61.1 and DE 61.6. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2958117. #ADD 21958 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.ntl^pos^data.cond^cde.byte[ 0 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 5 ] = "1" then begin ! ! Unattended terminal, home PC, mobile phone, PDA ! Terminal/operator has card capture capability ! movd ( pstm.pt^srv^cond^cde, "02" ); end else if sem.ntl^pos^data.cond^cde.byte[ 0 ] = "1" and sem.ntl^pos^data.cond^cde.byte[ 5 ] = "0" then begin ! ! Unattended terminal, home PC, mobile phone, PDA ! Terminal/operator does not have card capture capability ! movd ( pstm.pt^srv^cond^cde, "27" ); end else #ENDSCN = SW0N233 !#CMP2.28 09/27/19 BNETLIBS62127FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62127 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62127 * ******************************************************************************** #SCN = SW0N236 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62127 #NEWVERSION = 62128 #ADD p078500D ! 27SEP2019 wielerk ! Symptom: Interface abends processing unmatched external reversal. ! Problem: When adding the adnl^trace^id^tkn, an incorrect param ! is passed to tkn^add^info. The error handling of a ! token error was also incorrect. ! Fix: Modified code to pass the correct param. ! Modified code to bypass error handling if token is ! present. ! Proc Modified: sem^frmt^unmatchd^xrvsl^to^pstm ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2959988. #DELETE l1808102 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #REPLACE l180980j SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM adnl^add^lgth, #ADD l180980p SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1803, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @rvsl.pan.num, @pstm.seq^num, @rvsl.banknet^data.ref^num, @rvsl.setl^dat ); end else begin call log^message^( 1804, ! routing code !, @err^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @rvsl.pan.num, @pstm.seq^num, @rvsl.banknet^data.ref^num, @rvsl.setl^dat, tkn^result ); call abend^( 1804 ); end; end; ! of tkn error #DELETE l180980q/l180981J SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM #ENDSCN = SW0N236 !#CMP2.28 10/01/19 BNETLIBS62128FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62128 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62128 * ******************************************************************************** #SCN = SW0N239 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62128 #NEWVERSION = 62129 #ADD q078500E ! 30SEP2019 jayaprm ! Symptom: MDES testing: CVV verification failed ! Problem: If DE48 SE71 SF02 have value "H", then transaction is ! declined as CVV verification failed. ! Fix: Modified the code to set the card^vrfy^flg to "Y" when ! DE48 SE71 SF02 contains value "H" (CVD Match - Invalid ! Time Validation). ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2952903. #REPLACE 22449|0P SEM^FRMT^XRQST^TO^PSTM^0200 ! CVD Match - Invalid Time Validation ! #REPLACE 22449|0R SEM^FRMT^XRQST^TO^PSTM^0200 movd( card^vrfy^flg, "Y" ); #ENDSCN = SW0N239 !#CMP2.28 12/05/19 BNETG 60115FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60115 * ******************************************************************************** #SCN = SW0N279 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d000260j ! 05DEC2019 jayaprm ! Symptom: Banknet AMLD5 Support ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2625 - Identification of Anonymous Prepaid Cards ! Added global variable num^blocked^crd^tbl^g ! Added new array bnet^array^def ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETG, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETUPDT ! Reference: Case #2965411 #ADD I0043502 int num^blocked^crd^tbl^g; #ADD I0043505 string blocked^crd^tbl^g[ 0:69 ]; #ENDSCN = SW0N279 !#CMP2.28 12/05/19 BNETS 6146 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6146 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6146 * ******************************************************************************** #SCN = SW0N280 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6146 #NEWVERSION = 6147 #ADD 03821t0V ! 05DEC2019 jayaprm ! Symptom: Banknet AMLD5 Support ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2625 - Identification of Anonymous Prepaid Cards ! Procs modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETG, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD ! Reference: Case #2965411 #ADD 10428b04 INIT^BNET^G bnet^g.num^blocked^crd^tbl^g:= 1; #ADD 10428b06 INIT^BNET^G bnet^array^g.blocked^crd^tbl^g ':=' [ 70 * [ " " ] ]; bnet^array^g.blocked^crd^tbl^g ':=' [ "00" ]; #REPLACE 12676b02 INIT^PARAMPROC "P", "SWI-ATM-BLOCKED-CARD-TYPES ", #ADD 13501t0F INIT^PARAMPROC ! ! SWI-ATM-BLOCKED-CARD-TYPES ! if not ferror then begin call util^build^blocked^crd^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; #ENDSCN = SW0N280 !#CMP2.28 12/05/19 BNETD 6007 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETD BNETD 6007 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETD BNETD 6007 * ******************************************************************************** #SCN = SW0N288 , FILEID = BNETD #VOLUME = $ROOK.SW60BNET #FILE = BNETD #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00043G0M ! 06DEC2019 jayaprm ! Symptom: Banknet AMLD5 Support ! Problem: None ! Fix: Modified the interface in support of the following: ! AN 2625 - Identification of Anonymous Prepaid Cards ! Proc Added: util^build^blocked^crd^tbl ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETD, BNETG, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD ! Reference: Case #2965411 #ADD 00254C01 STM^FRMT^B24^TKN^TO^XRQST^EMV ?section util^build^blocked^crd^tbl ?page "util^build^blocked^crd^tbl" !##################################################################### !# # !# util^build^blocked^crd^tbl # !# # !# This procedure builds the internal memory to hold the card types # !# configured in the LCONF parameter SWI-ATM-BLOCKED-CARD-TYPES. # !# # !# INPUT PARAMETERS: # !# card^list - Pointer to the lconf parameter # !# SWI-ATM-BLOCKED-CARD-TYPES. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^build^blocked^crd^tbl( card^list, list^lgth ); string .card^list; int list^lgth; begin return; ! do nothing, dummy proc. end; ! of proc util^build^blocked^crd^tbl #ENDSCN = SW0N288 !#CMP2.28 12/05/19 BNETG 60116FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60116 * ******************************************************************************** #SCN = SW0N290 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e000260F ! 06DEC2019 jayaprm ! Symptom: Issue with fix of Case #2965411 ! Problem: BNETD file was missing in the dependency list. ! BNETUPDT is not needed. ! Fix: Added BNETD in the dependency file list. ! BNETUPDT file removed from list and added BNETMNWD. ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETD, BNETG, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD ! Reference: Case #2965411 #ENDSCN = SW0N290 !#CMP2.28 12/05/19 BNETS 6147 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6147 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6147 * ******************************************************************************** #SCN = SW0N291 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6147 #NEWVERSION = 6148 #ADD 03821u0F ! 06DEC2019 jayaprm ! Symptom: Issue with fix of Case #2965411 ! Problem: BNETD file was missing in the dependency list. ! Fix: Added BNETD in the dependency file list ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETD, BNETG, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD ! Reference: Case #2965411 #ENDSCN = SW0N291 !#CMP2.28 12/20/19 BNETLIBS62129FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62129 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62129 * ******************************************************************************** #SCN = SW0N307 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62129 #NEWVERSION = 62130 #ADD r078500D ! 20DEC2019 VulliL ! Symptom: AN-2121 - MasterCard non-compliance detected, sending ! wrong response code. ! Problem: Response code "57" is not allowed to be sent to MC in a ! refund authorization response. ! Fix: Modified the interface to ensure that response code ! value "57" is not returned to Mastercard in a response ! to a refund authorization. ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #2992245. #ADD l1330401 PSTM^FRMT^RESP^CDE^TO^SEM ( sem.resp^cde = "51" or sem.resp^cde = "57" ) then #DELETE l1330402 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0N307 !#CMP2.28 12/23/19 BNETDDLS6069 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6069 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6069 * ******************************************************************************** #SCN = SW0N308 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00262^0V * 23DEC2019 wielerk * Symptom: Interface emits EMS message #3020 identifying EMV tags * that are unrecognized. * Problem: There are 3 tags which are currently not processed by * the interface that should be. * 5F34 - Application Primary Account Nbr.(PAN)Seq. Nbr * 9F0A - Application Selection Registered Prop. data * 9F6E - Third Party data * Fix: Added definitions to the SEM for the new tags. * Dependency: Apply fixes to: * SW60BNET - BNETDDLS, BNETG. * SW60INBT - BNETEMVS. * Run Make. * Reference: Case #2984996. #ADD 01411b85 SEM * * stuff * * * * Optional in the 0100 Authorization Request Message 06 pan-seq-num. * tag = 5F34 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x. * * stuff * * * * Optional in the 0100 Authorization Request Message 06 appl-sel-reg-prp-data. * tag = 9F0A 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(255). * * stuff * * * * Optional in the 0100 Authorization Request Message 06 third-party-data. * tag = 9F6E 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(32). #ENDSCN = SW0N308 !#CMP2.28 12/23/19 BNETG 60117FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60117 * ******************************************************************************** #SCN = SW0N309 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f000260E ! 23DEC2019 wielerk ! Symptom: Interface emits EMS message #3020 identifying EMV tags ! that are unrecognized. ! Problem: There are 3 tags which are currently not processed by ! the interface that should be. ! 5F34 - Application Primary Account Nbr.(PAN)Seq. Nbr ! 9F0A - Application Selection Registered Prop. data ! 9F6E - Third Party data ! Fix: Added defines to process the new tag, 9F0A. ! defines exist for 5F34 and 9F6E. ! Dependency: Apply fixes to: ! SW60BNET - BNETDDLS, BNETG. ! SW60INBT - BNETEMVS. ! Run Make. ! Reference: Case #2984996. #ADD 01366O2B tag^appl^sel^reg^prp^d = [ %h9F, %h0A ]#, #ENDSCN = SW0N309 !#CMP2.28 12/31/19 BNETLIBS62130FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62130 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62130 * ******************************************************************************** #SCN = SW0N312 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62130 #NEWVERSION = 62131 #ADD s078500E ! 26DEC2019 wielerk ! Symptom: Interface does not update token 20 from DE-63 ( banknet ! data ) for the original of a recurring sequence. ! Problem: When processing a 0110 the interface updates the trace ! id in the Compliance token for pre-auth completions. ! This needs to be done for recurring transactions also. ! Fix: Modified code to add the Adnl^Trace^id^tkn when the ! Compliance token is updated to provide DE-63 from ! the 0110 for incremental responses. ! Added EMS messages #1861 and #1866. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Replace file BNETLOGM. ! Run Make. ! Reference: Case #2997160. #ADD 18414908 SEM^FRMT^XRESP^TO^PSTM^0210 struct .adnl^trace^id^tkn( adnl^trace^id^tkn^def ); #REPLACE 19190 /19190 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' adnl^trace^id^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, adnl^trace^id^tkn ); if sem^incr^auth^d( rqst ) then begin movd( adnl^trace^id^tkn.origin, "2" ); movl( adnl^trace^id^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( adnl^trace^id^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); end else begin movd( adnl^trace^id^tkn.origin, "1" ); move( adnl^trace^id^tkn.trace^id, compliance^get^tkn.trace^id ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, adnl^trace^id^tkn, $len( compliance^tkn ), ! max^tkn^buf^lgth! , tkn^lgth, dspy, !ebcdic^flg!, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1861, !routing code!, @noroom^tkn, net.myname, 2, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1866, !routing code!, @err^tkn, net.myname, 3, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1866 ); end; ! of tkn^result end; ! of tkn^result no error #REPLACE 19203 /19203 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 end else if not sem^incr^auth^d( rqst ) then begin movd( compliance^get^tkn.valid^cde, "2" ); compliance^get^tkn.trace^id ':=' [ $len( compliance^get^tkn.trace^id ) * [" "] ]; compliance^get^tkn.life^cycle^ind ':=' [ $len( compliance^get^tkn.life^cycle^ind ) * [" "] ]; movl( compliance^get^tkn.trace^id, sem.banknet^data.ntwk^id^cde, 9 ); movl( compliance^get^tkn.trace^id.byte[ 9 ], sem.setl^dat, $len( sem.setl^dat ) ); end; ! of tran not sent as pre-auth #ADD 19214 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' ichg^compliance^tkn^id^d; #ENDSCN = SW0N312 !#CMP2.28 01/15/20 BNETLIBS62131FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62131 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62131 * ******************************************************************************** #SCN = SW0O007 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62131 #NEWVERSION = 62132 #ADD t078500H ! 15JAN2020 wielerk ! Symptom: Interface incorrectly uses a default value in DE-63 ! ( banknet data ) when formatting initial COF trans. ! Problem: When processing an initial COF transaction, the ! interface was modified to send a default tran id in ! DE-63. This should only apply to SCA traffic. ! Fix: Modified code to add an edit for bnet^g.sppt^sca^g ! to determine if the default trace data should be ! sent. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3018239. #ADD l1389502 PSTM^FRMT^SEM^ADDL^DATA if bnet^g.sppt^sca^g and pos^data1^tkn^fnd and #DELETE l1389503 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0O007 !#CMP2.28 02/13/20 BNETDDLS6070 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6070 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6070 * ******************************************************************************** #SCN = SW0O030 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00262`0F * 13FEB2020 velsamv * Symptom: Banknet Release 20.Q2 Functional Enhancements * Problem: None * Fix: Modified the interface in support for the below * requirement * AN 2941 - Digital Remote Commerce Enhancements * Modified structure of field 104 DGTL-PMNT-DATA to * include EST-AMT and MRCH-ID sub structures. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009172 #ADD 01411^0B SEM 04 est-amt. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(12). 04 mrch-id. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(150). #ENDSCN = SW0O030 !#CMP2.28 02/13/20 BNETG 60118FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60118 * ******************************************************************************** #SCN = SW0O031 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g000260G ! 13FEB2020 velsamv ! Symptom: Banknet Release 20.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements ! AN 2941 - Digital Remote Commerce Enhancements ! Case #03006635 - Redundant 100 bytes of global ! declaration ! Sourced in definition dgtl^pmnt^authn^tkn and ! dgtl^remt^pmnt^tkn from BADDLTAL ! Removed string variable asterisks of 100 bytes. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009172 #ADD Z000260R ?nolist, source =basrc_baddltal( ? dgtl^pmnt^authn^tkn ? dgtl^remt^pmnt^tkn ? ) ?list ! dgtl^pmnt^authn^tkn ! dgtl^remt^pmnt^tkn ! ) #ADD 00498G00 string .blanks[ 0:99 ] := [ 100 * [" "] ], #DELETE 00498G01/00498G02 #ENDSCN = SW0O031 !#CMP2.28 02/13/20 BNETLIBS62132FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62132 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62132 * ******************************************************************************** #SCN = SW0O032 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62132 #NEWVERSION = 62133 #ADD u078500F ! 13FEB2020 velsamv ! Symptom: Banknet Release 20.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements ! AN 2941 - Digital Remote Commerce Enhancements ! AN 3405 - Revised Standards-Online Gambling ! Transactions ! Case #02878953 - Enhancement to Support Additional ! Merchant Data ! Case #02967239 - AAV in DGTL-PMNT-DATA of AUTHN-DATA ! token too short ! Case #02974138 - POS Entry Mode for credential on file ! transactions initiated by cardholder ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009172 #ADD 08747 PSTM^FRMT^0200^TO^XRQST int done; #ADD 08748 PSTM^FRMT^0200^TO^XRQST int .dgtl^pmnt^authn^tkn( dgtl^pmnt^authn^tkn^def ); int dgtl^pmnt^authn^tkn^lgth := 0; int .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); int dgtl^remt^pmnt^tkn^lgth := 0; int fnd^dgtl^pmnt^authn^tkn := false; int fnd^dgtl^remt^pmnt^tkn := false; #ADD 08786 PSTM^FRMT^0200^TO^XRQST string .tag^id[ 0:2 ]; #ADD 10020 SUB^LOG^ERROR sem.merch^typ = "9406" or sem.merch^typ = "7800" or #DELETE 10020s00 SUB^LOG^ERROR #ADD 10022 SUB^LOG^ERROR ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" or #DELETE 10023 SUB^LOG^ERROR #DELETE 10026s00/10026s02 SUB^LOG^ERROR #ADD 10026O05 SUB^LOG^ERROR ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec <> "214" or sem.addl^data.info.authn^data^sub^fld^66.ds^txn^id. tag^data = [ $len( sem.addl^data.info. authn^data^sub^fld^66.ds^txn^id. tag^data ) * [" "] ] ) and #ADD 10138 SUB^LOG^ERROR lgth := 0; if base24^rel^g >= 5 then begin tkn^id ':=' dgtl^pmnt^authn^tkn^id^d; fnd^dgtl^pmnt^authn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^pmnt^authn^tkn, dgtl^pmnt^authn^tkn^lgth ); tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; fnd^dgtl^remt^pmnt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^remt^pmnt^tkn, dgtl^remt^pmnt^tkn^lgth ); end; if ( fnd^dgtl^pmnt^authn^tkn and dgtl^pmnt^authn^tkn.frmt^cde = "00" and dgtl^pmnt^authn^tkn.genrc.crypto^frmt = "2" ) then begin sem.dgtl^pmnt^data.crypto.tag ':=' "001"; sem.dgtl^pmnt^data.crypto.lgth':=' "028"; call ascii^integer^( sem.dgtl^pmnt^data.crypto.lgth, lgth ); sem.dgtl^pmnt^data.crypto.tag^data ':=' dgtl^pmnt^authn^tkn.genrc.crypto for lgth; lgth := lgth + 3 + 3; end; if ( lgth > 0 and fnd^dgtl^remt^pmnt^tkn and ( dgtl^remt^pmnt^tkn.frmt^cde = "00" or dgtl^remt^pmnt^tkn.frmt^cde = "01" ) ) then begin if dgtl^remt^pmnt^tkn.frmt^cde = "00" then begin done := false; idx := 0; de^lgth := 0; tag^lgth := 0; ascii^integer^( dgtl^remt^pmnt^tkn.lgth, tag^lgth ); while idx < tag^lgth and not done do begin movl( tag^id, dgtl^remt^pmnt^tkn.genrc.byte[ idx ], 3 ); idx := idx + 3; if ascii^integer( dgtl^remt^pmnt^tkn.genrc. byte[ idx ], 3, de^lgth ) then begin idx := idx + 3; if tag^id = "003" then begin done := true; movl( sem.dgtl^pmnt^data.mrch^id.tag, tag^id, $len( sem.dgtl^pmnt^data.mrch^id. tag ) ); integer^ascii^( sem.dgtl^pmnt^data.mrch^id. lgth, de^lgth ); movl( sem.dgtl^pmnt^data.mrch^id.tag^data, dgtl^remt^pmnt^tkn.genrc.byte[ idx ], de^lgth ); lgth := lgth + de^lgth + 3 + 3; end else begin idx := idx + de^lgth; end; end else begin done := true; end; end; end else if dgtl^remt^pmnt^tkn.frmt^cde = "01" then begin movd( sem.dgtl^pmnt^data.mrch^id.tag, "003" ); movl( sem.dgtl^pmnt^data.mrch^id.lgth, dgtl^remt^pmnt^tkn.lgth, $len( sem.dgtl^pmnt^data.mrch^id.lgth ) ); call ascii^integer^( sem.dgtl^pmnt^data.mrch^id.lgth, de^lgth ); movl( sem.dgtl^pmnt^data.mrch^id.tag^data, dgtl^remt^pmnt^tkn.mc.mrch^id, de^lgth ); lgth := lgth + de^lgth + 3 + 3; end; end; if lgth > 0 then begin call integer^ascii^( sem.dgtl^pmnt^data.lgth, lgth ); dgtl^pmnt^data^bit^d := 1; end; #ADD 13785 PSTM^FRMT^SEM^ADDL^DATA if not visa_tran_g then #DELETE 13786 /13792 PSTM^FRMT^SEM^ADDL^DATA #ADD 14428y06 PSTM^FRMT^SEM^ADDL^DATA authn^data^tkn.authn^ind^flg = "01" and #ADD 14428j18 PSTM^FRMT^SEM^ADDL^DATA if authn^data^tkn^lgth > 2 and authn^data^tkn.authn^ind^flg = "04" and authn^data^tkn.dgtl^pmnt^data.aav <> blanks for $len( authn^data^tkn. dgtl^pmnt^data.aav ) and authn^data^tkn.dgtl^pmnt^data.aav <> zeroes for $len( authn^data^tkn. dgtl^pmnt^data.aav ) then begin movd( sem.addl^data.info. ucaf^sub^fld^43.tag, "43" ); ! ! ! If the length of the token's AAV is less! ! than or equal to 28, move the token's ! ! UCAF data into the SE 43's TAG^DATA ! ! field for that length. Otherwise, move ! ! the data for the maximum of 28 bytes ! ! bytes. Set SE 43's length field ! ! accordingly. ! ! ! data^lgth := $max( 0, ( authn^data^tkn^lgth - $len( authn^data^tkn. authn^ind^flg ) ) ); data^lgth := $min( data^lgth, $len( authn^data^tkn. dgtl^pmnt^data.aav ) ); while authn^data^tkn.dgtl^pmnt^data.aav. byte[ data^lgth - 1 ] = " " and data^lgth > 0 do begin data^lgth := data^lgth - 1; end; if data^lgth <= 28 then begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43. lgth, data^lgth ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn.dgtl^pmnt^data. aav, data^lgth ); end else begin integer^ascii^( sem.addl^data.info. ucaf^sub^fld^43. lgth, $len( authn^data^tkn. dgtl^pmnt^data. aav ) ); movl( sem.addl^data.info. ucaf^sub^fld^43.tag^data, authn^data^tkn. dgtl^pmnt^data.aav, $len( authn^data^tkn. dgtl^pmnt^data.aav ) ); end; call ascii^integer( sem.addl^data.info. ucaf^sub^fld^43. lgth, 2, sub^lgth ); lgth := lgth + sub^lgth + 4; end else #ADD 14930v08 PSTM^FRMT^SEM^ADDL^DATA ! then use it or the STF to populate DE 48 SE 37 ! #DELETE 14930v09 PSTM^FRMT^SEM^ADDL^DATA #ADD 14930v0C PSTM^FRMT^SEM^ADDL^DATA call pstm^frmt^stf^prikey( pstm, stf ); if util^stf^get( stf ) and stf.alt^mrch^id <> [ $len( stf.alt^mrch^id ) * [" "] ] and stf.alt^term^id <> [ $len( stf.alt^term^id ) * [" "] ] and ( pstm.term^owner^name.byte[ 3 ] = "*" or pstm.term^owner^name.byte[ 7 ] = "*" or pstm.term^owner^name.byte[ 12 ] = "*" ) and not visa_tran_g then begin i := -1; while ( i := i + 1 ) < 11 and stf.alt^mrch^id.byte[ i ] <> " " and term^id^numeric do begin if not $numeric( stf.alt^mrch^id.byte[ i ] ) then begin term^id^numeric := false; end; end; if i > 0 and term^id^numeric then begin swi^term^id ':=' stf.alt^mrch^id for i; movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag, "37" ); call hiswutil^justify^field( sem.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data, $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. pmnt^facilitator^id. tag^data ), swi^term^id, $occurs( swi^term^id ), right^justify^l ); move( sem.addl^data.info. adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data, stf.alt^term^id ); end; end; if swi^term^id = blanks for $occurs( swi^term^id ) and adnl^mrch^data^tkn^fnd and #DELETE 14930v0D PSTM^FRMT^SEM^ADDL^DATA #ADD 14930v0Z PSTM^FRMT^SEM^ADDL^DATA move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data, adnl^mrch^data^tkn.pmnt^facilitator^id ); move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data, adnl^mrch^data^tkn.sub^mrch^id ); end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37. tag = "37" then begin #DELETE 14930v0h/14930v0l PSTM^FRMT^SEM^ADDL^DATA #DELETE 14930v0t/14930v0x PSTM^FRMT^SEM^ADDL^DATA #ADD 14930v18 PSTM^FRMT^SEM^ADDL^DATA end; ! of if tag = "37" ! #DELETE 14930v19 PSTM^FRMT^SEM^ADDL^DATA #ADD 14930v1A PSTM^FRMT^SEM^ADDL^DATA if util^stf^get( stf ) and stf.swi^term.id <> [ $len( stf.swi^term.id ) * [" "] ] and not visa_tran_g then begin swi^term^id ':=' blanks for $occurs( swi^term^id ); term^id^numeric := true; i := -1; while ( i := i + 1 ) < 11 and stf.swi^term.id.byte[ i ] <> " " and term^id^numeric do begin if not $numeric( stf.swi^term.id.byte[ i ] ) then begin term^id^numeric := false; end; end; if i > 0 and term^id^numeric then begin swi^term^id ':=' stf.swi^term.id for i; movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag, "37" ); call hiswutil^justify^field( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data, $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id. tag^data ), swi^term^id, $occurs( swi^term^id ), right^justify^l ); if pstm.crd^accpt^id^num = $len( pstm.crd^accpt^id^num ) * [ " " ] or pstm.crd^accpt^id^num = $len( pstm.crd^accpt^id^num ) * [ "0" ] then begin movl( pstm.crd^accpt^id^num, sem.addl^data.info. adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data, $len( pstm.crd^accpt^id^num ) ); end; ! of if pstm.crd^accpt^id^num = end; end else #ADD 14930v1M PSTM^FRMT^SEM^ADDL^DATA move( sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data, adnl^mrch^data^tkn.idpnt^sales^org^id ); end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data <> [ $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37.idpnt^sales^org^id. tag^data ) * [ " " ] ] then begin #DELETE 14930v1U/14930v1X PSTM^FRMT^SEM^ADDL^DATA #ADD 14930v1d PSTM^FRMT^SEM^ADDL^DATA end; ! of if idpnt^sales^org^id.tag^data <> blanks #DELETE 14930v1e/14930v2v PSTM^FRMT^SEM^ADDL^DATA #ADD 20381 SEM^FRMT^XRQST^TO^PSTM^0200 struct .dgtl^pmnt^authn^tkn( dgtl^pmnt^authn^tkn^def ); struct .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); #ADD 20429 SEM^FRMT^XRQST^TO^PSTM^0200 int add^dgtl^pmnt^authn^tkn := false; int add^dgtl^remt^pmnt^tkn := false; #ADD 20433v00 SEM^FRMT^XRQST^TO^PSTM^0200 int .dgtl^pmnt^authn^get^tkn( dgtl^pmnt^authn^tkn^def ); int .dgtl^remt^pmnt^get^tkn( dgtl^remt^pmnt^tkn^def ); int done; int est^amt^lgth; #ADD 20437k00 SEM^FRMT^XRQST^TO^PSTM^0200 int mrch^id^lgth; #ADD 2139850y SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = credential^on^file^entry^d then begin movd( pos^data1^tkn.pmnt^info, "2" ); add^pos^data1 := true; end; #DELETE J2142400/J2142405 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N228591M SEM^FRMT^XRQST^TO^PSTM^0200 if addl^data^bit^d and sem.addl^data.info.on^behalf^svc^sub^fld^71. tag = "71" then begin idx := -1; lgth := 0; done := false; while not done and ( idx := idx + 1 ) < $occurs( sem.addl^data.info. on^behalf^svc^sub^fld^71.tag^data ) do begin if sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "54" then begin done := true; movd( tkn^id, dgtl^pmnt^authn^tkn^id^d ); if not hiswtkn^get^tkn( pstm, tkn^id, @dgtl^pmnt^authn^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^pmnt^authn^tkn ); add^dgtl^pmnt^authn^tkn := true; end else begin @dgtl^pmnt^authn^tkn := @dgtl^pmnt^authn^get^tkn; end; lgth := $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^1 ) + $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^2 ); movd( dgtl^pmnt^authn^tkn.frmt^cde, "01" ); integer^ascii^( dgtl^pmnt^authn^tkn.lgth, lgth ); movl( dgtl^pmnt^authn^tkn.mc.rslt^cde^1, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1, $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^1 ) ); movl( dgtl^pmnt^authn^tkn.mc.rslt^cde^2, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^2, $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^2 ) ); end; end; if lgth > 0 and dgtl^pmnt^data^bit^d then begin if sem.dgtl^pmnt^data.est^amt.tag = "002" and ( sem.dgtl^pmnt^data.est^amt.tag^data <> [ $len( sem.dgtl^pmnt^data.est^amt. tag^data ) * [" "] ] and sem.dgtl^pmnt^data.est^amt.tag^data <> [ $len( sem.dgtl^pmnt^data.est^amt. tag^data ) * ["0"] ] ) then begin movd( dgtl^pmnt^authn^tkn.frmt^cde, "01" ); lgth := lgth + $len( dgtl^pmnt^authn^tkn. mc.est^amt ); integer^ascii^( dgtl^pmnt^authn^tkn.lgth, lgth ); movl( dgtl^pmnt^authn^tkn.mc.est^amt, sem.dgtl^pmnt^data.est^amt.tag^data, $len( dgtl^pmnt^authn^tkn.mc.est^amt ) ); ascii^integer^( sem.dgtl^pmnt^data.est^amt.lgth, est^amt^lgth ); if est^amt^lgth < 12 then begin call hiswutil^justify^field( dgtl^pmnt^authn^tkn.mc.est^amt, $len( dgtl^pmnt^authn^tkn.mc.est^amt ), sem.dgtl^pmnt^data.est^amt.tag^data, $len( sem.dgtl^pmnt^data.est^amt. tag^data ), right^justify^l ); end; end; if sem.dgtl^pmnt^data.mrch^id.tag = "003" and ( sem.dgtl^pmnt^data.mrch^id.tag^data <> [ $len( sem.dgtl^pmnt^data.mrch^id. tag^data ) * [" "] ] and sem.dgtl^pmnt^data.mrch^id.tag^data <> [ $len( sem.dgtl^pmnt^data.mrch^id. tag^data ) * ["0"] ] ) then begin movd( tkn^id, dgtl^remt^pmnt^tkn^id^d ); if not hiswtkn^get^tkn( pstm, tkn^id, @dgtl^remt^pmnt^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^remt^pmnt^tkn ); add^dgtl^remt^pmnt^tkn := true; end else begin @dgtl^remt^pmnt^tkn := @dgtl^remt^pmnt^get^tkn; end; movd( dgtl^remt^pmnt^tkn.frmt^cde, "01" ); dgtl^remt^pmnt^tkn.lgth ':=' sem.dgtl^pmnt^data.mrch^id.lgth for $len( dgtl^remt^pmnt^tkn.lgth ); ascii^integer^( sem.dgtl^pmnt^data.mrch^id.lgth, mrch^id^lgth ); movl( dgtl^remt^pmnt^tkn.mc.mrch^id, sem.dgtl^pmnt^data.mrch^id.tag^data, $min( mrch^id^lgth, $len( dgtl^remt^pmnt^tkn.mc. mrch^id ) ) ); end; end; if lgth > 0 and add^dgtl^pmnt^authn^tkn then begin movd( tkn^id, dgtl^pmnt^authn^tkn^id^d ); ascii^integer^( dgtl^pmnt^authn^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := $offset( dgtl^pmnt^authn^tkn.mc ) + tkn^add^lgth; ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dgtl^pmnt^authn^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3166, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! of if tkn^result = over^max^limit^l else begin call log^message^( 3167, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3167 ); end; ! of NOT if result = over^max^limit end; ! of if token result end; if add^dgtl^remt^pmnt^tkn then begin movd( tkn^id, dgtl^remt^pmnt^tkn^id^d ); ascii^integer^( dgtl^remt^pmnt^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + $offset( dgtl^remt^pmnt^tkn.mc ); ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dgtl^remt^pmnt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3168, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end ! of if tkn^result = over^max^limit^l else begin call log^message^( 3169, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3164 ); end; ! of NOT if result = over^max^limit end; ! of if token result end; end; #ADD 25572#01 TRACE^SEM index <> 103 and #ADD 26893 TRACE^SEM if index = 103 then ! field 104 ! begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then ! ! ! External message is too long. ! ! ! begin return ( index + 1 ); end; ptr ':=' sem[ offset ] for $len( hdr.dgtl^pmnt^data.lgth ); call ascii^integer( ptr, 3, t^length ); call translate( ptr, $len( hdr.dgtl^pmnt^data.lgth ), ascii^to^ebcdic^l ); length := 3; @ptr := @ptr + length; if hdr.dgtl^pmnt^data.crypto.tag = "001" then begin call ascii^integer( hdr.dgtl^pmnt^data. crypto.lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.crypto.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "001" ! if hdr.dgtl^pmnt^data.est^amt.tag = "002" then begin call ascii^integer( hdr.dgtl^pmnt^data. est^amt.lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.est^amt.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "002" ! if hdr.dgtl^pmnt^data.mrch^id.tag = "003" then begin call ascii^integer( hdr.dgtl^pmnt^data. mrch^id.lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.mrch^id.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "003" ! set( translate^field, false ); end ! index = 104 else #ADD 26950#01 TRACE^SEM index <> 103 and #ADD 27794#01 TRACE^SEM index <> 103 and #ADD 28620 TRACE^SEM if index = 103 then ! field 104 ! begin call translate( ptr, $len( hdr.dgtl^pmnt^data.lgth ), ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for $len( hdr.dgtl^pmnt^data. lgth ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! ! The SEM has invalid data. ! ! ! return ( index + 1 ); end; call translate( ptr[ 3 ], t^length, ebcdic^to^ascii^l ); set ( translate^field, true ); length := 3; if t^length < 6 then begin ! ! ! no subfields present ! ! ! length := t^length + 3; end; tag^length := 0; bad^lgth := 0; while ( length < ( t^length + 3 ) ) do begin if not ascii^integer( ptr[ length + 3 ], 3, tag^length ) then begin ! ! ! DE 104 sub-element has invalid data. ! ! ! return ( index + 1 ); end; if ptr[ length ] = "001" then begin movl( sem^ptr.dgtl^pmnt^data.crypto.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.dgtl^pmnt^data.est^amt.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "003" then begin movl( sem^ptr.dgtl^pmnt^data.mrch^id.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] <> " " then begin bad^lgth := bad^lgth + tag^length + 6; length := length + tag^length + 6; end else begin return ( index + 1 ); end; end; if length <> t^length + 3 then begin ! ! ! Parsing of DE 104 has gone wrong somewhere. ! ! ! length := t^length + 3; return ( index + 1 ); end; ! ! ! If this field is greater than 0, an unsupported ! ! subfield was hit and the length needs to be ! ! re-set. ! ! ! if bad^lgth > 0 then begin if t^length > bad^lgth then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.dgtl^pmnt^data.lgth, t^length ); end; ! of resetting field length ! end; set( translate^field, false ); @ptr := @ptr '+' length; end ! index = 103 ! else #ADD 28713#01 TRACE^SEM index <> 103 and #ADD 28715 TRACE^SEM ! already moved data for fields 48, 104, 108 and 112 ! #DELETE 28716 TRACE^SEM #ENDSCN = SW0O032 !#CMP2.28 02/13/20 BNETS 6148 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6148 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6148 * ******************************************************************************** #SCN = SW0O033 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6148 #NEWVERSION = 6149 #ADD 03821v0C ! 13FEB2020 velsamv ! Symptom: Banknet Release 20.Q2 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirement ! AN 1430 - Revised Standards-Refund Transactions ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009172 #ADD 15437Z00 SUB^APPRV^BLIND ( pos^cash^back^adj^d( pstm ) ) then #DELETE 15437Z01/15439 SUB^APPRV^BLIND #ADD 15496p02 SUB^APPRV^BLIND pos^return^adjust^d( pstm ) then #DELETE 15496p03/15496p05 SUB^APPRV^BLIND #DELETE 15596 /15635 SUB^APPRV^BLIND #ADD 15702J04 PSTM^0200^ROUTE int found^txn^sub^tkn := false; #ADD 15703J01 PSTM^0200^ROUTE int tkn^lgth := 0; int .txn^subtyp^tkn( txn^subtyp^tkn^def ); #ADD 15705 PSTM^0200^ROUTE string tkn^id[ 0:1 ]; #ADD 15717 SUB^PSTM^ROUTE if base24^rel^g >= 5 then begin tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^sub^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, tkn^lgth ); end; if pos^return^d( pstm ) and not pos^pmnt^d( pstm ) then begin ! ! ! Refund needs to be approved blind and logged to the ILF. ! ! ! movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, pos^resp^apprv^no^bal^d ); call util^generate^approval^code( pstm ); substate := 0; call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, sem, susp.extrn^msg^lgth, substate ); call util^send^pstm( pstm, dest ); return; end; ! refund approved blind #ADD 16246p02 PSTM^0220^FORCE^POST pos^return^adjust^d( pstm ) then #DELETE 16246p03/16246p05 PSTM^0220^FORCE^POST #DELETE 16349 /16381 PSTM^0220^FORCE^POST #ADD 16736p02 PSTM^0420^REVERSAL pos^return^adjust^d( pstm ) then #DELETE 16736p03/16736p05 PSTM^0420^REVERSAL #ADD 16790p00 PSTM^0420^REVERSAL if pos^preauth^comp^d( pstm ) then #DELETE 16790p01/16794 PSTM^0420^REVERSAL #ADD 16816 PSTM^0420^REVERSAL ilf.extrn^msg^lgth = " " or sem.typ = sem^auth^request^d then #DELETE 16817 PSTM^0420^REVERSAL #ADD 16819 PSTM^0420^REVERSAL ! no SEM sent to switch for original tran or original request ! ! timed out - update ILF and exit without further processing ! #DELETE 16820 /16821 PSTM^0420^REVERSAL #ADD 22902J01 TIM^OUT^00^OUTBOUND sem.proc^cde <> sem^return^d and #ENDSCN = SW0O033 !#CMP2.28 03/18/20 BNETLIBS62133FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62133 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62133 * ******************************************************************************** #SCN = SW0O076 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62133 #NEWVERSION = 62134 #ADD v078500N ! 18MAR2020 jayaprm ! Symptom: Translation from EBCDIC to ASCII ! Problem: For DE 120 and DE 123, conversion of EBCDIC to ASCII ! fails, because DE 120 and DE 123 may contain data in ! extended EBCDIC (8-bit) characters. ! Fix: Modified the interface to invoke procedure ! UTIL^FRMT^EXT^EBCDIC^TO^EBCDIC when DE 120 and DE 123 ! present in the transaction ! Proc modified: util^expand^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3056187 #REPLACE 28732 /28733 TRACE^SEM ! If data element 42, 43, 120, 123 or 124, convert ! ! from extended EBCDIC to standard EBCDIC prior to ! #ADD 28737 TRACE^SEM index = 119 or index = 122 or #ENDSCN = SW0O076 !#CMP2.28 03/25/20 BNETDDLS6071 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6071 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6071 * ******************************************************************************** #SCN = SW0O077 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00262~0H * 25MAR2020 wielerk * Symptom: Interface corrupts STM.RTE.ORIG^PRO^NAME after * processing a Pin change transaction. * Problem: Recent increases to the SEM has resulted in the SUSP * external message being too short. * Fix: Increased Susp external message to 4000 words. * Dependency: Apply fix to: * SW60BNET - BNETDDLS. * Run Make. * Reference: Case #3059257. #REPLACE 02719$01 SAF-BNET 02 extrn-msg type binary 16 occurs 4000 times. #ENDSCN = SW0O077 !#CMP2.28 04/01/20 BNETLIBS62134FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62134 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62134 * ******************************************************************************** #SCN = SW0O083 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62134 #NEWVERSION = 62135 #ADD w078500D ! 31MAR2020 jayaprm ! Symptom: MasterCard UK April 2020 Mandates ! - AN 2941 - Digital Remote Commerce Enhancements ! Problem: For digital remote commerce transactions, DE48 SE42 ! populated incorrectly when DE48 SE43 is absent. ! Fix: Modified the interface to populate DE48 SE42 properly ! when DE48 SE43 is absent in digital remote commerce ! transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3064969 #ADD H1013800 SUB^LOG^ERROR if sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" then begin if sem.dgtl^pmnt^data.crypto.tag <> "001" and sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then begin movd( sem.addl^data.info. ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "0" ); end else if sem.dgtl^pmnt^data.crypto.tag = "001" and sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth = "1" then begin movd( sem.addl^data.info. ecom^sec^sub^fld^42. lvl^of^sec.crdhldr^auth, "4" ); end end; #DELETE v144281G/14428s02 PSTM^FRMT^SEM^ADDL^DATA #DELETE 14428j1E/14488s02 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0O083 !#CMP2.28 04/08/20 BNETLIBS62135FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62135 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62135 * ******************************************************************************** #SCN = SW0O089 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62135 #NEWVERSION = 62136 #ADD x078500E ! 08APR2020 jayaprm ! Symptom: Mastercard AN 1430-Revised Standards-Refund Transactions ! Problem: For Refund transactions, the Trace ID is not populated ! from the original transaction. ! Fix: Modified the interface to ensure that the Trace ID from ! the original auth is sent in the authorization request ! for a refund, if the Trace ID is provided by the ! merchant. ! Procs modified: pstm^frmt^sem^addl^data ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3063088 #ADD 13867{00 PSTM^FRMT^SEM^ADDL^DATA if sem.proc^cde = sem^purchase^d or sem.proc^cde = sem^return^d then #DELETE 13867{01 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0O089 !#CMP2.28 04/09/20 BNETLIBS62136FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62136 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62136 * ******************************************************************************** #SCN = SW0O090 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62136 #NEWVERSION = 62137 #ADD y078500D ! 09APR2020 jhas ! Symptom: AN 3363 - field 104 with cryptograms ! Problem: Field 104 was being sent in response which is incorrect ! as per the Master Card specification. ! Fix: Modified the code to turn off the bit 104 as per the ! specifcation. And also turned off the bit 125 in 0210 ! response message. ! Procs Modified: pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3071658 #ADD 10337 PSTM^FRMT^0210^TO^XRESP dgtl^pmnt^data^bit^d := 0; new^pin^bit^d := 0; #ADD 11543 PSTM^FRMT^0420^TO^ACQ^XRVSL dgtl^pmnt^data^bit^d := 0; ! S-104 ! #ADD 23367k02 SEM^FRMT^XRQST^TO^SEM^XRESP dgtl^pmnt^data^bit^d := 0; #ADD 23452 SEM^FRMT^XRQST^TO^SEM^XRVSL dgtl^pmnt^data^bit^d := 0; !de 104! #ENDSCN = SW0O090 !#CMP2.28 04/23/20 BNETLIBS62137FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62137 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62137 * ******************************************************************************** #SCN = SW0O102 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62137 #NEWVERSION = 62138 #ADD z078500F ! 23APR2020 jayaprm ! Symptom: Issue with FH token PGM-PROTO field ! Problem: PGM-PROTO of FH token is not populated when DE 48 SE 66 ! SF 01 is present in the transaction. ! Fix: Modified the code to populate FH token PGM-PROTO when ! DE 48 SE 66 SF 01 is present in the transaction. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3080472 #ADD d228590l SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66.tag = "66" and sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data <> " " then begin movl( sca^acq^data^tkn.pgm^proto, sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data ) ); end; #ENDSCN = SW0O102 !#CMP2.28 07/06/20 BNETLIBS62138FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62138 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62138 * ******************************************************************************** #SCN = SW0O139 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62138 #NEWVERSION = 62139 #ADD #078500B ! 06JUL2020 VulliL ! Symptom: DSRP MasterCard transactions are declined. ! Problem: DSRP MasterCard transactions are being declined by Auth. ! Fix: Modified the code to ensure that card verification is ! not performed. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3118728 #DELETE W2242700/W224270S SEM^FRMT^XRQST^TO^PSTM^0200 #ADD W224270X SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "61" ) then #DELETE W224270Y/W224270Z SEM^FRMT^XRQST^TO^PSTM^0200 #ADD W224270s SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = pan^auto^cntctlss^m^chip then begin movd( ps51^tkn^data.cavv^aav^rslt^cde, " " ); end; if sem.pos^entry^mde <> elec^commerce then begin movd( card^vrfy^flg, "O" ); end; #ENDSCN = SW0O139 !#CMP2.28 07/10/20 BNETLIBS62139FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62139 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62139 * ******************************************************************************** #SCN = SW0O145 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62139 #NEWVERSION = 62140 #ADD $078500D ! 10JUL2020 velsamv ! Symptom: Refund adjustment transaction originated from POS device ! is not sent to BNET with field 95. ! Problem: Field 95 is not being supported for refund adjustment ! transaction. ! Fix: Modified the code to populate field 95 for refund ! adjustment transaction. ! Proc modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3121186 #ADD 12133 PSTM^FRMT^AMT^TO^SEM^AMT if pos^adjust^d( pstm ) or pos^pmnt^adj^d( pstm ) or pos^return^adjust^d( pstm ) then #DELETE 12134 PSTM^FRMT^AMT^TO^SEM^AMT #ENDSCN = SW0O145 !#CMP2.28 07/13/20 BNETLIBS62140FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62140 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62140 * ******************************************************************************** #SCN = SW0O154 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62140 #NEWVERSION = 62141 #ADD %078500D ! 13JUL2020 VulliL ! Symptom: MC Moneysend payment acquiring tokens( SI, SJ, SK ) are ! not populated correctly. ! Problem: HISWTKN^GET^TKN is returning data from the token buffer ! up to the maximum length of each token. ! Fix: The interface has been modified to ensure that any data ! beyond the actual token length is set to spaces within ! the token structure of SI, SJ and SK tokens. ! Subprocs modified: sub^process^addl^data of ! util^frmt^txn^ref^data^to^sem ! sub^process^rcv^data of ! util^frmt^txn^ref^data^to^sem ! sub^process^sender^data of ! util^frmt^txn^ref^data^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3119945 #ADD l2982811 SUB^PROCESS^ADDL^DATA if tkn^lgth < $len( p2p^addl^data^tkn ) then begin movl ( p2p^addl^data^tkn[ tkn^lgth ], blanks, $len( p2p^addl^data^tkn ) - tkn^lgth ); end; #ADD l298283L SUB^PROCESS^RCV^DATA if tkn^lgth < $len( p2p^rcv^data^tkn ) then begin movl ( p2p^rcv^data^tkn[ tkn^lgth ], blanks, $len( p2p^rcv^data^tkn ) - tkn^lgth ); end; #ADD l298289h SUB^PROCESS^SENDER^DATA if tkn^lgth < $len( p2p^sender^data^tkn ) then begin movl ( p2p^sender^data^tkn[ tkn^lgth ], blanks, $len( p2p^sender^data^tkn ) - tkn^lgth ); end; #ENDSCN = SW0O154 !#CMP2.28 07/16/20 BNETLIBS62141FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62141 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62141 * ******************************************************************************** #SCN = SW0O155 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62141 #NEWVERSION = 62142 #ADD &078500J ! 13JUL2020 VulliL ! Symptom: Issue with the fix of case #3119945. ! Problem: The token buffer of SI, SJ and SK tokens are not ! properly initialized and field 108 contains invalid ! data. ! Fix: The interface has been modified to initialize SI, SJ ! and SK tokens with spaces and to populate correct data ! in field 108. ! Proc modified: util^frmt^txn^ref^data^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3119945 #ADD l298280U UTIL^FRMT^TXN^REF^DATA^TO^SEM struct .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); struct .p2p^rcv^data^tkn( p2p^rcv^data^tkn^def ); struct .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); int .buf; #DELETE l298280W/l298280Y UTIL^FRMT^TXN^REF^DATA^TO^SEM #DELETE &2982800/&2982807 SUB^PROCESS^ADDL^DATA #DELETE &2982808/&298280F SUB^PROCESS^RCV^DATA #DELETE &298280G/&298280N SUB^PROCESS^SENDER^DATA #ADD l29828GA SUB^PROCESS^SENDER^DATA if hiswtkn^get^tkn( pstm, tkn^id, @buf, tkn^lgth ) then begin init( p2p^rcv^data^tkn.frmt^cde.byte, " ", $len( p2p^rcv^data^tkn^def ) ); tkn^lgth := tkn^lgth / 2 ; movl( p2p^rcv^data^tkn, buf, tkn^lgth ); if p2p^rcv^data^tkn.frmt^cde = "01" then begin call sub^process^rcv^data; end; #DELETE l29828GB/l29828GF SUB^PROCESS^SENDER^DATA #ADD l29828GJ SUB^PROCESS^SENDER^DATA if hiswtkn^get^tkn( pstm, tkn^id, @buf, tkn^lgth ) then begin init( p2p^sender^data^tkn.frmt^cde.byte, " ", $len( p2p^sender^data^tkn^def ) ); tkn^lgth := tkn^lgth / 2 ; movl( p2p^sender^data^tkn, buf, tkn^lgth ); if p2p^sender^data^tkn.frmt^cde = "01" then begin call sub^process^sender^data; end; #DELETE l29828GK/l29828GO SUB^PROCESS^SENDER^DATA #ADD l29828GS SUB^PROCESS^SENDER^DATA if hiswtkn^get^tkn( pstm, tkn^id, @buf, tkn^lgth ) then begin init( p2p^addl^data^tkn.frmt^cde.byte, " ", $len( p2p^addl^data^tkn^def ) ); tkn^lgth := tkn^lgth / 2 ; movl( p2p^addl^data^tkn, buf, tkn^lgth ); if p2p^addl^data^tkn.frmt^cde = "01" then begin call sub^process^addl^data; end; #DELETE l29828GT/l29828GX SUB^PROCESS^SENDER^DATA #ENDSCN = SW0O155 !#CMP2.28 07/16/20 BNETLIBS62142FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62142 * ******************************************************************************** #SCN = SW0O156 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62142 #NEWVERSION = 62143 #ADD *078500E ! 16JUL2020 wielerk ! Symptom: Interface considers DE-48.SE-21.SF2 ! ( accpt data.addl term cap ) as an edit error if ! passed by Mastercard. ! Problem: The interface does not support DE-48.SE-21.SF2 ! so the subfield presence is processed as an edit ! error. ! Fix: The interface has been modified to accept ! DE-48.SE-21.SF2 but it is not passed into Base24 ! and DE-48.SF-21 will not be echoed. ! Procs modified: util^frmt^addl^data^to^xresp ! util^expand^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3117533. #ADD P279170K TRACE^SEM if sub^ptr = "02" then begin call sub^move^subfield( buf ); end ! subfield 02 ! else #ADD 29047 UTIL^FRMT^ADDL^DATA^TO^XRESP ! ! Calculate the length of subelements we do not want to return. ! if sem.addl^data.info.accpt^data^sub^fld^21.tag = "21" then begin call ascii^integer^( sem.addl^data.info. accpt^data^sub^fld^21.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. accpt^data^sub^fld^21.tag ) + $len( sem.addl^data.info. accpt^data^sub^fld^21.lgth ); movd( sem.addl^data.info.accpt^data^sub^fld^21.tag, " " ); lgth := lgth - delta^lgth; end; #ENDSCN = SW0O156 !#CMP2.28 07/21/20 BNETS 6149 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6149 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6149 * ******************************************************************************** #SCN = SW0O164 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6149 #NEWVERSION = 6150 #ADD 03821w0F ! 21JUL2020 wielerk ! Symptom: Interface declines Acct status inquiry transactions ! response code "30" and Mastercard prefers "05". ! Problem: The interface can deny inbound external requests. ! Acct Status Inquiries cannot be denied with the ! format error response code. ! Fix: Modified code to override a value of "30" with a value ! of "05" for Acct Status Inquiry transactions. ! Proc modified: sem^request^deny ! Dependency: Apply fix to BNETS. Run Make. ! Reference: Case #3126476. #REPLACE 21403 /21403 OFFSET 0 ELIM^DE54^CASH^BACK^AMT if sem^acct^stat^inq^d( rqst ) and rcode = resp^format^error^sem^l then begin rcode := resp^do^not^honor^sem^l; end; #ENDSCN = SW0O164 !#CMP2.28 07/28/20 BNETDDLS6072 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6072 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6072 * ******************************************************************************** #SCN = SW0O173 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00262(0B * 28JUL2020 jayaprm * Symptom: Banknet Support for Cryptographic Key Block Changes * Problem: None * Fix: Modified the interface in support for the below * requirement: * AN 2117 - Introducing Cryptographic Key Block Changes * to support Phase 2 of PCI Mandates. * Added a field for DE 110 (123 bytes) to the existing * NMM structure. * Updated the comments of DE 70 to support new values. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #009172 #ADD 00408 NMM * 162 = key change solicitation ! * 163 = key change solicitation - TR-31 Keyblock ! * 164 = key change confirmation of success - TR-31 Keyblock ! * 165 = key change advice of failure - TR-31 Keyblock ! #DELETE 00409 NMM #ADD 00453 NMM * ! * additional data 2, private ! * bit map position = 110 ! * EBCDIC in transmission, variable in length ! * ! 02 adnl-data-2. 04 lgth pic 999. 04 info pic x(120). 04 key-info redefines info. 06 sub-fld-09. 08 tag pic x(2). 08 lgth pic x(3). 08 encrypt-key pic x(96). 06 sub-fld-10. 08 tag pic x(2). 08 lgth pic x(3). 08 key-chk-dgt pic x(6). 06 user-fld pic x(8). #ENDSCN = SW0O173 !#CMP2.28 07/28/20 BNETG 60119FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60119 * ******************************************************************************** #SCN = SW0O174 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h000260K ! 28JUL2020 jayaprm ! Symptom: Banknet Support for Cryptographic Key Block Changes ! Problem: None ! Fix: Modified the interface in support for the below ! requirement: ! AN 2117 - Introducing Cryptographic Key Block Changes ! to support Phase 2 of PCI Mandates. ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009172 #ADD 00112 define sem^nmm^advice^d = "0820"#; #ADD 00210P02 define nmm^key^chng^ok^d = "164"#; define nmm^key^chng^not^ok^d = "165"#; #DELETE 00210P03 #ADD B0023306 define tr31^key^blk^d( x ) = ( x = 4 or x = 5 )#; #ADD 00282P02 nmm^rqst^key^xchng^old^l = 162, nmm^rqst^key^xchng^l = 163, #DELETE 00282P03 #ADD d0043502 int sppt^tr31^g; #ADD K0061202 adnl^data^2^bit^d = sbit^map[2].<13> #, !bit 110 ! #REPLACE 00747 110, 3, nmm^field( adnl^data^2 ), #ADD 01366d08 ? hiswsec^key^frmt^get, #ADD 01366d0B ! hiswsec^key^frmt^get, #ENDSCN = SW0O174 !#CMP2.28 07/28/20 BNETLIBS62143FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62143 * ******************************************************************************** #SCN = SW0O175 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62143 #NEWVERSION = 62144 #ADD +078500H ! 28JUL2020 jayaprm ! Symptom: Banknet Support for Cryptographic Key Block Changes ! Problem: None ! Fix: Modified the interface in support for the below ! requirement: ! AN 2117 - Introducing Cryptographic Key Block Changes ! to support Phase 2 of PCI Mandates. ! Procs Modified: sem^frmt^nmm^request ! util^expand^nmm ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009172 #REPLACE 17181 SEM^FRMT^NMM^REQUEST nmm^info^cde <> nmm^rqst^key^xchng^old^l and #REPLACE 17459 SEM^FRMT^NMM^REQUEST nmm^info^cde = nmm^rqst^key^xchng^old^l or #ADD 17481 SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^rqst^key^xchng^l or nmm^info^cde = nmm^rqst^key^xchng^old^l then #DELETE 17482 SEM^FRMT^NMM^REQUEST #ADD 27501 UTIL^EXPAND^NMM int loop^lgth; #ADD 27502 UTIL^EXPAND^NMM int sub^lgth; #ADD 27578 TRACE^NMM loop^lgth := nmm^bit^map^type( index ); sub^lgth := 0; if index = 109 then ! field 110 ! begin ! ! ! Process variable length field with sub-fields ! ! ! while ( loop^lgth < length ) do begin call translate( ptr[ loop^lgth ], subelement^id^lgth^l + subelement^lgth^fld^lgth^l, ebcdic^to^ascii^l ); loop^lgth := loop^lgth + subelement^id^lgth^l; if not ascii^integer( ptr[ loop^lgth ], subelement^lgth^fld^lgth^l, sub^lgth ) then begin ! ! DE 110 sub-element has invalid data. ! return ( index + 1 ); end; loop^lgth := loop^lgth + subelement^lgth^fld^lgth^l; call translate( ptr[ loop^lgth ], sub^lgth, ebcdic^to^ascii^l ); loop^lgth := loop^lgth + sub^lgth; if loop^lgth > length then begin ! ! DE 110 sub-element has invalid length. ! return ( index + 1 ); end; sub^lgth := subelement^id^lgth^l + subelement^lgth^fld^lgth^l + sub^lgth; loop^lgth := loop^lgth - sub^lgth; if ptr[ loop^lgth ] = "09" then begin movl( nmm.adnl^data^2.key^info.sub^fld^09. tag, ptr[ loop^lgth ], sub^lgth ); end else if ptr[ loop^lgth ] = "10" then begin movl( nmm.adnl^data^2.key^info.sub^fld^10. tag, ptr[ loop^lgth ], sub^lgth ); end; loop^lgth := loop^lgth + sub^lgth; end; ! of while ! end ! index = 109 #ADD 27586 TRACE^NMM if index <> 109 then ! field 110 ! begin sem[ offset ] ':=' ptr for length; if translate^field then begin call translate( sem[ offset ], length, ebcdic^to^ascii^l ); end; end; #DELETE 27587 /27590 TRACE^NMM #ADD 27605 TRACE^NMM movl ( nmm.addl^data.key^info.key^data^1.chk, blanks, $len( nmm.addl^data. key^info.key^data^1.chk ) ); #ADD 27611 TRACE^NMM movl ( nmm.addl^data.key^info.key^data^2.chk, blanks, $len( nmm.addl^data. key^info.key^data^2.chk ) ); #ADD 27616 TRACE^NMM movl ( nmm.addl^data.key^info.key^data^3.chk, blanks, $len( nmm.addl^data. key^info.key^data^3.chk ) ); #ENDSCN = SW0O175 !#CMP2.28 07/28/20 BNETS 6150 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6150 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6150 * ******************************************************************************** #SCN = SW0O176 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6150 #NEWVERSION = 6151 #ADD 03821x0C ! 28JUL2020 jayaprm ! Symptom: Banknet Support for Cryptographic Key Block Changes ! Problem: None ! Fix: Modified the interface in support for the below ! requirement: ! AN 2117 - Introducing Cryptographic Key Block Changes ! to support Phase 2 of PCI Mandates. ! Procs Modified: init^bnet^g ! init^newkey ! init^paramproc ! sem^nmm^response ! sem^nmm^request ! sem^key^chng^rqst ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009172 #ADD 10428t02 INIT^BNET^G bnet^g.sppt^tr31^g := false; #ADD 12424 INIT^NEWKEY int extrn^key^blk^frmt; int nmm^rqst^key^xchng; #ADD 12469 INIT^NEWKEY if hiswsec^key^frmt^get( sdcb, pct.secure.exchng^key, extrn^key^blk^frmt, bnet^g.sppt^tr31^g ) and tr31^key^blk^d( extrn^key^blk^frmt ) then begin nmm^rqst^key^xchng := nmm^rqst^key^xchng^l; end else begin nmm^rqst^key^xchng := nmm^rqst^key^xchng^old^l; end; #REPLACE 12471 INIT^NEWKEY nmm^rqst^key^xchng, #ADD 12676u02 INIT^PARAMPROC "P", "INTF-TR31-CAPABLE ", #ADD 13501u0A INIT^PARAMPROC ! ! INTF-TR31-CAPABLE ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin bnet^g.sppt^tr31^g := true; end else begin bnet^g.sppt^tr31^g := false; end; end; #ADD 20073 SEM^KEY^CHNG^RQST int tr31^key^lgth := 0; #ADD 20079 SEM^KEY^CHNG^RQST string encrypt^key[ 0:95 ] := [ 96 * [ " " ] ]; string key^chk^dgt[ 0:15 ] := [ 16 * [ " " ] ]; #ADD 20119 SEM^KEY^CHNG^RQST if adnl^data^2^bit^d and sem.adnl^data^2.key^info.sub^fld^09.tag = "09" and sem.adnl^data^2.key^info.sub^fld^10.tag = "10" then begin call ascii^integer^( sem.adnl^data^2.key^info.sub^fld^09. lgth, tr31^key^lgth ); encrypt^key ':=' sem.adnl^data^2.key^info.sub^fld^09. encrypt^key for tr31^key^lgth; key^chk^dgt ':=' sem.adnl^data^2.key^info.sub^fld^10. key^chk^dgt for chk^dgt^lgth^l; end else begin encrypt^key ':=' sem.addl^data.key^info.encrypt^key for $len( sem.addl^data.key^info. encrypt^key ); key^chk^dgt ':=' sem.addl^data.key^info.key^chk^dgt for chk^dgt^lgth^l; end; #ADD 20121 SEM^KEY^CHNG^RQST encrypt^key, #DELETE 20122 SEM^KEY^CHNG^RQST #ADD 20135 SEM^KEY^CHNG^RQST key_dir_s, ! key^idx !, bnet^g.sppt^tr31^g, ! tr31^key !, tr31^key^lgth ) then #DELETE 20136 SEM^KEY^CHNG^RQST #ADD 20164 SEM^KEY^CHNG^RQST if key^chk^dgt <> chk^dgt for chk^dgt^lgth^l then #DELETE 20165 /20166 SEM^KEY^CHNG^RQST #ADD 20224 SEM^KEY^CHNG^RQST adnl^data^2^bit^d := 0; #ADD 20234 SEM^KEY^CHNG^RQST else if sem.typ = sem^nmm^advice^d and ( ( nmm^info^cde^bit^d and sem.nmm^info^cde = nmm^key^chng^not^ok^d ) or ( not nmm^info^cde^bit^d and not addl^data^bit^d ) ) then begin ! ! New key data can be removed from the PCT ! mov^( pct.secure.in^key[ pending^key^idx ], zeroes ); mov^( pct.secure.in^key^chk^dgt[ pending^key^idx ], zeroes ); mov^( pct.secure.out^key[ pending^key^idx ], zeroes ); mov^( pct.secure.out^key^chk^dgt[ pending^key^idx ], zeroes ); call init^newkey; end #ADD 20881 SEM^NMM^REQUEST if sem.nmm^info^cde = nmm^key^chng^rqst^d or sem.typ = sem^nmm^advice^d then #DELETE 20882 SEM^NMM^REQUEST #ADD 20963 SEM^NMM^RESPONSE "163", ! Key change request response (TR-31) ! #ADD 21031 SEM^NMM^RESPONSE !163! call sem^key^chng^resp( sem, msg, sta^x ); #ENDSCN = SW0O176 !#CMP2.28 08/04/20 BNETLIBS62144FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62144 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62144 * ******************************************************************************** #SCN = SW0O191 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62144 #NEWVERSION = 62145 #ADD -078500F ! 05AUG2020 wielerk ! Symptom: Interface abends with trap #1866. ! Problem: If tkn^add^info returns an error other than overlimit ! the interface emits EMS message #1866 and abends. ! Fix: Modified the interface to not abend if the token ! error is token exists. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3135079. #ADD t191900n SEM^FRMT^XRESP^TO^PSTM^0210 if tkn^result <> tkn^exist^l then #ENDSCN = SW0O191 !#CMP2.28 08/12/20 BNETG 60120FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60120 * ******************************************************************************** #SCN = SW0O193 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i000260D ! 12AUG2020 wielerk ! Symptom: AN2626 support 2020 Q2 mandates. ! Problem: Interface does not support AN2626, DE-16 support in ! GAF. ! Fix: Modified the interface to add/update the Destination ! Currency token ( "H0" ). ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS ! SW60ABNT: BNETATMS ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN ! BA60SRC: BATKNID, BATKNCVS ! Reference: Case #3140331. #ADD 00026f0L ? dest^crncy^tkn #ADD 00026O1W ! dest^crncy^tkn, #ENDSCN = SW0O193 !#CMP2.28 08/12/20 BNETLIBS62145FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62145 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62145 * ******************************************************************************** #SCN = SW0O194 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62145 #NEWVERSION = 62146 #ADD :078500B ! 12AUG2020 wielerk ! Symptom: AN2626 support 2020 Q2 mandates. ! Problem: Interface does not support AN2626, DE-16 support in ! GAF ! Fix: Modified the interface to add/update the Destination ! Currency token ( "H0" ). ! Proc Added: util^add^dest^crncy^tkn ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETG, BNETLIBS ! SW60ABNT: BNETATMS ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN ! BA60SRC: BATKNID, BATKNCVS ! Reference: Case #3140331. #ADD 18498 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; #DELETE 18499 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD K1861904 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g > 5 then begin call util^add^dest^crncy^tkn( sem, pstm, ofst, pos^userdata ); end; #DELETE K1861905 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 18663 /18676 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 24513#00 UTIL^^EXPAND ?section util^add^dest^crncy^tkn ?page "util^add^dest^crncy^tkn" !##################################################################### !# # !# util^add^dest^crncy^tkn # !# # !# This proc adds the Destination Currency token (H0) to the # !# internal message (PSTM). # !# # !# INPUT PARAMETERS: # !# sem - External message # !# sim - Internal message STM/PSTM # !# ofst - Offset to the token buffer in the SIM # !# pos^userdata - POS user data flag # !# # !# OUTPUT PARAMETERS: # !# none # !# # !##################################################################### proc util^add^dest^crncy^tkn( sem, sim, ofst, pos^userdata ) extensible; int .sem( sem^def ); int .sim; int ofst; int pos^userdata; begin wlform( noroom^err, "UNABLE TO ADD DEST CURRENCY TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( add^err, "UNABLE TO ADD DEST CURRENCY TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\" ',' " REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) struct .dest^crncy^tkn( dest^crncy^tkn^def ); int .pstm( pstm^def ) := @sim; int .stm ( stm^def ) := @sim; int dspy := false; int dest^crncy^lgth := $len( dest^crncy^tkn^def ); int found^dest^crncy^tkn := true; int get^tkn^rslt := 0; int pan^lgth := 0; int pos^userdata^ := false; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^buf^lgth := 0; int .tkn^buf^ptr( dest^crncy^tkn^def ); int tkn^lgth := 0; int tkn^rslt := 0; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; string seq^num[ 0:11 ] := [ 12 * [ " " ] ]; string track2[ 0:39 ] := [ 40 * [ " " ] ]; string pan[ 0:27 ] := [ 28 * [ " " ] ]; tkn^id ':=' dest^crncy^tkn^id^d; ! ! Determine if the token is in the SIM. ! if not hiswtkn^get^tkn( pstm, tkn^id, @tkn^buf^ptr, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, dest^crncy^tkn ); found^dest^crncy^tkn := false; end else begin found^dest^crncy^tkn := true; @dest^crncy^tkn := @tkn^buf^ptr; end; if crd^iss^amt^bit^d then begin call ascii^fixed^( sem.crd^iss^amt, dest^crncy^tkn.amt^1 ); dest^crncy^tkn.amt^2 := 0f; move( dest^crncy^tkn.crncy^cde, sem.iss^crncy^cde ); move( dest^crncy^tkn.conv^rate, sem.conv^rate^crd^iss ); move( dest^crncy^tkn.conv^dat, sem.conv^dat ); movd( dest^crncy^tkn.crncy^ind, "0" ); end else if setl^amt^bit^d then begin call ascii^fixed^( sem.setl^amt, dest^crncy^tkn.amt^1 ); dest^crncy^tkn.amt^2 := 0f; move( dest^crncy^tkn.crncy^cde, sem.setl^crncy^cde ); move( dest^crncy^tkn.conv^rate, sem.conv^rate^setl ); move( dest^crncy^tkn.conv^dat, sem.conv^dat ); movd( dest^crncy^tkn.crncy^ind, "1" ); end; if not found^dest^crncy^tkn then begin tkn^lgth := 0; if not $param( pos^userdata ) then begin pos^userdata^ := false; end else begin pos^userdata^ := pos^userdata; end; tkn^rslt := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dest^crncy^tkn, dest^crncy^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata^ ); if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1856, ! routing code !, @noroom^err, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else if tkn^rslt <> tkn^exist^l then begin call log^message^( 1857, ! routing code !, @add^err, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^rslt ); call abend^( 1857 ); end; end; ! of tkn error end; ! of if found^dest^crncy^tkn = false end; #ENDSCN = SW0O194 !#CMP2.28 08/13/20 BNETLIBS62146FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62146 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62146 * ******************************************************************************** #SCN = SW0O196 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62146 #NEWVERSION = 62147 #ADD ;078500G ! 13AUG2020 wielerk ! Symptom: Interface miscalculates the length of DE-48 ! ( addl data ) when the interface declines a ! transaction. ! Problem: When DE-48.SE-83 or DE-48.SE-87 is received in an ! ASI request, the lengths of those tags are added in ! when those lengths were included in DE-48 already. ! Fix: Modified the interface to deduct the lenths of tags ! 83 and 87 if present in a request so the correct ! length can be set by util^frmt^addl^data^to^xresp. ! Proc Modified: sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3137566. #REPLACE 23287 SEM^FRMT^XRQST^TO^SEM^XRESP int sub^lgth := 0; #REPLACE 23299 SEM^FRMT^XRQST^TO^SEM^XRESP sem.addl^data.info.avs^rqst.cde <> " " then #DELETE a2330000/a2330003 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 23301 SEM^FRMT^XRQST^TO^SEM^XRESP if sem.addl^data.info.avs^resp.tag = "83" then begin ! ! Reduce the length for this tag so the length of ! the field is calculated correctly in ! util^frmt^addl^data^to^xresp ! call ascii^integer^( sem.addl^data.lgth, lgth ); call ascii^integer^( sem.addl^data.info.avs^resp.lgth, sub^lgth ); sub^lgth := sub^lgth + 4; lgth := lgth - sub^lgth; call integer^ascii^( resp.addl^data.lgth, lgth ); end; #REPLACE 23317 SEM^FRMT^XRQST^TO^SEM^XRESP sem.addl^data.info.cvc2^sub^fld^92.tag^data <> " " then #DELETE a2331800/a2331803 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 23319 SEM^FRMT^XRQST^TO^SEM^XRESP if sem.addl^data.info.cvc^sub^fld^87.tag = "87" then begin ! ! Reduce the length for this tag so the length of ! the field is calculated correctly in ! util^frmt^addl^data^to^xresp ! call ascii^integer^( sem.addl^data.lgth, lgth ); call ascii^integer^( sem.addl^data.info. cvc^sub^fld^87.lgth, sub^lgth ); sub^lgth := sub^lgth + 4; lgth := lgth - sub^lgth; call integer^ascii^( resp.addl^data.lgth, lgth ); end; #ENDSCN = SW0O196 !#CMP2.28 08/20/20 BNETDDLS6073 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6073 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6073 * ******************************************************************************** #SCN = SW0O212 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00262)0G * 20AUG2020 velsamv * Symptom: Banknet Release 20.Q4 Functional Enhancements * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 4005 - Support for Japan National Data in Advice * Messages * AN 4021 - Support Card Acceptor Tax ID Mandate in * Chile and Paraguay * AN 4022 - Money Transfer Sender and Receiver Data * Enhancement * Added fields for SE 032(42 bytes) to the existing SEM * structure of DE 112. * Added redefinition for Chile and Paraguay to the * existing SEM structure of DE 112. * Removed redefinition of money transfer sender and * receiver data from DE 124 structure. * Dependency: Apply fixes to: * BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN * BA60SRC: PSTKNCVS, PSTKNID * PS60HIS0: PSHISOS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009232 #ADD 01411:0P SEM 06 sub-fld-32. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 pmnt-opt-cde pic x(2). 10 bonuses-per-year pic x(2). 10 frst-bonus-month pic x(2). 10 frst-bonus-amt pic x(12). 10 scnd-bonus-month pic x(2). 10 scnd-bonus-amt pic x(12). 10 ttl-num-instl pic x(2). 10 frst-instl-month pic x(2). #ADD 01411+0C SEM 06 user-fld-aci pic x(584). #DELETE 01411+0D SEM #ADD 01411v0O SEM 04 cl-py redefines info. 06 sub-fld-42. 08 tag pic x(3). 08 lgth pic x(3). 08 crd-accpt-tax-id pic x(12). 06 user-fld-aci pic x(761). #DELETE 01411w17/01411w1I SEM #ENDSCN = SW0O212 !#CMP2.28 08/20/20 BNETG 60121FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60121 * ******************************************************************************** #SCN = SW0O213 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #DELETE j0002600 #ADD j000260E ! 20AUG2020 velsamv ! Symptom: Banknet Release 20.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! - Support for the EMV 3D Secure Data Token ! - Strong Customer Authentication (SCA) Enhancements ! sourced in emv^3ds^data^tkn definition from BADDLTAL. ! Added a new variable to bnet^glbl^def to hold the ! number of Wallet IDs configured in LCONF parameter ! SW-BNET-SCA-WALLET-IDS. ! Added new array to bnet^array^def to hold the Wallet ! IDs configured SW-BNET-SCA-WALLET-IDS LCONF parameter. ! Dependency: Apply fixes to: ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! PS60HIS0: PSHISOS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009232 #ADD h000260V ?nolist, source =basrc_baddltal( ? emv^3ds^data^tkn ? ) ?list ! emv^3ds^data^tkn ! ) #ADD e0043502 int num^sca^wallet^id^tbl^g; #ADD e0043505 string sca^wallet^id^tbl^g[ 0:68 ]; string cvm^g[ 0:1 ]; #ENDSCN = SW0O213 !#CMP2.28 08/20/20 BNETLIBS62147FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62147 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62147 * ******************************************************************************** #SCN = SW0O214 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62147 #NEWVERSION = 62148 #ADD <078500F ! 20AUG2020 velsamv ! Symptom: Banknet Release 20.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 4005 - Support for Japan National Data in Advice ! Messages ! AN 4021 - Support Card Acceptor Tax ID Mandate in ! Chile and Paraguay ! AN 4022 - Money Transfer Sender and Receiver Data ! Enhancement ! AN 4026 - Introducing a New Gaming and Gambling ! Payments Program in the U.S. Region ! AN 4040 - New Value in Low-Risk Transaction Indicator ! Field ! - Support for Partial Authorization of Purchase with ! Cash Back Transactions ! - Support for the EMV 3D Secure Data Token ! - Strong Customer Authentication (SCA) Enhancements ! Case #03126476 - Support for Banknet Response Code 63. ! Procs Added :util^build^sca^wallet^id^tbl ! util^sca^wallet^id ! Procs Modified :pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^natl^data^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^amt^to^pstm^amt ! sem^frmt^natl^data^to^pstm ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^add^moneysend^tkns ! util^collapse^sem ! util^expand^sem ! util^frmt^txn^ref^data^to^sem ! Subprocs Modified:sub^process^rcv^data of ! util^add^moneysend^tkns ! sub^process^sender^data of ! util^add^moneysend^tkns ! sub^process^rcv^data of ! util^frmt^txn^ref^data^to^sem ! sub^process^sender^data of ! util^frmt^txn^ref^data^to^sem ! Dependency: Apply fixes to: ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! PS60HIS0: PSHISOS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009232 #ADD 09405501 SUB^LOG^ERROR sem.merch^typ = "7801" or sem.merch^typ = "7802" or ( sem. merch^typ = "7994" and pstm.term^cntry^cde = "US" ) or #ADD 09631 SUB^LOG^ERROR if bnet^g.sppt^sca^g and ( pos^data1^tkn.pmnt^info <> "0" and pos^data1^tkn.pmnt^info <> "3" ) and ( pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" ) then begin ! ! ! Ensure DE 61.4 is set to 4 for subsequent MITs ! ! (except incremental auths) in the EEA. ! ! ! pos^data1^recur^pmnt := true; end; if bnet^g.sppt^sca^g and ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) and ( pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" or pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "U" ) then begin ! ! ! Ensure DE 61.4 is set to 4 for transactions setting up ! ! a COF agreement for subsequent MITs in the EEA. ! ! ! pos^data1^recur^pmnt := true; end; #ADD l0967300 SUB^LOG^ERROR ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) and #DELETE l0967301 SUB^LOG^ERROR #ADD T0974904 SUB^LOG^ERROR pos^data1^tkn.pmnt^info = "2" or pos^data1^tkn.pmnt^info = "3" ) then #DELETE T0974905 SUB^LOG^ERROR #ADD H102070F SUB^LOG^ERROR end else if base24^rel^g >= 5 and ( sem.ntl^pos^data.cntry^cde = "152" or sem.ntl^pos^data.cntry^cde = "600" ) then begin ! ! ! Format transaction for Chile or Paraguay ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; #DELETE 10273 /10274 PSTM^FRMT^0210^TO^XRESP #ADD d106720Y PSTM^FRMT^0210^TO^XRESP end else if not pos^approved^d( pstm ) then begin if ps50^tkn.err^flg = "H" then begin movd( sem.resp^cde, "63" ); end; #ADD 1156480F PSTM^FRMT^0420^TO^ACQ^XRVSL end else if ( sem.ntl^pos^data.cntry^cde = "152" or sem.ntl^pos^data.cntry^cde = "600" ) and adnl^data^ntl^bit^d then begin ! ! ! Format transaction for Chile or Paraguay ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin ! ! ! Nothing to do, yet ! ! ! end; #ADD 11646R00 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.resp^cde = "10" or sem.resp^cde = "87" then #DELETE 11646R01 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 12311 PSTM^FRMT^AMT^TO^SEM^AMT pstm.pre^auth^opt = "C" or #ADD 12315 PSTM^FRMT^AMT^TO^SEM^AMT if pos^purch^cb^d( pstm ) then begin movd( sem.resp^cde, "87" ); end; #ADD T129550G PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "152" and intra^cntry^data^tkn.frmt^cde = "13" then begin ! ! ! Format DE 112 tag 042 ! ! ! if intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id <> [ $len( intra^cntry^data^tkn.cl^bnet. crd^accpt^tax^id ) * [ " " ] ] then begin found^natl^data := true; ! ! ! Format variable length tag 042 ! ! ! movd( sem.adnl^data^natl.cl^py.sub^fld^42.tag, "042" ); idx := $len( intra^cntry^data^tkn.cl^bnet. crd^accpt^tax^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... ! movl( sem.adnl^data^natl.cl^py.sub^fld^42. crd^accpt^tax^id, intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.cl^py.sub^fld^42.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; #ADD H1295509 PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "600" and intra^cntry^data^tkn.frmt^cde = "15" then begin ! ! ! Format DE 112 tag 042 ! ! ! if intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id <> [ $len( intra^cntry^data^tkn.py^bnet. crd^accpt^tax^id ) * [ " " ] ] then begin found^natl^data := true; ! ! ! Format variable length tag 042 ! ! ! movd( sem.adnl^data^natl.cl^py.sub^fld^42.tag, "042" ); idx := $len( intra^cntry^data^tkn.py^bnet. crd^accpt^tax^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... ! movl( sem.adnl^data^natl.cl^py.sub^fld^42. crd^accpt^tax^id, intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.cl^py.sub^fld^42.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; #ADD 13344 PSTM^FRMT^SEM^ADDL^DATA int .emv^3ds^data^tkn( emv^3ds^data^tkn^def ); int emv^3ds^data^tkn^fnd := false; #ADD 13694 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pos^purch^cb^d( pstm ) and pstm.pre^auth^opt = "C" then begin movd( sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. purch^amt^only^ind, "1" ); end; #ADD l1389504 PSTM^FRMT^SEM^ADDL^DATA pos^data1^tkn.pmnt^info <> "0" and pos^data1^tkn.pmnt^info <> "3" then #DELETE l1389505/l1389507 PSTM^FRMT^SEM^ADDL^DATA #ADD 14491 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' emv^3ds^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @emv^3ds^data^tkn, tkn^lgth ) then begin emv^3ds^data^tkn^fnd := true; movd( sem.addl^data.info.authn^data^sub^fld^66.tag, "66" ); end; #ADD Q1449102 PSTM^FRMT^SEM^ADDL^DATA if emv^3ds^data^tkn^fnd then begin ! ! ! Populate DE 48, SE 66, SF 1 ! ! ! movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag, "01" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.lgth, "01" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, "2" ); sub^lgth := $len( sem.addl^data.info. authn^data^sub^fld^66. pgm^proto ); ! ! ! Populate DE 48, SE 66, SF 2 ! ! ! if emv^3ds^data^tkn.ds^txn^id <> [ $len( emv^3ds^data^tkn.ds^txn^id ) * [ " " ] ] then begin movd( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag, "02" ); movd( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.lgth, "36" ); move( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data, emv^3ds^data^tkn.ds^txn^id ); sub^lgth := sub^lgth + $len( sem.addl^data.info. authn^data^sub^fld^66.ds^txn^id ); end else begin movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, "1" ); end; end else #ADD Q144910h PSTM^FRMT^SEM^ADDL^DATA end; if sem.addl^data.info.authn^data^sub^fld^66. tag = "66" then begin #ADD l1480606 PSTM^FRMT^SEM^ADDL^DATA if sca^acq^data^tkn.sca^exempt^inds = "0080" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "07" ); end else if bnet^g.sppt^sca^g and pos^data1^tkn^fnd and pos^data1^tkn.pmnt^info <> "0" and pos^data1^tkn.pmnt^info <> "3" then begin if pos^data1^tkn.pmnt^ind = "R" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "03" ); end else if pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "01" ); end; end else #ADD f1480600 PSTM^FRMT^SEM^ADDL^DATA if sca^acq^data^tkn.pgm^proto = "1" and sem.addl^data.info.authn^data^sub^fld^66. tag <> "66" then begin movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag, "01" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.lgth, "01" ); move( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, sca^acq^data^tkn.pgm^proto ); end; #ADD f148060q PSTM^FRMT^SEM^ADDL^DATA if sem.addl^data.info.authn^data^sub^fld^66.pgm^proto. tag^data = "1" and sem.addl^data.info.authn^data^sub^fld^66.tag <> "66" then begin movd( sem.addl^data.info.authn^data^sub^fld^66.tag, "66" ); sub^lgth := $len( sem.addl^data.info. authn^data^sub^fld^66.pgm^proto ); call integer^ascii^( sem.addl^data.info. authn^data^sub^fld^66.lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; end; #ADD 16539 SEM^FRMT^AMT^TO^PSTM^AMT ( sem.resp^cde = "10" or sem.resp^cde = "87" ) then #DELETE 16540 SEM^FRMT^AMT^TO^PSTM^AMT #ADD 16543 SEM^FRMT^AMT^TO^PSTM^AMT pstm.pre^auth^opt <> "C" and #ADD 16576 SEM^FRMT^AMT^TO^PSTM^AMT if pos^purch^cb^d( pstm ) then begin pstm.tran.amt^2 := 0f; end; #ADD 17092+03 SEM^FRMT^NATL^DATA^TO^PSTM move( intra^cntry^data^tkn.jp^bnet.pmnt^opt^cde, sem.adnl^data^natl.jp.sub^fld^32.tag^data. pmnt^opt^cde ); move( intra^cntry^data^tkn.jp^bnet.bonuses^per^year, sem.adnl^data^natl.jp.sub^fld^32.tag^data. bonuses^per^year ); move( intra^cntry^data^tkn.jp^bnet.frst^bonus^month, sem.adnl^data^natl.jp.sub^fld^32.tag^data. frst^bonus^month ); move( intra^cntry^data^tkn.jp^bnet.frst^bonus^amt, sem.adnl^data^natl.jp.sub^fld^32.tag^data. frst^bonus^amt ); move( intra^cntry^data^tkn.jp^bnet.scnd^bonus^month, sem.adnl^data^natl.jp.sub^fld^32.tag^data. scnd^bonus^month ); move( intra^cntry^data^tkn.jp^bnet.scnd^bonus^amt, sem.adnl^data^natl.jp.sub^fld^32.tag^data. scnd^bonus^amt ); move( intra^cntry^data^tkn.jp^bnet.ttl^num^instl, sem.adnl^data^natl.jp.sub^fld^32.tag^data. ttl^num^instl ); move( intra^cntry^data^tkn.jp^bnet.frst^instl^month, sem.adnl^data^natl.jp.sub^fld^32.tag^data. frst^instl^month ); #ADD 1709210Z SEM^FRMT^NATL^DATA^TO^PSTM if sem.adnl^data^natl.jp.sub^fld^32.tag <> "032" then begin tkn^add^lgth := $offset( intra^cntry^data^tkn.jp^bnet. user^fld^se^030 ); #DELETE 1709210a/1709210e SEM^FRMT^NATL^DATA^TO^PSTM #ADD 17941`00 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 41, #DELETE 17941`01 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 17994 SEM^FRMT^RESP^CDE^TO^PSTM "87",! Purchase amount only ! "000",! Approved ! #ADD 18333 SEM^FRMT^XADV^TO^SEM^XACK if adv.adnl^data^natl.jp.sub^fld^30.tag = "030" then begin adnl^data^ntl^bit^d := 1; end; #ADD 18523 SEM^FRMT^XRESP^TO^PSTM^0210 ( ( sem.typ = sem^auth^response^d and ( sem.resp^cde = "10" or sem.resp^cde = "87" ) ) ) or #DELETE 18524 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 19184 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = "63" then begin movd( err^flg, "H" ); call hiswtkn^set^ps50^tkn( pstm, max^msg^lgth^l, ofst, false, tkn^lgth, pstm.data^flag, err^flg, ! rte^grp !, ! card^vrfy^flg ! ); end; #ADD 20026*03 SEM^FRMT^XRESP^TO^PSTM^0210 sem.adnl^data^natl.jp.sub^fld^31.tag = "031" then #DELETE 20026*04/20026*05 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD N2038400 SEM^FRMT^XRQST^TO^PSTM^0200 struct .emv^3ds^data^tkn( emv^3ds^data^tkn^def ); #DELETE 20388 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 20588 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = "61" and sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag^data. purch^amt^only^ind = "1" and partial^apprv^alwd^g and sem.proc^cde = sem^purch^cb^d then begin movd( pstm.pre^auth^opt, "C" ); end; ! of if tag = "61 and partial^apprv^ind = "1" ! #ADD v2139803 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "247" then begin movd( pos^data1^tkn.pmnt^info, "1" ); end; #ADD 21421 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.trc^id^sub^fld^63.tag <> "63" then begin if sem.pos^entry^mde = credential^on^file^entry^d then begin movd( pos^data1^tkn.pmnt^info, "3" ); end else begin movd( pos^data1^tkn.pmnt^info, "0" ); end; #DELETE 21422 /B214220D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD B2142409 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and sem.proc^cde = sem^purchase^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] <> "4" and sem.addl^data.info.trc^id^sub^fld^63.tag = "63" then begin if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "03" then begin movd( pos^data1^tkn.pmnt^ind, "R" ); add^pos^data1 := true; end else if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "01" then begin movd( pos^data1^tkn.pmnt^ind, "T" ); add^pos^data1 := true; end; end; #ADD 21520*02 SEM^FRMT^XRQST^TO^PSTM^0200 if adnl^data^ntl^bit^d and sem.adnl^data^natl.jp.sub^fld^30.tag = "030" then #DELETE 21520*03/21520*05 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE d2285900/N2285900 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N2285902 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! ! EMV 3D-Secure Data Token ! ! ! tkn^id ':=' emv^3ds^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, emv^3ds^data^tkn ); movl( emv^3ds^data^tkn.ds^txn^id, sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data ) ); if emv^3ds^data^tkn.ds^txn^id <> [ $len( emv^3ds^data^tkn.ds^txn^id ) * [ " " ] ] then begin tkn^add^lgth := $offset( emv^3ds^data^tkn.user^fld^aci ); ! ! ! The token must end on a word boundary. ! ! ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, emv^3ds^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1854, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1855, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1855 ); end; end; end; #ADD 22930#02 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^d( sem ) and not process^moneysend^txn^g then begin return resp^tran^not^supp^sem^l; end; #DELETE 22931 /22983 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 23258 SEM^FRMT^XRQST^TO^PSTM^0200 if base24^rel^g >= 5 then begin tkn^id ':=' sca^acq^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, sca^acq^data^tkn ); if sem.typ = sem^auth^request^d and sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag = "01" then begin if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "01" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0400" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "02" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "4000" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "03" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0800" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "04" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "8000" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "05" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0200" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "06" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "1000" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data = "07" then begin movd( sca^acq^data^tkn.sca^exempt^inds, "0080" ); end; end; if sem.typ = sem^auth^request^d and sem.addl^data.info.authn^data^sub^fld^66.tag = "66" and sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data <> " " then begin movl( sca^acq^data^tkn.pgm^proto, sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data ) ); end; if sem.typ = sem^auth^request^d and sem.pos^entry^mde = pan^auto^cntctlss^m^chip and sem.addl^data.info.wallet^pgm^sub^fld^26.tag = "26" and util^sca^wallet^id( sem.addl^data.info. wallet^pgm^sub^fld^26.tag^data.wallet^id ) then begin ! ! PIN/CDCVM ! movd( sca^acq^data^tkn.sca^ind, "2" ); end else if bnet^array^g.cvm^g = "1E" or bnet^array^g.cvm^g = "5E" then begin ! ! Signature ! movd( sca^acq^data^tkn.sca^ind, "3" ); end else if bnet^array^g.cvm^g = "1F" or bnet^array^g.cvm^g = "5F" then begin ! ! No Cardholder Verification ! movd( sca^acq^data^tkn.sca^ind, "0" ); end; if sca^acq^data^tkn <> [ $len( sca^acq^data^tkn ) * [ " " ] ] then begin tkn^add^lgth := $len( sca^acq^data^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, sca^acq^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1801, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 1802, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1802 ); end; end; ! of if tkn^result ! end; ! of if sca^acq^data^tkn <> spaces ! end; ! of base24^rel^g >= 5 ! #ADD 23969100 SEM^FRMT^XRVSL^TO^PSTM^0420 rvsl.adnl^data^natl.jp.sub^fld^30.tag = "030" then #DELETE 23969101/23969102 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 24122 SEM^FRMT^XRVSL^TO^SEM^XACK if rvsl.adnl^data^natl.jp.sub^fld^30.tag = "030" then begin adnl^data^ntl^bit^d := 1; end; #ADD 24513#0r UTIL^ADD^MONEYSEND^TKNS struct .p2p^txn2^tkn( p2p^txn2^tkn^def ); #ADD 24513#0s UTIL^ADD^MONEYSEND^TKNS int add^p2p^txn2^tkn := false; #ADD 24513#0x UTIL^ADD^MONEYSEND^TKNS int save^tkn^add^lgth; #ADD 24513#Ax SUB^PROCESS^RCV^DATA save^tkn^add^lgth := tkn^add^lgth; #ADD 24513#B1 SUB^PROCESS^RCV^DATA movl( p2p^txn2^tkn.mc^xfer.rcv^acct^num, moneysend^ref^data^d[ data^idx - tag^lgth ], tag^lgth ); if tag^lgth > tag^mov^lgth then begin add^p2p^txn2^tkn := true; movl( p2p^rcv^data^tkn.mc.acct^num, blanks, $len( p2p^rcv^data^tkn.mc.acct^num ) ); tkn^add^lgth := save^tkn^add^lgth; end; #ADD 24513*10 SUB^PROCESS^RCV^DATA if moneysend^ref^data^d[ data^idx ] = "18" then begin save^tkn^add^lgth := tkn^add^lgth; call sub^mov^ext^to^tkn( p2p^txn2^tkn.mc^xfer.rcv^acct^typ, $len( p2p^txn2^tkn.mc^xfer.rcv^acct^typ ), $offset( p2p^txn2^tkn.mc^xfer. rcv^acct^typ ) ); add^p2p^txn2^tkn := true; tkn^add^lgth := save^tkn^add^lgth; end else #ADD 24513#FD SUB^PROCESS^SENDER^DATA save^tkn^add^lgth := tkn^add^lgth; #ADD 24513#FH SUB^PROCESS^SENDER^DATA movl( p2p^txn2^tkn.mc^xfer.snd^acct^num, moneysend^ref^data^d[ data^idx - tag^lgth ], tag^lgth ); if tag^lgth > tag^mov^lgth then begin add^p2p^txn2^tkn := true; movl( p2p^sender^data^tkn.mc.acct^num, blanks, $len( p2p^sender^data^tkn.mc.acct^num ) ); tkn^add^lgth := save^tkn^add^lgth; end; #ADD 24513*1u SUB^PROCESS^SENDER^DATA if moneysend^ref^data^d[ data^idx ] = "18" then begin save^tkn^add^lgth := tkn^add^lgth; call sub^mov^ext^to^tkn( p2p^txn2^tkn.mc^xfer.snd^acct^typ, $len( p2p^txn2^tkn.mc^xfer.snd^acct^typ ), $offset( p2p^txn2^tkn.mc^xfer. snd^acct^typ ) ); add^p2p^txn2^tkn := true; tkn^add^lgth := save^tkn^add^lgth; end else #ADD 24513#Hk SUB^PROCESS^SENDER^DATA tkn^id ':=' p2p^txn2^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, p2p^txn2^tkn ); #ADD 24513#IS SUB^PROCESS^SENDER^DATA if add^p2p^txn2^tkn then begin tkn^id ':=' p2p^txn2^tkn^id^d; p2p^txn2^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^txn2^tkn.mc^xfer.user^fld^aci); tkn^found := false; ! ! ! The token must end on a word boundary ! ! ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! ! Token already exists, so update the token ! ! ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1851, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! ! If any other token add/update error encountered log ! ! a message and abend. ! ! ! if not tkn^found then begin call log^message^( 1852, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1852 ); end else begin call log^message^( 1853, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1853 ); end; end; ! of if tkn^rslt ! end; #ADD 25033v1O UTIL^BUILD^FAILED^CVM^MCC^TBL ?section util^build^sca^wallet^id^tbl ?page "util^build^sca^wallet^id^tbl" !##################################################################### !# # !# util^build^sca^wallet^id^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# SW-BNET-SCA-WALLET-IDS into the global table sca^wallet^id^tbl^g.# !# # !# INPUT PARAMETERS: # !# wallet^id^list - Pointer to the LCONF parameter # !# SW-BNET-SCA-WALLET-IDS text. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^build^sca^wallet^id^tbl( wallet^id^list, list^lgth ); string .wallet^id^list; int list^lgth; begin wlform( bad^wallet^cde, "Invalid wallet id '\?' detected in param " ',' " SW-BNET-SCA-WALLET-IDS. Value will be ignored" ) wlform( inv^param, "SW-BNET-SCA-WALLET-IDS param contains " ',' " invalid data. Default values will be used" ) int i; int j; string wallet^swap^area[ 0:2 ]; string .in^ptr := @wallet^id^list; string .tbl^ptr := @bnet^array^g.sca^wallet^id^tbl^g; set( bnet^g.num^sca^wallet^id^tbl^g , 0 ); j := ( list^lgth ) / 3; i := j * 3; if i = list^lgth then begin ! ! ! list^lgth a multiple of 3 ! ! ! for i := 0 to j - 1 do begin if all^numeric( wallet^id^list[ 3 * i ], 3 ) then begin tbl^ptr ':=' wallet^id^list[ 3 * i ] for 3 -> @tbl^ptr; increment^d( bnet^g.num^sca^wallet^id^tbl^g ); end else begin call log^message^( 4136, ! routing code !, @bad^wallet^cde, net.myname, evt_msg_severity_warn_l, @wallet^id^list[ 3 * i ], 3 ); end; end; ! of for ! end; if bnet^g.num^sca^wallet^id^tbl^g = 0 then begin bnet^g.num^sca^wallet^id^tbl^g:= 1; bnet^array^g.sca^wallet^id^tbl^g ':=' [ "000" ]; call log^message^( 4137, ! routing code !, @inv^param, net.myname, evt_msg_severity_warn_l ); end; sort^compare^lgth^g := 3; call quicksort( bnet^array^g.sca^wallet^id^tbl^g, bnet^g.num^sca^wallet^id^tbl^g, sort^compare^lgth^g, wallet^swap^area, util^compare^var ); end; ! of proc util^build^sca^wallet^id^tbl ! #ADD 26914*32 TRACE^SEM if hdr.adnl^data^natl.jp. sub^fld^32.tag = "032" then begin call ascii^integer( hdr.adnl^data^natl.jp. sub^fld^32.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.jp. sub^fld^32.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! of tag = "032" ! #ADD V269141K TRACE^SEM else if hdr.adnl^data^natl.cl^py. sub^fld^42.tag = "042" then begin call ascii^integer( hdr.adnl^data^natl.cl^py. sub^fld^42.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.cl^py.sub^fld^42.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end ! of tag = "042" ! #ADD 28674*0l TRACE^SEM if ptr[ length ] = "032" then begin movl( sem^ptr.adnl^data^natl.jp. sub^fld^32.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD V2867410 TRACE^SEM if ptr[ length ] = "042" then begin movl( sem^ptr.adnl^data^natl.cl^py. sub^fld^42.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD l298280V UTIL^FRMT^TXN^REF^DATA^TO^SEM int found^p2p^txn2^tkn := false; int .p2p^txn2^tkn( p2p^txn2^tkn^def ); #ADD l298286r SUB^PROCESS^RCV^DATA if found^p2p^txn2^tkn and p2p^txn2^tkn.mc^xfer.rcv^acct^num <> blanks for $len( p2p^txn2^tkn.mc^xfer.rcv^acct^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "11"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^txn2^tkn.mc^xfer.rcv^acct^num while " " -> @ptr; txtlgth := $min( $len( p2p^txn2^tkn.mc^xfer.rcv^acct^num ), $max( 0, ( @ptr '-' @p2p^txn2^tkn.mc^xfer.rcv^acct^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^txn2^tkn.mc^xfer.rcv^acct^num for txtlgth; data^idx := data^idx + txtlgth; end else #ADD l2982896 SUB^PROCESS^RCV^DATA if found^p2p^txn2^tkn and p2p^txn2^tkn.mc^xfer.rcv^acct^typ <> blanks for $len( p2p^txn2^tkn.mc^xfer.rcv^acct^typ ) then begin moneysend^ref^data^d[ data^idx ] ':=' "18"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^txn2^tkn.mc^xfer.rcv^acct^typ ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^txn2^tkn.mc^xfer.rcv^acct^typ for $len( p2p^txn2^tkn.mc^xfer.rcv^acct^typ ); data^idx := data^idx + $len( p2p^txn2^tkn.mc^xfer.rcv^acct^typ ); end; #ADD l29828DI SUB^PROCESS^SENDER^DATA if found^p2p^txn2^tkn and p2p^txn2^tkn.mc^xfer.snd^acct^num <> blanks for $len( p2p^txn2^tkn.mc^xfer.snd^acct^num ) then begin moneysend^ref^data^d[ data^idx ] ':=' "11"; data^idx := data^idx + tag^id^lgth^l; rscan p2p^txn2^tkn.mc^xfer.snd^acct^num while " " -> @ptr; txtlgth := $min( $len( p2p^txn2^tkn.mc^xfer.snd^acct^num ), $max( 0, ( @ptr '-' @p2p^txn2^tkn.mc^xfer.snd^acct^num ) + 1 ) ); call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, txtlgth ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^txn2^tkn.mc^xfer.snd^acct^num for txtlgth; data^idx := data^idx + txtlgth; end else #ADD l29828FZ SUB^PROCESS^SENDER^DATA if found^p2p^txn2^tkn and p2p^txn2^tkn.mc^xfer.snd^acct^typ <> blanks for $len( p2p^txn2^tkn.mc^xfer.snd^acct^typ ) then begin moneysend^ref^data^d[ data^idx ] ':=' "18"; data^idx := data^idx + tag^id^lgth^l; call integer^ascii( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, $len( p2p^txn2^tkn.mc^xfer.snd^acct^typ ) ); data^idx := data^idx + tag^lgth^fld^lgth^l; moneysend^ref^data^d[ data^idx ] ':=' p2p^txn2^tkn.mc^xfer.snd^acct^typ for $len( p2p^txn2^tkn.mc^xfer.snd^acct^typ ); data^idx := data^idx + $len( p2p^txn2^tkn.mc^xfer.snd^acct^typ ); end; #ADD l29828G8 SUB^PROCESS^SENDER^DATA tkn^id ':=' p2p^txn2^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^tkn, tkn^lgth ) and p2p^txn2^tkn.frmt^cde = "06" then begin found^p2p^txn2^tkn := true; end; #ADD 34513 UTIL^SAF^SEND ?section util^sca^wallet^id ?page "util^sca^wallet^id " !##################################################################### !# # !# util^sca^wallet^id # !# # !# This procedure searches the global table sca^wallet^id^tbl^g # !# for a matching wallet-id code. The table is built from entries # !# in the LCONF parameter SW-BNET-SCA-WALLET-IDS. # !# # !# INPUT PARAMETERS : # !# wallet^id - pointer to the wallet-id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - if the wallet-id is found in the table. # !# false - if not found. # !# # !##################################################################### int proc util^sca^wallet^id ( wallet^id ); string .wallet^id; begin int index; if wallet^id = blanks for $len( sem^def.addl^data.info. wallet^pgm^sub^fld^26.tag^data.wallet^id ) then begin return false; end; index := ut^binary^search( bnet^array^g.sca^wallet^id^tbl^g, $len( sem^def.addl^data.info. wallet^pgm^sub^fld^26. tag^data.wallet^id ), bnet^g.num^sca^wallet^id^tbl^g, 0, $len( sem^def.addl^data.info. wallet^pgm^sub^fld^26. tag^data.wallet^id ), wallet^id ); ! ! ! ut^binary^search returns -1 for not found which is incremented ! ! by 1 in order to return false. ! ! ! return increment^d( index ); end; ! of proc util^sca^wallet^id ! #ENDSCN = SW0O214 !#CMP2.28 08/20/20 BNETS 6151 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6151 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6151 * ******************************************************************************** #SCN = SW0O215 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6151 #NEWVERSION = 6152 #ADD 03821y0J ! 20AUG2020 velsamv ! Symptom: Banknet Release 20.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirement: ! - Strong Customer Authentication (SCA) Enhancements ! Procs Modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to: ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! PS60HIS0: PSHISOS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009232 #ADD 10428u02 INIT^BNET^G bnet^g.num^sca^wallet^id^tbl^g:= 1; #ADD 10428u06 INIT^BNET^G bnet^array^g.sca^wallet^id^tbl^g ':=' [ 69 * [ " " ] ]; bnet^array^g.sca^wallet^id^tbl^g ':=' [ "000" ]; bnet^array^g.cvm^g ':=' [ " " ]; #ADD 11387 PARAMPROC call log^message^( 2132, !routing code!, @badstrt, #DELETE 11388 PARAMPROC #ADD 11399 PARAMPROC call log^message^( 2152, !routing code!, @badincr, #DELETE 11400 PARAMPROC #ADD 12676y02 INIT^PARAMPROC "P", "SW-BNET-SCA-WALLET-IDS ", #ADD 13501y0F INIT^PARAMPROC ! ! ! SW-BNET-SCA-WALLET-IDS ! ! ! if not ferror then begin call util^build^sca^wallet^id^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; #ENDSCN = SW0O215 !#CMP2.28 08/20/20 BNETLIBS62148FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62148 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62148 * ******************************************************************************** #SCN = SW0O220 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62148 #NEWVERSION = 62149 #ADD =078500v ! 20AUG2020 wielerk ! Symptom: A reversal can become stuck in a SAF if the length of ! DE-48 ( addl data ) is incorrect. ! Problem: If a reversal is sent to to Mastercard with an incorrect ! length in DE-48, a 0620 is returned to the interface. ! This leaves the SAF timer to expire leaving the 0400 ! with the bad length at the top of the SAF. ! Fix: Modified the interface to add the length of existing ! tag 44 data using the value in the tag and not $len ! of the substruct. ! Proc Modified: util^frmt^addl^data^to^xrvsl ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3142472. #ADD Q290531s UTIL^FRMT^ADDL^DATA^TO^XRVSL call ascii^integer^ ( sem.addl^data.info. visa^ecom^xid^sub^fld^44.lgth, tag^lgth ); #DELETE Q290531t UTIL^FRMT^ADDL^DATA^TO^XRVSL #REPLACE Q290531u UTIL^FRMT^ADDL^DATA^TO^XRVSL de48^lgth := de48^lgth + tag^lgth + 4; #DELETE Q290531v/Q290531w UTIL^FRMT^ADDL^DATA^TO^XRVSL #ENDSCN = SW0O220 !#CMP2.28 08/28/20 BNETLIBS62149FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62149 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62149 * ******************************************************************************** #SCN = SW0O252 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62149 #NEWVERSION = 62150 #ADD >078500F ! 28AUG2020 wielerk ! Symptom: While queueing, the interface abended with a trap #0. ! Problem: The content of DE-48.SE-43 contained "02" in the exact ! position needed to cause a C7 token to be added. ! The problem was caused because the 2 bytes that would ! represent the tag 02 length contained an alpha value ! causing the invocation of ascii^integer to fail and ! leaving the integer with leftover data that was over ! 34,000 bytes. ! Fix: Modified the interface to remove this code as DE-48. ! SE-43 is not TLV formatted at this time. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Replace file: ! SW60BNET: BNETLOGM ! Reference: Case #3148253. #DELETE 22646 /22736 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0O252 !#CMP2.28 09/15/20 BNETLIBS62150FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62150 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62150 * ******************************************************************************** #SCN = SW0O271 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62150 #NEWVERSION = 62151 #ADD |078500I ! 15SEP2020 wielerk ! Symptom: Interface abends with trap #4095. ! Problem: If tkn^add^info returns an error other than overlimit ! the interface emits EMS message #4095 and abends. ! Fix: Modified the interface to not abend if the token ! error is token exists. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3153251. #ADD 19395923 SEM^FRMT^XRESP^TO^PSTM^0210 if tkn^result <> tkn^exist^l then #ENDSCN = SW0O271 !#CMP2.28 09/16/20 BNETS 6152 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6152 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6152 * ******************************************************************************** #SCN = SW0O276 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6152 #NEWVERSION = 6153 #ADD 03821z0I ! 14SEP2020 jayaprm ! Symptom: BNET blind approves refund transactions even if service ! is not allowed. ! Problem: All the refund transactions are blind approved by the ! the interface which is incorrect. Blind approve should ! happen only to the refund transactions when its request ! cannot be sent to the MasterCard or when a response ! is not received from MasterCard. ! Fix: Modified the interface to blind approve the refund ! transactions only when the request cannot be sent to ! MasterCard or when a response is not received from ! MasterCard. ! Procs Modified: pstm^0200^route ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Run Make. ! Reference: Case #3156871 #ADD 15717w0B SUB^PSTM^ROUTE not pos^pmnt^d( pstm ) and ( substate = sub^rqst^down^l or substate = sub^timeout^l ) then #DELETE 15717w0C SUB^PSTM^ROUTE #ENDSCN = SW0O276 !#CMP2.28 10/19/20 BNETLIBS62151FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62151 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62151 * ******************************************************************************** #SCN = SW0O290 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62151 #NEWVERSION = 62152 #ADD @078500B ! 19OCT2020 jayaprm ! Symptom: SCA Acquiring Data Token FH adding with spaces ! Problem: FH token is added to the transaction even when data is ! not mapped to the FH token. ! Fix: Fixed the code to not to add the FH token to the ! transaction when it is filled with the spaces. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3169202. ! 19OCT2020 jayaprm ! Symptom: MasterCard 0600 reject on 0400 - DE 112 SE 33 (UK) ! Debt Repayment ! Problem: In reversal, DE 112 is populated for UK debt repayment ! transaction, which is incorrect. ! Fix: Fixed the code to turn the bit DE 112 off for UK ! debt repayment transaction. ! Procs Modified: pstm^frmt^0420^to^acq^xrvsl ! sem^frmt^xrqst^to^sem^xrvsl ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3172019. ! 19OCT2020 jayaprm ! Symptom: MC DE 61 SF 10 is not set to 0 when DE 61, SF 4 = 0 ! (Cardholder present); and SF 5 = 1 (Card not present) ! Problem: For Credential On File transactions, MasterCard expects ! DE61 SF10 to be set with value 0 but interface sets ! value 7. ! Fix: Fixed the code to remove the lines which set DE61 SF10 ! to 7( Transponder Transaction ). ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3171225. #DELETE 09819 /09824 SUB^LOG^ERROR #ADD T1154907 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.ntl^pos^data.cntry^cde = "826" and sem.proc^cde.byte[ 0 ] = sem^purchase^d then begin adnl^data^ntl^bit^d := 0 end else #REPLACE =232581d SEM^FRMT^XRQST^TO^PSTM^0200 if sca^acq^data^tkn.sca^exempt^inds <> #REPLACE T2345402/T2345402 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRVSL sem^argcta^instl^txn^d( sem ) or ( sem.ntl^pos^data.cntry^cde = "826" and sem.proc^cde.byte[ 0 ] = sem^purchase^d ) then #ENDSCN = SW0O290 !#CMP2.28 10/30/20 BNETDDLS6074 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6074 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6074 * ******************************************************************************** #SCN = SW0O298 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00262{0R * 30OCT2020 VulliL * Symptom: Issue with format of DE 38. * Problem: BNET interface includes comments which specifies the * format of DE 38. * Fix: Modified the interface by deleting the comments that * specify the required format of DE 38 for different * networks. * Dependency: Apply fix to: * SW60BNET: BNETDDLS. * Run Make. * Reference: Case #3185356. #DELETE 00989 /00998 SEM #ENDSCN = SW0O298 !#CMP2.28 11/09/20 BNETS 6153 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6153 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6153 * ******************************************************************************** #SCN = SW0O312 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6153 #NEWVERSION = 6154 #ADD 03821#0I ! 06NOV2020 wielerk ! Symptom: Interface abends while queueing and processing a late ! SAF response. ! Problem: If the interface receives a late SAF response to a ! message recently deleted, processing is guided by the ! response message type even if the SAF record retrieved ! is not a message of that type. ! Fix: Modified the interface to add the first 2 bytes of ! SAF message type to SAF prikey so that the correct SAF ! timer is retrieved. ! Procs Modified: sem^acq^rvsl^resp ! sem^admin^response ! sem^advice^response ! sem^chargeback^response ! sem^file^request^response ! sem^reversal^response ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS ! Reference: Case #3180343. #REPLACE 17272 SEM^ACQ^RVSL^RESP string key[ 0:1 ] := [ 2 * [ " " ] ]; #REPLACE 17319 /17319 OFFSET 0 SEM^ACQ^RVSL^RESP key ':=' sem.typ for 2; if not find^specific^timer( tcb^g, type^saf^l, ! timer subtype !, key, 1 ) then begin return; end; call timer^delete( tcb^g, type^saf^l ); call util^saf^delete( saf, $len( saf^bnet^def ) ); #DELETE 17320 /17325 SEM^ACQ^RVSL^RESP #REPLACE 18396 SEM^ADMIN^RESPONSE string key[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 18416 SEM^ADMIN^RESPONSE key ':=' sem.typ for 2; if not find^specific^timer( tcb^g, type^saf^l, ! timer subtype !, key, 1 ) then begin return; end; call timer^delete( tcb^g, type^saf^l ); call util^saf^delete( saf, $len(saf^bnet^def) ); set ( pct.station[ sta^x ].t^o^ctr, 0 ); #DELETE 18417 /18423 SEM^ADMIN^RESPONSE #REPLACE 18752 SEM^ADVICE^RESPONSE string key[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 18781J0H SEM^ADVICE^RESPONSE key ':=' sem.typ for 2; if find^specific^timer( tcb^g, type^saf^l, ! timer subtyp !, key, 1 ) then #DELETE 18781J0I/18782 SEM^ADVICE^RESPONSE #REPLACE 19319 SEM^CHARGEBACK^RESPONSE string key[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 19339 SEM^CHARGEBACK^RESPONSE key ':=' sem.typ for 2; if find^specific^timer( tcb^g, type^saf^l, ! timer subtype !, key, 1 ) then #DELETE 19340 SEM^CHARGEBACK^RESPONSE #REPLACE 19685 /19686 SEM^FILE^REQUEST^RESPONSE .txt[ 0:29 ] := [ 30 * [ 0 ] ], key[ 0:1 ] := [ 2 * [ " " ] ]; #REPLACE 19702 /19702 OFFSET 0 SEM^FILE^REQUEST^RESPONSE key ':=' sem.typ for 2; if not find^specific^timer( tcb^g, type^saf^l, ! timer subtype !, key, 1 ) then #DELETE 19703 SEM^FILE^REQUEST^RESPONSE #REPLACE 22710 SEM^REVERSAL^RESPONSE string key[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 22713 SEM^REVERSAL^RESPONSE key ':=' sem.typ for 2; if find^specific^timer( tcb^g, type^saf^l, ! timer subtype !, key, 1 ) then #DELETE 22714 SEM^REVERSAL^RESPONSE #ENDSCN = SW0O312 !#CMP2.28 11/09/20 BNETLIBS62152FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62152 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62152 * ******************************************************************************** #SCN = SW0O313 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62152 #NEWVERSION = 62153 #ADD \078500d ! 06NOV2020 wielerk ! Symptom: Interface abends while queueing and processing a late ! SAF response. ! Problem: If the interface receives a late SAF response to a ! message recently deleted, processing is guided by the ! response message type even if the SAF record retrieved ! is not a message of that type. ! Fix: Modified the interface to add the first 2 bytes of ! SAF message type to SAF prikey so that the correct SAF ! timer is retrieved. ! Proc Modified: utl^saf^send ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS ! Reference: Case #3180343. #REPLACE 34440 UTIL^SAF^SEND string typ[ 0:3 ] := [ 4 * [ " " ] ]; #ADD 34498 UTIL^SAF^SEND movl( typ, saf.rec^data, 4 ); call translate( typ, 4, ebcdic^to^ascii^l ); userbuf.prikey ':=' typ for 2; #ENDSCN = SW0O313 !#CMP2.28 11/10/20 BNETLIBS62153FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 62153 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 62153 * ******************************************************************************** #SCN = SW0O314 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 62153 #NEWVERSION = 62154 #ADD ]078500F ! 11NOV2020 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 2 ! Problem: None ! Fix: The interface has been modified to ensure that MITs are ! identified correctly, both in request messages sent ! outbound to the network and in request messages received ! inbound from the network. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: WO #009106. #ADD =0963103 SUB^LOG^ERROR ( pos^data1^tkn.pmnt^ind <> " " ) then #DELETE =0963104/=0963105 SUB^LOG^ERROR #ADD =0963108 SUB^LOG^ERROR ! in the EEA. ! #DELETE =0963109 SUB^LOG^ERROR #ADD 09705s01 SUB^LOG^ERROR sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" then #DELETE 09705s02/09705s04 SUB^LOG^ERROR #ADD 10727 PSTM^FRMT^0210^TO^XRESP ( pos^data1^tkn.pmnt^ind <> " " ) then #DELETE 10728 /10729 PSTM^FRMT^0210^TO^XRESP #ADD =148060H PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn.pmnt^ind <> " " then #DELETE =148060I/=148060J PSTM^FRMT^SEM^ADDL^DATA #ADD =2142100 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.trc^id^sub^fld^63.tag <> "63" and ( sem.addl^data.info.mrch^inds^sub^fld^22.tag <> "22" or ( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data <> "01" and sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data <> "03" ) ) then #DELETE =2142101 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0O314 !#CMP2.28 11/30/20 BNETLIBS6300 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6300 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6300 * ******************************************************************************** #SCN = SW0O327 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6300 #NEWVERSION = 6301 #ADD 11002 ! 30NOV2020 jhas ! Symptom: Banknet 20.Q4 Miscellaneous Functional Enhancements. ! Problem: None ! Fix: AN 4233 - Enhanced AAV Verifiaction Updates. ! AN 4309 - Data Integrity Monitoring Program, New Edits ! for Mastercard Identity Check. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: WO #009279. #ADD 14647 PSTM^FRMT^0210^TO^XRESP if sem.resp^cde = "65" and sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin ! ! ! Replace response code "65" with response code "57" in an ! ! electronic commerce transaction. ! ! ! movd( sem.resp^cde, "57" ); end; #ADD 34652 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ i ].rslt^1 = "M" then begin ! ! ! Passed validation, but currency mismatch. ! ! ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "R" ); end else #ENDSCN = SW0O327 !#CMP2.28 12/04/20 BNETS 6154 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6154 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6154 * ******************************************************************************** #SCN = SW0O336 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6154 #NEWVERSION = 6155 #ADD 03821$0K ! 04DEC2020 jayaprm ! Symptom: PSD2 SCA - FH.SCA-IND takes value from previous ! transaction. ! Problem: Non EMV 3DS transactions are approved, because the ! FH.SCA-IND takes value from the previous transaction. ! Fix: Modified the interface to initialize bnet^array^g.cvm^g ! to spaces, which has been added as part of SCA changes. ! Procs Modified: sem^^input^from^station ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Reference: Case #3204548. #ADD 17168 SEM^^INPUT^FROM^STATION bnet^array^g.cvm^g ':=' [ " " ]; #ENDSCN = SW0O336 !#CMP2.28 12/04/20 BNETDDLS6075 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6075 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6075 * ******************************************************************************** #SCN = SW0O337 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00262}0C * 03DEC2020 jayaprm * Symptom: DE120 fails to return extended EBCDIC data in response. * Problem: If 0100 request message has DE120 with extended EBCDIC * data, then in 0110 response interface should echo back * with extended EBCDIC data present in DE120. But BNET * interface doesn't echo extended EBCDIC characters of * DE120 in 0110 response message. * Fix: ADDR field of DE120 has been redefined to store raw * data of DE120 received in the request message. * Dependency: Apply fix to: * SW60BNET: BNETDDLS, BNETLIBS * Run Make. * Reference: Case #3196206 #ADD 01411bA8 SEM 04 addr-r redefines addr. 06 addr-ext pic x(20). 06 addr-orig pic x(20). #ENDSCN = SW0O337 !#CMP2.28 12/04/20 BNETLIBS6301 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6301 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6301 * ******************************************************************************** #SCN = SW0O338 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6301 #NEWVERSION = 6302 #ADD 11002A0D ! 03DEC2020 jayaprm ! Symptom: DE120 fails to return extended EBCDIC data in response. ! Problem: If 0100 request message has DE120 with extended EBCDIC ! data, then in 0110 response interface should echo back ! with extended EBCDIC data present in DE120. But BNET ! interface doesn't echo extended EBCDIC characters of ! DE120 in 0110 response message. ! Fix: Interface has been enhanced to echo back extended ! EBCDIC data of DE120 in 0110 response message, if ! the length of DE120 is greater than 16 and less than ! or equal to 36. ! Procs Modified: util^collapse^sem ! util^expand^sem ! Dependency: Apply fix to: ! SW60BNET: BNETDDLS, BNETLIBS ! Run Make. ! Reference: Case #3196206 #ADD 44662 TRACE^SEM ! ! If the length of DE120 is greater than 16 and less ! than or equal to 36, then move the raw address data ! stored at 36th byte of the SEM to the address field ! of DE120. ! if hdr.typ = sem^auth^response^d and index = 119 and length > 16 and length <= 36 then begin ptr[ 16 ] ':=' sem[ offset + 36 ] for length - 16; end; #ADD 48608 TRACE^SEM ! ! If the length of DE120 is greater than 16 and less ! than or equal to 36, then move the raw address data ! present in ADDR-EXT field of the SEM to ADDR-ORIG ! field of SEM, in order to use it in response. ! if sem^ptr.typ = sem^auth^request^d and index = 119 and (length > 16 and length <= 36) then begin movl( sem^ptr.crdhldr^addr.addr^r.addr^orig, sem^ptr.crdhldr^addr.addr^r.addr^ext, $len( sem^ptr.crdhldr^addr.addr^r.addr^ext ) ); end; #ENDSCN = SW0O338 !#CMP2.28 01/04/21 BNETDDLS6076 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6076 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6076 * ******************************************************************************** #SCN = SW0P001 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0026200E * 04JAN2021 VulliL * Symptom: Banknet 20.Q4 Miscellaneous Functional Enhancements. * Problem: None. * Fix: Added a definition for SE 007 to the SRVCS structure * within the DE 112 definition. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Run Make. * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #009279 #ADD 01411o0I SEM 06 sub-fld-7. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 instl-plan-typ pic x(2). 10 num-instl pic x(2). 10 num-gratuity pic x(2). 10 tran-crncy-cde pic x(3). #ADD 01411$0Q SEM 06 user-fld-aci pic x(719). #DELETE 01411$0R SEM #ENDSCN = SW0P001 !#CMP2.28 01/04/21 BNETG 60122FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60122 * ******************************************************************************** #SCN = SW0P002 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k000260P ! 04JAN2021 VulliL ! Symptom: Banknet 20.Q4 Miscellaneous Functional Enhancements. ! Problem: None. ! Fix: Added a new define to identify a Mexcta installment ! transaction. ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009279 #ADD 00233)05 define sem^mexcta^instl^txn^d( x ) = ( x.proc^cde = sem^purchase^d and ( x.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data = "MEXCTA" ) )#; #ENDSCN = SW0P002 !#CMP2.28 01/04/21 BNETLIBS6302 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6302 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6302 * ******************************************************************************** #SCN = SW0P003 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6302 #NEWVERSION = 6303 #ADD 11002B0I ! 04JAN2021 VulliL ! Symptom: Banknet 20.Q4 Miscellaneous Functional Enhancements. ! Problem: None. ! Fix: Mexcta Installment Payment - Mastercard supports an ! intra-country installment service for cardholder ! purchase transactions transactions in Mexico, known as ! Mexcta. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009279 #ADD 14379 SUB^LOG^ERROR sem.ntl^pos^data.cntry^cde = "032" or ! Argentina ! sem.ntl^pos^data.cntry^cde = "076" or ! Brazil ! sem.ntl^pos^data.cntry^cde = "484" ) and ! Mexico ! ( found^pos^data1^tkn and pos^data1^tkn.pmnt^ind = "I" ) and #DELETE 14380 /14386 SUB^LOG^ERROR #ADD 14391 SUB^LOG^ERROR ! and Argentina, Brazil, Mexico ! #ADD 14735 PSTM^FRMT^0210^TO^XRESP not sem^mexcta^instl^txn^d( sem ) and #DELETE 14736 PSTM^FRMT^0210^TO^XRESP #ADD 14747 PSTM^FRMT^0210^TO^XRESP ! messages except Installment Payments for Greece, ! ! Mexico, Argentina, ! #DELETE 14748 PSTM^FRMT^0210^TO^XRESP #ADD 15648 PSTM^FRMT^0210^TO^XRESP if ( sem^dmstc^instl^txn^d( sem ) or sem^mexcta^instl^txn^d( sem ) ) and #DELETE 15649 PSTM^FRMT^0210^TO^XRESP #ADD 15652 PSTM^FRMT^0210^TO^XRESP ! Installment Payment for Greece or Mexico ! #DELETE 15653 PSTM^FRMT^0210^TO^XRESP #ADD 16207 PSTM^FRMT^0420^TO^ACQ^XRVSL ( sem.ntl^pos^data.cntry^cde = "032" or ! Argentina ! sem.ntl^pos^data.cntry^cde = "484" ) then ! Mexico ! #DELETE 16208 PSTM^FRMT^0420^TO^ACQ^XRVSL #ADD 17579 PSTM^FRMT^INSTL^PMNT^TO^SEM if sem.ntl^pos^data.cntry^cde = "484" then ! Mexico ! begin tkn^id ':=' pos^data1^tkn^id^d; found^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, lgth ); if found^pos^data1^tkn and pos^data1^tkn.pmnt^ind = "I" and pos^data1^tkn.num^instl <> blanks for $len( pos^data1^tkn.num^instl ) and pos^data1^tkn.num^instl <> "00" then begin ! ! ! installment data found, ! ! populate DE 112 subfield 7 using POS Data1 token ! ! ! found^instl^data := true; if pos^data1^tkn.instl^plan^typ <> [ $len( pos^data1^tkn.instl^plan^typ ) * [" "] ] then begin move( sem.adnl^data^natl.srvc.sub^fld^7.tag^data. instl^plan^typ, pos^data1^tkn.instl^plan^typ ); end else begin movd( sem.adnl^data^natl.srvc.sub^fld^7.tag^data. instl^plan^typ, "00" ); end; move( sem.adnl^data^natl.srvc.sub^fld^7.tag^data. num^instl, pos^data1^tkn.num^instl ); move( sem.adnl^data^natl.srvc.sub^fld^7.tag^data. num^gratuity, pos^data1^tkn.num^mm^gratuity ); move( sem.adnl^data^natl.srvc.sub^fld^7.tag^data. tran^crncy^cde, pstm.orig^crncy^cde ); end; ! of installment data in POS Data1 token if found^instl^data then begin ! ! ! Add DE 48 SE 95 ! ! ! if sem.addl^data.info.mc^prmtn^cde^sub^fld^95 <> "95" then begin movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.tag, "95" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95.lgth, "06" ); movd( sem.addl^data.info.mc^prmtn^cde^sub^fld^95. tag^data, "MEXCTA" ); call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. mc^prmtn^cde^sub^fld^95 ); call integer^ascii^( sem.addl^data.lgth, lgth ); end; ! ! ! Add DE 112 subfield 7 ! ! ! movd( sem.adnl^data^natl.srvc.sub^fld^7.tag, "007" ); movd( sem.adnl^data^natl.srvc.sub^fld^7.lgth, "009" ); call integer^ascii^( sem.adnl^data^natl.lgth, $len( sem.adnl^data^natl.srvc. sub^fld^7 ) ); end; return found^instl^data; end; ! of mexcta installment transaction ! #ADD 30477 SEM^FRMT^XRESP^TO^PSTM^0210 if sem^dmstc^instl^txn^d( sem ) or sem^mexcta^instl^txn^d( sem ) then #DELETE 30478 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 30480 SEM^FRMT^XRESP^TO^PSTM^0210 ! Installment Payment for Greece or Mexico ! #DELETE 30481 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33328 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^mexcta^instl^txn^d( sem ) then begin ! ! ! Installment Payment for Mexico ! ! ! if adnl^data^ntl^bit^d and sem.adnl^data^natl.srvc.sub^fld^7.tag = "007" and ( bnet^g.sppt^instl^txn^g = 2 or bnet^g.sppt^instl^txn^g = 3 ) and sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) then begin ! ! ! Add the POS Data1 Token ("CH") ! ! ! movd( pos^data1^tkn.pmnt^ind, "I" ); move( pos^data1^tkn.instl^plan^typ, sem.adnl^data^natl.srvc.sub^fld^7.tag^data. instl^plan^typ ); move( pos^data1^tkn.num^instl, sem.adnl^data^natl.srvc.sub^fld^7.tag^data. num^instl ); movd( pos^data1^tkn.instl^gratuity^prd, "2" ); move( pos^data1^tkn.num^mm^gratuity, sem.adnl^data^natl.srvc.sub^fld^7.tag^data. num^gratuity ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end; end ! of if sem^dmstc^instl^txn^d else #ADD 36483 SEM^FRMT^XRQST^TO^SEM^XRESP not sem^mexcta^instl^txn^d( sem ) and #DELETE 36484 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 36494 SEM^FRMT^XRQST^TO^SEM^XRESP ! Mexico and Argentina and ! #ADD 36596 SEM^FRMT^XRQST^TO^SEM^XRVSL sem^mexcta^instl^txn^d( sem ) or #DELETE 36597 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 44133 TRACE^SEM if hdr.adnl^data^natl.srvc. sub^fld^6.tag = "006" or hdr.adnl^data^natl.srvc. sub^fld^7.tag = "007" then begin if hdr.adnl^data^natl.srvc. sub^fld^7.tag = "007" then begin call ascii^integer( hdr.adnl^data^natl. srvc.sub^fld^7.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc.sub^fld^7. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end else if hdr.adnl^data^natl.srvc. sub^fld^6.tag = "006" then begin call ascii^integer( hdr.adnl^data^natl. srvc.sub^fld^6.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.srvc.sub^fld^6. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; #DELETE 44134 /44147 TRACE^SEM #ADD 48263 TRACE^SEM if ptr[ length ] = "007" then begin movl( sem^ptr.adnl^data^natl.srvc. sub^fld^7.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ENDSCN = SW0P003 !#CMP2.28 01/04/21 BNETS 6155 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6155 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6155 * ******************************************************************************** #SCN = SW0P004 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6155 #NEWVERSION = 6156 #ADD 03821%0C ! 04JAN2021 VulliL ! Symptom: Banknet 20.Q4 Miscellaneous Functional Enhancements. ! Problem: None. ! Fix: Mexcta Installment Payment - Mastercard supports an ! intra-country installment service for cardholder ! purchase transactions transactions in Mexico, known as ! Mexcta. ! Proc Modified: sem^advice^pos ! Dependency: Apply fixes to: ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Run Make. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009279 #REPLACE 03862C01 BNETS^61^55 PROC BNETS^61^54 MAIN; #ADD 18623 SEM^ADVICE^POS sem^mexcta^instl^txn^d( sem ) or sem^argcta^instl^txn^d( sem ) or sem^hgm^instl^txn^d( sem ) or #ENDSCN = SW0P004 !#CMP2.28 02/02/21 BNETLIBS6303 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6303 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6303 * ******************************************************************************** #SCN = SW0P013 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6303 #NEWVERSION = 6304 #ADD 11002C0O ! 02FEB2021 wielerk ! Symptom: Interface abends if external amount field from MC is ! binary zeroes. ! Problem: The local fixed variable, tran^amt, is not initialized ! and if the external amount field is not ASCII then the ! invocation of ascii^fixed fails and tran^amt will be ! set to whatever is left in memory. ! Fix: Modified the interface to initialize the local fixed ! amount field to 0f. ! Procs Modified: sem^frmt^amt^to^pstm^amt ! pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3236925. #REPLACE 16694 PSTM^FRMT^AMT^TO^SEM^AMT pstm^amt := 0f; #REPLACE 22799 SEM^FRMT^AMT^TO^PSTM^AMT tran^amt := 0f; #ADD 22956 SEM^FRMT^AMT^TO^PSTM^AMT if sem.tran^amt <> zeroes for $len( sem.tran^amt ) and pstm.tran.amt^1 = 0f then begin return false; end; #DELETE 22957 SEM^FRMT^AMT^TO^PSTM^AMT #ENDSCN = SW0P013 !#CMP2.28 02/16/21 BNETG 60123FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60123 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60123 * ******************************************************************************** #SCN = SW0P024 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l000260C ! 16FEB2021 wielerk ! Symptom: Process abends with Trap #3 circumstances. ! Problem: The dump occurs when an external ATM request is denied ! by the interface and the ILF header record is being ! updated. ! Fix: Added a new literal, resp^dup^detect^l, to be used ! for processing a duplicate. ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETG, BNETS ! Run Make. ! Reference: Case #3241520. #REPLACE 00273N02 resp^dup^detect^l = 94, #ENDSCN = SW0P024 !#CMP2.28 02/16/21 BNETS 6156 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6156 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6156 * ******************************************************************************** #SCN = SW0P025 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6156 #NEWVERSION = 6157 #ADD 03821&0F ! 16FEB2021 wielerk ! Symptom: Process abends with Trap #3 circumstances. ! Problem: The dump occurs when an external ATM request is denied ! by the interface and the ILF header record is being ! updated. ! Fix: Modified the interface to bypass logging a duplicate ! transaction to the ILF. ! Proc Modified: sem^request^deny ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETG, BNETS ! Run Make. ! Reference: Case #3241520. #REPLACE 21452 /21452 OFFSET 0 ELIM^DE54^CASH^BACK^AMT if rcode = resp^dup^detect^l then begin return; end; #ENDSCN = SW0P025 !#CMP2.28 02/16/21 BNETDDLS6077 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6077 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6077 * ******************************************************************************** #SCN = SW0P028 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0026210C * 17FEB2021 VulliL * Symptom: Banknet Release 21.Q2 Functional Enhancements * Case #2802056: AN 1275-Authorization Best Practices and * Support Tools for the Latin America and * Caribbean Region * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * AN 1430 - Revised Standards-Refund Transactions * AN 1638 - Enabling Tokenized, Contactless ATM * Transactions * AN 4022 - Money Transfer Sender and Receiver Data * Enhancement * AN 4203 - Mastercard MoneySend and Funding Transactions * Program Enhancements * AN 4209 - Cross-Border Fee Manager ECB Rate Service * AN 4224 - New Merchant Country of Origin Identifier * AN 4315 - Brazil Debit Mastercard Flex Card Service * Enhancements for POS * Case #2802056: AN 1275-Authorization Best Practices and * Support Tools for the Latin America and * Caribbean Region * Dependency: Apply fixes to: * BA60DDL: DDLBATKN * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * SW60IBNT: BNETEMVS * Run Make. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0221M, ILB0221R, ILB0221S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0221M. Run the ILF conversion using ILB0221R. * Reference: WO #009282 * Case #2802056 #ADD 01157z0t SEM 08 cntry-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). #ADD 01157]0q SEM * * Reference Currency Data * Subfield tag = 60 * Contains information about the reference currency conversion rate * 06 adnl-srvc-data-sub-fld-60. 08 tag pic 99. 08 lgth pic 99. 08 ref-conv-rate. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(8). 08 ref-conv-rate-diff-sign. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 ref-conv-rate-pcnt-diff. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(6). 04 user-fld pic x(38). #DELETE 01157]0r SEM #ADD 02760<00 SAF-BNET * Switch token version (ver-id) will be "21". #DELETE 02760<01 SAF-BNET #ADD 02760#01 SAF-BNET 02 acct-typ-ind pic x(1). #DELETE 02760#02 SAF-BNET #ADD 02760=01 SAF-BNET 02 ref-crncy. 04 conv-rate pic x(8). 04 conv-rate-diff-sign pic x(1). 04 conv-rate-pcnt-diff pic x(6). 02 user-fld-aci pic x. #ENDSCN = SW0P028 !#CMP2.28 02/16/21 BNETG 60124FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60124 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60124 * ******************************************************************************** #SCN = SW0P029 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m000260D ! 17FEB2021 VulliL ! Symptom: Banknet Release 21.Q2 Functional Enhancements ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! AN 1430 - Revised Standards-Refund Transactions ! AN 1638 - Enabling Tokenized, Contactless ATM ! Transactions ! AN 4022 - Money Transfer Sender and Receiver Data ! Enhancement ! AN 4203 - Mastercard MoneySend and Funding Transactions ! Program Enhancements ! AN 4209 - Cross-Border Fee Manager ECB Rate Service ! AN 4224 - New Merchant Country of Origin Identifier ! AN 4315 - Brazil Debit Mastercard Flex Card Service ! Enhancements for POS ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0221M, ILB0221R, ILB0221S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0221M. Run the ILF conversion using ILB0221R. ! Reference: WO #009282 ! Case #2802056 #ADD c0016600 define sem^funding^txn^d( x ) = ( ( x.proc^cde = sem^purchase^d or x.proc^cde = sem^return^d ) and #DELETE c0016601 #ADD 00175^00 define moneysend^funding^txn^d = "6538"#; #DELETE 00175^01 #ADD 00176302 define funding^txn^sub^d = "C000"#; #DELETE H0023300/H002330G #ADD 00233z05 x.merch^typ = "6537" ) )#; #DELETE 00233z06/H002330I #ADD B0043501 int refund^approve^blind^g; #DELETE B0043502 #ENDSCN = SW0P029 !#CMP2.28 02/16/21 BNETLIBS6304 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6304 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6304 * ******************************************************************************** #SCN = SW0P030 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6304 #NEWVERSION = 6305 #ADD 11002D0F ! 17FEB2021 VulliL ! Symptom: Banknet Release 21.Q2 Functional Enhancements ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! AN 1430 - Revised Standards-Refund Transactions ! AN 1638 - Enabling Tokenized, Contactless ATM ! Transactions ! AN 4022 - Money Transfer Sender and Receiver Data ! Enhancement ! AN 4203 - Mastercard MoneySend and Funding Transactions ! Program Enhancements ! AN 4209 - Cross-Border Fee Manager ECB Rate Service ! AN 4224 - New Merchant Country of Origin Identifier ! AN 4315 - Brazil Debit Mastercard Flex Card Service ! Enhancements for POS ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Procs Modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0221M, ILB0221R, ILB0221S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0221M. Run the ILF conversion using ILB0221R. ! Reference: WO #009282 ! Case #2802056 #ADD 13932 SUB^LOG^ERROR sem.typ = sem^auth^request^d then begin if sem^funding^txn^d( sem ) then begin if sem.merch^typ = moneysend^funding^txn^d then begin if pos^data1^tkn.pmnt^typ^ind <> "C" then begin movd( pos^data1^tkn.pmnt^typ^ind, "C07" ); end; end else begin if pos^data1^tkn.pmnt^typ^ind <> "F" then begin movd( pos^data1^tkn.pmnt^typ^ind, "F07" ); end; end; #DELETE 13933 /13943 SUB^LOG^ERROR #ADD 28882 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^rq^id.tag <> "06" and sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag <> "08" ) then #DELETE 28883 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28968 SEM^FRMT^XRESP^TO^PSTM^0210 ntwk^tkn^srvc^tkn^lgth ) then #DELETE 28969 /28972 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 29180 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag = "08" then begin movl( ntwk^tkn^srvc^get^tkn.genrc.strg^tech, sem.addl^data.info. paypass^mapping^sub^fld^33. storage^technology. tag^data.byte[ 1 ], $len( ntwk^tkn^srvc^get^tkn.genrc. strg^tech ) ); end; #ADD 29189 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^rq^id.tag = "06" or sem.addl^data.info.paypass^mapping^sub^fld^33. storage^technology.tag = "08" ) then #DELETE 29190 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 29203 SEM^FRMT^XRESP^TO^PSTM^0210 movd( ntwk^tkn^srvc^tkn.frmt^cde, "00" ); #DELETE 29204 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 29283 SEM^FRMT^XRESP^TO^PSTM^0210 storage^technology.tag = "08" then begin movl( ntwk^tkn^srvc^tkn.genrc.strg^tech, sem.addl^data.info. paypass^mapping^sub^fld^33. storage^technology. tag^data.byte[ 1 ], $len( ntwk^tkn^srvc^tkn.genrc. strg^tech ) ); end; if sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num.tag = "02" and not sem^transit^d( sem ) then begin ! ! ! Move the last 4 digits of PAN token data to ! ! the SC token field PAN^LAST^FOUR^DIGIT ! ! ! i := 0; while i < $len( sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data ) and sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data. byte[ i ] <> " " do begin ! ! ! Set the index to the location of first ! ! blank character, which is the end of ! ! the PAN data ! ! ! i := i + 1; end; i := i - $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ); movl( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt, sem.addl^data.info. paypass^mapping^sub^fld^33. acct^num.tag^data.byte[ i ], $len( ntwk^tkn^srvc^tkn.genrc. pan^last^four^dgt ) ); end; ! of move last four digits of PAN ! movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "00" ); movd( ntwk^tkn^srvc^tkn.genrc.txn^typ, "0" ); #DELETE 29284 /29309 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 29347 SEM^FRMT^XRESP^TO^PSTM^0210 evt^msg^severity^crit^l, #DELETE 29348 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 31458 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^funding^txn^d( sem ) then begin movd( txn^subtyp^tkn.txn^subtyp, funding^txn^sub^d ); end else #ADD 43490 TRACE^SEM ! ! ! Additional Service Data for Issuers ! ! ! if hdr.addl^data.info.adnl^srvc^data^sub^fld^60. tag = "60" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. adnl^srvc^data^sub^fld^60.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Reference Conversion Rate ! ! ! if hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate.tag = "01" then begin call ascii^integer( hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! ! ! ! Move Subfield 2 - Reference Conversion Rate ! ! Differential Sign Indicator ! ! ! if hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^diff^sign. tag = "02" then begin call ascii^integer( hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^diff^sign. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^diff^sign.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Reference Conversion Rate ! ! Percent Differential ! ! ! if hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^pcnt^diff. tag = "03" then begin call ascii^integer( hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^pcnt^diff. lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^pcnt^diff.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! end; #ADD 47034 TRACE^SEM if ptr[ length ] = "60" then begin ! ! ! Additional Service Data for Issuers ! ! ! movl( sem^ptr.addl^data.info. adnl^srvc^data^sub^fld^60.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! ! Move Subfield 1 - ! ! Reference Conversion Rate ! ! ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate.tag ); end else ! ! ! Move Subfield 2 - ! ! Reference Conversion Rate ! ! Differential Sign Indicator ! ! ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^diff^sign. tag ); end else ! ! ! Move Subfield 3 - ! ! Reference Conversion Rate ! ! Percent Differential ! ! ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^srvc^data^sub^fld^60. ref^conv^rate^pcnt^diff. tag ); end else ! ! ! bad data, clear sem de-48.se-60,! ! end loop ! ! ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. adnl^srvc^data^sub^fld^60. tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. adnl^srvc^data^sub^fld^60, " ", $len( sem^ptr.addl^data.info. adnl^srvc^data^sub^fld^60 ) ); loop^lgth := tag^length; bad^lgth := bad^lgth + tag^length + 4; end; end; length := length + tag^length + 4; end else #ADD 58019 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "21"; #DELETE 58020 UTIL^SWI^TKN^INIT #ADD 58201 UTIL^SWI^TKN^INIT if sem.addl^data.info.acct^typ^ind^sub^fld^14.tag = "14" then begin movl( bnet^tkn^buf.acct^typ^ind, sem.addl^data.info.acct^typ^ind^sub^fld^14.tag^data, $len( bnet^tkn^buf.acct^typ^ind ) ); end; ! of if tag = "14" ! #ADD 58390 UTIL^SWI^TKN^INIT if sem.addl^data.info. adnl^srvc^data^sub^fld^60.tag = "60" then begin move( bnet^tkn^buf.ref^crncy.conv^rate, sem.addl^data.info.adnl^srvc^data^sub^fld^60. ref^conv^rate.tag^data ); move( bnet^tkn^buf.ref^crncy.conv^rate^diff^sign, sem.addl^data.info.adnl^srvc^data^sub^fld^60. ref^conv^rate^diff^sign.tag^data ); move( bnet^tkn^buf.ref^crncy.conv^rate^pcnt^diff, sem.addl^data.info.adnl^srvc^data^sub^fld^60. ref^conv^rate^pcnt^diff.tag^data ); end; #ADD 58674 UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.acct^typ^ind <> blanks for $len( bnet^tkn^buf.acct^typ^ind ) ) then begin move( bnet^tkn.acct^typ^ind, bnet^tkn^buf.acct^typ^ind ); end; #ADD 58897 UTIL^SWI^TKN^UPDT if bnet^tkn^buf.ref^crncy <> blanks for $len( bnet^tkn^buf.ref^crncy ) then begin movl( bnet^tkn.ref^crncy, bnet^tkn^buf.ref^crncy, $len( bnet^tkn.ref^crncy ) ); end; ! of if bnet^tkn^buf.ref^crncy ! #ENDSCN = SW0P030 !#CMP2.28 02/16/21 BNETS 6157 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6157 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6157 * ******************************************************************************** #SCN = SW0P031 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6157 #NEWVERSION = 6158 #ADD 03821*0E ! 17FEB2021 VulliL ! Symptom: Banknet Release 21.Q2 Functional Enhancements ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! AN 1430 - Revised Standards-Refund Transactions ! AN 1638 - Enabling Tokenized, Contactless ATM ! Transactions ! AN 4022 - Money Transfer Sender and Receiver Data ! Enhancement ! AN 4203 - Mastercard MoneySend and Funding Transactions ! Program Enhancements ! AN 4209 - Cross-Border Fee Manager ECB Rate Service ! AN 4224 - New Merchant Country of Origin Identifier ! AN 4315 - Brazil Debit Mastercard Flex Card Service ! Enhancements for POS ! Case #2802056: AN 1275-Authorization Best Practices and ! Support Tools for the Latin America and ! Caribbean Region ! Procs Modified: init^bnet^g ! init^paramproc ! pstm^0200^request ! pstm^0420^reversal ! sem^advice^pos ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60IBNT: BNETEMVS ! Run Make. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0221M, ILB0221R, ILB0221S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0221M. Run the ILF conversion using ILB0221R. ! Reference: WO #009282 ! Case #2802056 #REPLACE 03862&01 BNETS^61^57 PROC BNETS^61^56 MAIN; #ADD 10428Y01 INIT^BNET^G bnet^g.refund^approve^blind^g := true; #DELETE 10428Y02 INIT^BNET^G #ADD 12676Y01 INIT^PARAMPROC "P", "SW-BNET-REFUND-APPROVE-BLIND ", #DELETE 12676Y02 INIT^PARAMPROC #ADD 13500Y0Y INIT^PARAMPROC ! SW-BNET-REFUND-APPROVE-BLIND ! #DELETE 13500Y0Z INIT^PARAMPROC #ADD 13500Y0c INIT^PARAMPROC if lconf.param^msg.ptxt = "Y" then #DELETE 13500Y0d INIT^PARAMPROC #ADD 13500Y0e INIT^PARAMPROC bnet^g.refund^approve^blind^g := true; #DELETE 13500Y0f INIT^PARAMPROC #ADD 13500Y0i INIT^PARAMPROC bnet^g.refund^approve^blind^g := false; #DELETE 13500Y0j INIT^PARAMPROC #ADD 15436 SUB^APPRV^BLIND ( pos^return^d( pstm ) and not pos^pmnt^d( pstm ) and bnet^g.refund^approve^blind^g ) or #ADD 15496w00 SUB^APPRV^BLIND ( pos^return^adjust^d( pstm ) and not bnet^g.refund^approve^blind^g ) then #DELETE 15496w01 SUB^APPRV^BLIND #ADD 15596w02 SUB^APPRV^BLIND else if pos^return^adjust^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); call sub^apprv^blind( pstm ); return; end !if util^ilf^get^pos^adj ! else begin call sub^apprv^blind( pstm ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, susp.orig^net^pro, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end; end ! of pos^return^adjust^d ! #ADD 16246w00 PSTM^0220^FORCE^POST ( pos^return^adjust^d( pstm ) and not bnet^g.refund^approve^blind^g ) then #DELETE 16246w01 PSTM^0220^FORCE^POST #ADD 16349w02 PSTM^0220^FORCE^POST end else if pos^return^adjust^d( pstm ) then begin move( ilf.prikey, susp.prikey ); if util^ilf^get^pos^adj( pstm, ilf, ilf^lgth, fnum, sem ) then begin call util^ilf^updt( fnum, ilf, ilf^lgth, ! substate !, pstm ); return; end !if util^ilf^get^pos^adj ! else begin call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, ! sem !, ! sem^lgth !, sub^ok^l ); return; end; #ADD 16790w00 PSTM^0420^REVERSAL if pos^preauth^comp^d( pstm ) or ( pos^return^d( pstm ) and not pos^pmnt^d( pstm ) and bnet^g.refund^approve^blind^g ) then #DELETE 16790w01 PSTM^0420^REVERSAL #ADD 18619 SEM^ADVICE^POS ( sem.merch^typ = moneysend^funding^txn^d and #DELETE 18620 SEM^ADVICE^POS #ENDSCN = SW0P031 !#CMP2.28 03/05/21 BNETLIBS6305 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6305 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6305 * ******************************************************************************** #SCN = SW0P077 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6305 #NEWVERSION = 6306 #ADD 11002E0h ! 04MAR2021 jayaprm ! Symptom: Issue with mapping DE 39 value "65" to a BASE24-pos ! response code value "096". ! Problem: When LNCF SW-BNET-SUPPORT-SCA is "Y", the BNET ! transaction declined with response code "65" is not ! mapped to internal response code "096". ! Fix: Fixed the code to map the response code correctly. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3256604 ! 04MAR2021 jayaprm ! Symptom: Issue with accessing the data of DE 48 SE 71. ! Problem: The DE 48 SE 71 tag data is accessed with wrong index ! identifier. ! Fix: Fixed the code to use the correct index identifier ! while accessing DE 48 SE 71 tag data. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3258010 #REPLACE 27747 SEM^FRMT^XRESP^TO^PSTM^0210 end; #REPLACE 27959 /27959 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 then begin #ADD 28481 SEM^FRMT^XRESP^TO^PSTM^0210 <> "P" ) then #DELETE 28482 /28484 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 34652A01 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].rslt^1 = "M" then #DELETE 34652A02 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P077 !#CMP2.28 03/16/21 BNETS 6158 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6158 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6158 * ******************************************************************************** #SCN = SW0P080 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6158 #NEWVERSION = 6159 #ADD 03821+0f ! 16MAR2021 wielerk ! Symptom: Process abends with Trap #2. ! Problem: The local variable, sta^x, is not initialized before ! it is used. The dump occurs when a SAF timer expires ! and the leftover memory in the location of sta^x causes ! an increment of other leftover memory to exceed the ! maximum value of an INT variable. ! Fix: Modified the interface to initialize sta^x from the ! userbuf before using. ! Proc Modified: tim^out^02^saf ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Run Make. ! Reference: Case #3259740. #ADD 23055 TIM^OUT^02^SAF set ( sta^x, userbuf.sta^x ); #DELETE 23059 TIM^OUT^02^SAF #ENDSCN = SW0P080 !#CMP2.28 03/17/21 BNETLIBS6306 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6306 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6306 * ******************************************************************************** #SCN = SW0P081 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6306 #NEWVERSION = 6307 #ADD 11002F0O ! 17MAR2021 jayaprm ! Symptom: Online PIN contactless transaction declined with RC 096 ! Problem: The BNET interface considers contactless transaction ! where CVM results set to 1Fxxxx as no SCA applied ! transaction, eventhough PIN BLOCK is present. Because of ! it RTAU declines the transaction with RC 096. ! Fix: Fixed the code to not to set the SCA-IND of FH token ! when CRDHLDR-ID-METHOD of C4 is "2" (PIN). ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3261005 #ADD 36262 SEM^FRMT^XRQST^TO^PSTM^0200 pos^data^tkn.crdhldr^id^method <> "2" then begin if sem.addl^data.info. wallet^pgm^sub^fld^26.tag = "26" and util^sca^wallet^id( sem.addl^data.info. wallet^pgm^sub^fld^26.tag^data.wallet^id ) then begin ! ! PIN/CDCVM ! movd( sca^acq^data^tkn.sca^ind, "2" ); end else if bnet^array^g.cvm^g = "1E" or bnet^array^g.cvm^g = "5E" then begin ! ! Signature ! movd( sca^acq^data^tkn.sca^ind, "3" ); end else if bnet^array^g.cvm^g = "1F" or bnet^array^g.cvm^g = "5F" then begin ! ! No Cardholder Verification ! movd( sca^acq^data^tkn.sca^ind, "0" ); end; #DELETE 36263 /36289 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 36290 SEM^FRMT^XRQST^TO^PSTM^0200 end; #ENDSCN = SW0P081 !#CMP2.28 03/24/21 BNETS 6159 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6159 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6159 * ******************************************************************************** #SCN = SW0P090 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6159 #NEWVERSION = 6160 #ADD 03821-0F ! 23MAR2021 jayaprm ! Symptom: Issue with SW-BNET-REFUND-APPROVE-BLIND ! Problem: The default value of SW-BNET-REFUND-APPROVE-BLIND is ! false but BNET interface code set it as true when ! param is not present in the LCONF. ! Fix: Fixed the code to initialize the global variable ! bnet^g.refund^approve^blind^g with false. ! Proc Modified: init^bnet^g ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Run Make. ! Reference: Case #3266084. #ADD 10428+00 INIT^BNET^G bnet^g.refund^approve^blind^g := false; #DELETE 10428+01 INIT^BNET^G #ENDSCN = SW0P090 !#CMP2.28 04/21/21 BNETDDLS6078 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6078 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6078 * ******************************************************************************** #SCN = SW0P101 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0026220a * 26APR2021 anbazhp * Symptom: Banknet 21.Q2 Mandates P2.v3 * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 4688 - Recurring Transaction Enhancements * Procs Modified : None * Dependency: Apply fixes to: * SW60BNET: BNETLIBS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #009322 #ADD 0115720R SEM * * Electronic Commerce Certificate Qualifying Information * Subfield tag = 41 * Contains data required for submitting Electronic Commerce * Certificate Qualifying Information. * 06 e-comm-cert-qual-sub-fld-41. 08 tag pic 99. 08 lgth pic 99. 08 recur-pmnt-adnl-info. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(26). 04 user-fld pic x(4). #DELETE 0115720S SEM #ENDSCN = SW0P101 !#CMP2.28 04/21/21 BNETG 60125FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60125 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60125 * ******************************************************************************** #SCN = SW0P102 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n000260a ! 26APR2021 anbazhp ! Symptom: Banknet 21.Q2 Mandates P2.v3 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 4536 - Revised Standards for the Decline Reason Code ! Service for Card-Not-Present Transactions ! Procs Modified : None ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! SW60ABNT: BNETATMS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009322 #ADD 00226i07 define resp^lifecycle^dec^sem^d = "79"#; define resp^policy^dec^sem^d = "82"#; define resp^security^dec^sem^d = "83"#; #ENDSCN = SW0P102 !#CMP2.28 04/21/21 BNETLIBS6307 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6307 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6307 * ******************************************************************************** #SCN = SW0P103 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6307 #NEWVERSION = 6308 #ADD 11002G0D ! 26APR2021 anbazhp ! Symptom: Banknet 21.Q2 Mandates P2.v3 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 4224 - New Merchant Country of Origin Identifier ! AN 4462 - Revised Standards for the Sunset of Several ! Legacy Transaction Type Identifiers ! AN 4536 - Revised Standards for the Decline ! Reason Code Service for Card-Not-Present ! Transactions ! AN 4688 - Recurring Transaction Enhancements ! - Strong Customer Authentication (SCA) Enhancements ! Procs Modified :pstm^frmt^0200^to^xrqst ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^resp^cde^to^pstm ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xrvsl ! ! Dependency: Apply fixes to: ! BA60DDL: DDLFSTF, DDLPSTKN ! BA60EXT: OMFXS ! SW60STF: RQSTFS, SCRNSTF ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! SW60ABNT: BNETATMS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009322 #ADD 12823 SUB^LOG^ERROR ! Initialize to default value "C03" (load value) ! #DELETE 12824 SUB^LOG^ERROR #ADD 12827 SUB^LOG^ERROR "C03" ); #DELETE 12828 SUB^LOG^ERROR #DELETE 12834 /12840 SUB^LOG^ERROR #DELETE 12876 /12882 SUB^LOG^ERROR #ADD 12904 SUB^LOG^ERROR if sem^moneysend^d( sem ) then begin movd( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data, "C07" ); #DELETE 12905 /12912 SUB^LOG^ERROR #ADD 19008 PSTM^FRMT^SEM^ADDL^DATA int .ichg^pgm^tkn(ichg^pgm^tkn^def); int ichg^pgm^tkn^fnd := false; int ichg^pgm^tkn^lgth; #ADD 21807 PSTM^FRMT^SEM^ADDL^DATA if util^stf^get( stf ) and stf.cntry^cde <> [ $len( stf.cntry^cde ) * [" "] ] and stf.cntry^cde <> [ $len( stf.cntry^cde ) * ["0"] ] and not visa_tran_g then begin if $numeric( stf.cntry^cde.byte[0] ) and $numeric( stf.cntry^cde.byte[1] ) and $numeric( stf.cntry^cde.byte[2] ) then begin movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag, "37" ); move( sem.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag^data, stf.cntry^cde ); end; end else if adnl^mrch^data^tkn^fnd and adnl^mrch^data^tkn.cntry^cde <> [ $len( adnl^mrch^data^tkn. cntry^cde ) * [ " " ] ] and adnl^mrch^data^tkn.cntry^cde <> [ $len( adnl^mrch^data^tkn. cntry^cde ) * [ "0" ] ] then begin if $numeric( adnl^mrch^data^tkn. cntry^cde.byte[0] ) and $numeric( adnl^mrch^data^tkn. cntry^cde.byte[1] ) and $numeric( adnl^mrch^data^tkn. cntry^cde.byte[2] ) then begin movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag, "37" ); move( sem.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag^data, adnl^mrch^data^tkn.cntry^cde ); end; end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag^data <> [ $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag^data ) * [ " " ] ] then begin movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag, "04" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.lgth, "03" ); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37.cntry^cde ); end; ! of if cntry^cde.tag^data <> blanks ! #ADD 21822 PSTM^FRMT^SEM^ADDL^DATA movd( tkn^id, ichg^pgm^tkn^id^d ); if hiswtkn^get^tkn ( pstm, tkn^id, @ichg^pgm^tkn, ichg^pgm^tkn^lgth ) then begin ichg^pgm^tkn^fnd := true; end; if ichg^pgm^tkn^fnd = true and ichg^pgm^tkn.frmt^cde = "07" then begin sub^fld^lgth := 0; movd( sem.addl^data.info. e^comm^cert^qual^sub^fld^41.tag, "41"); movd( sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag, "01"); movd( sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.lgth, "26"); movl( sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag^data, ichg^pgm^tkn.mc^e^comm^recur^pmnt^data, $len( sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info )); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info ); integer^ascii^( sem.addl^data.info. e^comm^cert^qual^sub^fld^41.lgth, sub^fld^lgth ); lgth := lgth + 4 + sub^fld^lgth; end; #ADD 26688 SEM^FRMT^RESP^CDE^TO^PSTM literal bnet^pos^number^resp^codes^l = 44, #DELETE 26689 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 26731 SEM^FRMT^RESP^CDE^TO^PSTM "63",! Security violation ! "050",! Declined ! #DELETE 26732 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 26742 SEM^FRMT^RESP^CDE^TO^PSTM "79",! Lifecycle decline ! "107",! Usage limit reached! "81",! Domestic dbt tran not allwd ! "055",! Invalid tran ! "82",! Policy decline ! "107",! Usage limit reached! "83",! Security decline ! "107",! Usage limit reached! #DELETE 26743 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 26748 SEM^FRMT^RESP^CDE^TO^PSTM "86",! PIN validation not possible ! "122",! Cannot verify PIN ! #DELETE 26749 SEM^FRMT^RESP^CDE^TO^PSTM #ADD 27604 SEM^FRMT^XRESP^TO^PSTM^0210 struct .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); #ADD 27656 SEM^FRMT^XRESP^TO^PSTM^0210 int add^adnl^mrch^data^tkn := false; int .adnl^mrch^data^get^tkn( adnl^mrch^data^tkn^def ); #ADD 28161 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = resp^lifecycle^dec^sem^d or sem.resp^cde = resp^policy^dec^sem^d then begin movd( pstm.tran.resp^cde, "089" ); end else if sem.resp^cde = resp^security^dec^sem^d then begin movd( pstm.tran.resp^cde, "096" ); end; #ADD 28175 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = resp^lifecycle^dec^sem^d or sem.resp^cde = resp^policy^dec^sem^d then begin movd( pstm.tran.resp^cde, "099" ); end else if sem.resp^cde = resp^security^dec^sem^d then begin movd( pstm.tran.resp^cde, "097" ); end; #ADD 29362 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag = "37" then begin movd( tkn^id, adnl^mrch^data^tkn^id^d ); if not hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^mrch^data^tkn ); add^adnl^mrch^data^tkn := true; end else begin @adnl^mrch^data^tkn := @adnl^mrch^data^get^tkn; end; move( adnl^mrch^data^tkn.pmnt^facilitator^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag^data ); move( adnl^mrch^data^tkn.idpnt^sales^org^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag^data ); move( adnl^mrch^data^tkn.sub^mrch^id, sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag^data ); move( adnl^mrch^data^tkn.cntry^cde, sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag^data ); if add^adnl^mrch^data^tkn = true then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^mrch^data^tkn, $len( adnl^mrch^data^tkn^def ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4104, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 4105, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 4105 ); end; end; end; end; !sem.addl^data.info.adnl^mrch^data^sub^fld^37.tag ! #ADD 30990 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 31044 SEM^FRMT^XRQST^TO^PSTM^0200 int add^ichg^pgm^tkn := false; #ADD 31050 SEM^FRMT^XRQST^TO^PSTM^0200 int .ichg^pgm^get^tkn( ichg^pgm^tkn^def); #ADD 32712 SEM^FRMT^XRQST^TO^PSTM^0200 move( adnl^mrch^data^get^tkn.cntry^cde, sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag^data ); #ADD 32735 SEM^FRMT^XRQST^TO^PSTM^0200 move( adnl^mrch^data^tkn.cntry^cde, sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag^data ); #ADD 33098 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! ! This condition could identify either a COF ! ! transaction acquired inside the EEA that is the ! ! initial payment in a recurring series, or a COF ! ! transaction acquired outside the EEA that is a ! ! subsequent payment in a recurring series. ! ! Set the pmnt^ind and pmnt^info fields to allow ! ! POS RTAU to determine where the transaction was ! ! acquired, so that the fields can then be set ! ! correctly. ! ! ! movd( pos^data1^tkn.pmnt^ind, "C" ); #ADD 35470 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. e^comm^cert^qual^sub^fld^41.tag = "41" then begin tkn^id ':=' ichg^pgm^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^pgm^tkn ); add^ichg^pgm^tkn := true; end else begin @ichg^pgm^tkn := @ichg^pgm^get^tkn; end; if add^ichg^pgm^tkn then begin movd( ichg^pgm^tkn.frmt^cde, "07" ); move( ichg^pgm^tkn.mc^e^comm^recur^pmnt^data, sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag^data ); if ichg^pgm^tkn.mc^e^comm^recur^pmnt^data <> [ $len( ichg^pgm^tkn. mc^e^comm^recur^pmnt^data ) * [" "] ] then begin tkn^add^lgth := $offset( ichg^pgm^tkn. mc^e^comm^recur^pmnt^data. user^fld^aci ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1821, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! of if tkn^result = over^max^limit^l ! else begin call log^message^( 1822, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 1822 ); end; ! of NOT if result = over^max^limit ! end; ! of if token result end; end; end; #ADD 36755 SEM^FRMT^XRVSL^TO^PSTM^0420 int .ichg^pgm^get^tkn( ichg^pgm^tkn^def ); int ichg^pgm^get^lgth := 0; #ADD 36771 SEM^FRMT^XRVSL^TO^PSTM^0420 int tkn^add^lgth := 0; #ADD 36793 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 37456 SEM^FRMT^XRVSL^TO^PSTM^0420 if rvsl.addl^data.info. e^comm^cert^qual^sub^fld^41.tag = "41" then begin tkn^id ':=' ichg^pgm^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^get^tkn, ichg^pgm^get^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, ichg^pgm^tkn ); movd( ichg^pgm^tkn.frmt^cde, "07" ); move( ichg^pgm^tkn.mc^e^comm^recur^pmnt^data, sem.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag^data ); if ichg^pgm^tkn.mc^e^comm^recur^pmnt^data <> [ $len( ichg^pgm^tkn. mc^e^comm^recur^pmnt^data ) * [" "] ] then begin tkn^add^lgth := $offset( ichg^pgm^tkn. mc^e^comm^recur^pmnt^data. user^fld^aci ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3003, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l else begin call log^message^( 3004, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 3004 ); end; ! error on tkn add other than no room! end;! of if tkn^result on token add ! end; end; end; #ADD 43374 TRACE^SEM ! ! ! Move Subfield 4 - Country Code ! ! ! if hdr.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag = "04" then begin call ascii^integer( hdr.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! #ADD 43424 TRACE^SEM ! ! ! Electronic Commerce Certificate Qualifying Info ! ! ! if hdr.addl^data.info. e^comm^cert^qual^sub^fld^41.tag = "41" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. e^comm^cert^qual^sub^fld^41.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Recurring Payment ! ! Additional Information ! ! ! if hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag = "01" then begin call ascii^integer( hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 01 ! end; ! of if hdr...tag = "41" #ADD 46005 TRACE^SEM buf ':=' $occurs( buf ) * [" "]; #ADD 46722 TRACE^SEM if ptr[ length ] = "41" then begin ! ! ! Electronic Commerce Certificate ! ! Qualifying Information ! ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. e^comm^cert^qual^sub^fld^41.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! ! Move Subfield 1 - Recurring Payment ! ! Additional Info ! ! ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. e^comm^cert^qual^sub^fld^41. recur^pmnt^adnl^info.tag ); end ! subfield 01 ! else ! ! ! unrecognized subfield, ! ! skip to next subfield ! ! ! begin call sub^move^subfield( buf ); end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "41" else #ADD 47784 TRACE^SEM ! ! ! Move Subfield 4 - Country Code ! ! ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^mrch^data^sub^fld^37. cntry^cde.tag ); end else #ADD 49123 UTIL^FRMT^ADDL^DATA^TO^XRVSL ! ! ! Subelement 41 - Electronic Commerce Certificate Qualifying Info ! ! ! if sem.addl^data.info.e^comm^cert^qual^sub^fld^41 = "41" then begin move( rvsl.addl^data.info.e^comm^cert^qual^sub^fld^41, sem.addl^data.info.e^comm^cert^qual^sub^fld^41 ); call ascii^integer^ ( sem.addl^data.info. e^comm^cert^qual^sub^fld^41.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; #ENDSCN = SW0P103 !#CMP2.28 04/21/21 BNETS 6160 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6160 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6160 * ******************************************************************************** #SCN = SW0P104 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6160 #NEWVERSION = 6161 #ADD 03821:0D ! 26APR2021 anbazhp ! Symptom: Banknet 21.Q2 Mandates P2.v3 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 4462 - Revised Standards for the Sunset of Several ! Legacy Transaction Type Identifiers ! Procs Modified : None ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #009322 #DELETE 21658 /21706 SEM^REQUEST^POS #ENDSCN = SW0P104 !#CMP2.28 05/17/21 BNETS 6161 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6161 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6161 * ******************************************************************************** #SCN = SW0P125 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6161 #NEWVERSION = 6162 #ADD 03821;0E ! 17MAY2021 wielerk ! Symptom: Pre-auth completion transactions can modify ! PSTM.TRAN.APPRV^CDE from the original value. ! Problem: The interface is approving certain transactions blind ! as Mastercard doesn't support them online. When the ! approval code is reformatted balancing problems occur. ! Fix: Modified code to only generate PSTM.TRAN.APPRV^CDE ! if the transaction isn't an AFD completion or the ! field is zeroes or spaces. ! Sub Procs Modified: sub^apprv^blind of ! pstm^0200^request ! sub^apprv^blind of ! sem^advice^response^compl ! Dependency: Apply fix to: ! SW60BNET: BNETS ! Run Make. ! Reference: Case #3286602. #ADD 15228 SUB^APPRV^BLIND if not pos^preauth^comp^d( pstm ) or not pos^preauth^match^d( pstm ) or ( pstm.tran.apprv^cde = blanks for $len( pstm.tran.apprv^cde ) or pstm.tran.apprv^cde = zeroes for $len( pstm.tran.apprv^cde ) ) then begin call util^generate^approval^code( pstm ); end; #DELETE 15229 SUB^APPRV^BLIND #ADD 18931 SUB^APPRV^BLIND if not pos^preauth^comp^d( pstm ) or not pos^preauth^match^d( pstm ) or ( pstm.tran.apprv^cde = blanks for $len( pstm.tran.apprv^cde ) or pstm.tran.apprv^cde = zeroes for $len( pstm.tran.apprv^cde ) ) then begin call util^generate^approval^code( pstm ); end; #DELETE 18932 SUB^APPRV^BLIND #ENDSCN = SW0P125 !#CMP2.28 06/29/21 BNETDDLS6079 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6079 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6079 * ******************************************************************************** #SCN = SW0P146 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0026230D * 29JUN2021 baskarp * Symptom: Banknet Release 21.Q3 Functional Enhancements * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 4586 - Regulatory Requirements for Funds Receiver * Information in Russia Domestic Transactions * Dependency: Apply fixes to: * SW60BNET: BNETLIBS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Reference: WO #009356 #ADD 01411{0R SEM 04 ru redefines info. 06 sub-fld-43. 08 tag pic x(3). 08 lgth pic x(3). 08 wllt-id-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(29). 08 taxpayer-id-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(12). 08 tax-rgstr-rsn-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(9). 08 wllt-oper-taxpayer-id-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(10). 08 wllt-oper-tax-rgstr-rsn-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(9). 08 mob-top-up-phone-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(17). 06 user-fld-aci pic x(663). #ENDSCN = SW0P146 !#CMP2.28 06/29/21 BNETLIBS6308 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6308 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6308 * ******************************************************************************** #SCN = SW0P147 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6308 #NEWVERSION = 6309 #ADD 11002H0X ! 29JUN2021 baskarp ! Symptom: Banknet Release 21.Q3 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 4586 - Regulatory Requirements for Funds Receiver ! Information in Russia Domestic Transactions ! AN 4751 - Visa Gateway Enhancements ! Procs Modified :pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^sem^addl^data ! pstm^frmt^natl^data^to^sem ! sem^frmt^natl^data^to^pstm ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60BNET: BNETDDLS, BNETLIBS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009356 #ADD 14480 SUB^LOG^ERROR end else if base24^rel^g >= 5 and sem.ntl^pos^data.cntry^cde = "643" then begin ! ! ! Format funds receiver data for Russian transaction ! ! ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; #REPLACE 14481 SUB^LOG^ERROR end; #ADD 15920 PSTM^FRMT^0220^TO^XADV if sem.adnl^data^natl.ru.sub^fld^43.tag = "043" then begin adnl^data^ntl^bit^d := 1; ! S-112 ! end; #ADD 16219 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.ntl^pos^data.cntry^cde = "643" then begin adnl^data^ntl^bit^d := 0 end else #ADD 18184 PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "643" and intra^cntry^data^tkn.frmt^cde = "19" then begin found^natl^data := true; ! ! Format DE 112 tag 43 ! if intra^cntry^data^tkn.ru^bnet.wllt^id^num <> [ $len( intra^cntry^data^tkn.ru^bnet.wllt^id^num ) * [ " " ] ] then begin ! ! Format variable length tag 01 ! movd( sem.adnl^data^natl.ru.sub^fld^43.wllt^id^num.tag, "01" ); idx := $len( intra^cntry^data^tkn.ru^bnet.wllt^id^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet.wllt^id^num. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43.wllt^id^num. tag^data, intra^cntry^data^tkn.ru^bnet.wllt^id^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43.wllt^id^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^nam tag "01" if intra^cntry^data^tkn.ru^bnet.taxpayer^id^num <> [ $len( intra^cntry^data^tkn.ru^bnet.taxpayer^id^num ) * [ " " ] ] then begin ! ! Format variable length tag 02 ! movd( sem.adnl^data^natl.ru.sub^fld^43.taxpayer^id^num. tag,"02" ); idx := $len( intra^cntry^data^tkn.ru^bnet. taxpayer^id^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet.taxpayer^id^num. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43.taxpayer^id^num. tag^data, intra^cntry^data^tkn.ru^bnet.taxpayer^id^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43.taxpayer^id^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^postal^cde tag "02" if intra^cntry^data^tkn.ru^bnet.tax^rgstr^rsn^cde <> [ $len( intra^cntry^data^tkn.ru^bnet. tax^rgstr^rsn^cde ) * [ " " ] ] then begin ! ! Format variable length tag 03 ! movd( sem.adnl^data^natl.ru.sub^fld^43.tax^rgstr^rsn^cde. tag,"03" ); idx := $len( intra^cntry^data^tkn.ru^bnet. tax^rgstr^rsn^cde ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet.tax^rgstr^rsn^cde. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43. tax^rgstr^rsn^cde.tag^data, intra^cntry^data^tkn.ru^bnet.tax^rgstr^rsn^cde, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43. tax^rgstr^rsn^cde.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^dob tag "03" if intra^cntry^data^tkn.ru^bnet.wllt^oper^taxpayer^id^num <> [ $len( intra^cntry^data^tkn.ru^bnet. wllt^oper^taxpayer^id^num ) * [ " " ] ] then begin ! ! Format variable length tag 04 ! movd( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num.tag,"04" ); idx := $len( intra^cntry^data^tkn.ru^bnet. wllt^oper^taxpayer^id^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet. wllt^oper^taxpayer^id^num.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num.tag^data, intra^cntry^data^tkn.ru^bnet. wllt^oper^taxpayer^id^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^acct^num tag "04" if intra^cntry^data^tkn.ru^bnet.wllt^oper^tax^rgstr^rsn^cde <> [ $len( intra^cntry^data^tkn.ru^bnet. wllt^oper^tax^rgstr^rsn^cde ) * [ " " ] ] then begin ! ! Format variable length tag 05 ! movd( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde,"05" ); idx := $len( intra^cntry^data^tkn.ru^bnet. wllt^oper^tax^rgstr^rsn^cde ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet. wllt^oper^tax^rgstr^rsn^cde.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde.tag^data, intra^cntry^data^tkn.ru^bnet. wllt^oper^tax^rgstr^rsn^cde, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^acct^num tag "05" if intra^cntry^data^tkn.ru^bnet.mob^top^up^phone^num <> [ $len( intra^cntry^data^tkn.ru^bnet. mob^top^up^phone^num ) * [ " " ] ] then begin ! ! Format variable length tag 06 ! movd( sem.adnl^data^natl.ru.sub^fld^43. mob^top^up^phone^num,"06" ); idx := $len( intra^cntry^data^tkn.ru^bnet. mob^top^up^phone^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.ru^bnet. mob^top^up^phone^num.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.ru.sub^fld^43. mob^top^up^phone^num.tag^data, intra^cntry^data^tkn.ru^bnet. mob^top^up^phone^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43. mob^top^up^phone^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of rcv^acct^num tag "06" if lgth > 0 then begin ! ! Tag data was formatted so set the tag and length ! fields for DE 112 tag 43 ! movd( sem.adnl^data^natl.ru.sub^fld^43.tag, "043" ); call integer^ascii^( sem.adnl^data^natl.ru.sub^fld^43.lgth, lgth ); ! ! Increment the length to account for the 043 tag and ! subfield length to set the overall field length. ! lgth := lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; ! of if sem.ntl^pos^data.cntry^cde = "643" and ... #ADD 21363 PSTM^FRMT^SEM^ADDL^DATA pos^data1^tkn.pmnt^ind = "P" or pos^data1^tkn.pmnt^ind = "T" then #DELETE 21364 PSTM^FRMT^SEM^ADDL^DATA #ADD 21375 PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn.real^time^data^ind = "2" then begin movd( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. msg^rsn^cde, "6" ); #DELETE 21376 /21379 PSTM^FRMT^SEM^ADDL^DATA #ADD 25713 SEM^FRMT^NATL^DATA^TO^PSTM if sem.ntl^pos^data.cntry^cde = "643" then begin intra^cntry^data^tkn.frmt^cde ':=' "19"; move ( intra^cntry^data^tkn.ru^bnet.wllt^id^num, sem.adnl^data^natl.ru.sub^fld^43. wllt^id^num.tag^data ); move ( intra^cntry^data^tkn.ru^bnet.taxpayer^id^num, sem.adnl^data^natl.ru.sub^fld^43.taxpayer^id^num. tag^data ); move ( intra^cntry^data^tkn.ru^bnet.tax^rgstr^rsn^cde, sem.adnl^data^natl.ru.sub^fld^43.tax^rgstr^rsn^cde. tag^data ); move ( intra^cntry^data^tkn.ru^bnet.wllt^oper^taxpayer^id^num, sem.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num.tag^data ); move ( intra^cntry^data^tkn.ru^bnet. wllt^oper^tax^rgstr^rsn^cde, sem.adnl^data^natl.ru. sub^fld^43.wllt^oper^tax^rgstr^rsn^cde.tag^data ); move ( intra^cntry^data^tkn.ru^bnet.mob^top^up^phone^num, sem.adnl^data^natl.ru.sub^fld^43.mob^top^up^phone^num. tag^data ); tkn^add^lgth := $offset( intra^cntry^data^tkn.ru^bnet. user^fld^ru^bnet ); end; ! of if sem.ntl^pos^data.cntry^cde = "643" ! #ADD 33403 SEM^FRMT^XRQST^TO^PSTM^0200 else if adnl^data^ntl^bit^d and sem.adnl^data^natl.ru.sub^fld^43.tag = "043" then begin call sem^frmt^natl^data^to^pstm( pstm, sem ); end #ADD 36598 SEM^FRMT^XRQST^TO^SEM^XRVSL sem.ntl^pos^data.cntry^cde = "643" or #ADD 44630 TRACE^SEM else if hdr.adnl^data^natl.ru. sub^fld^43.tag = "043" then begin call ascii^integer( hdr.adnl^data^natl.ru. sub^fld^43.lgth, 3, t^length ); ! ! Move the tag 043 and tag length field ! movl( ptr, hdr.adnl^data^natl.ru.sub^fld^43.tag, 6 ); @ptr := @ptr + 6; sub^lgth := 6; ! ! Process tag 043 subtag 01 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. wllt^id^num.tag = "01" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. wllt^id^num.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43.wllt^id^num.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "01" ! ! Process tag 043 subtag 02 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. taxpayer^id^num.tag = "02" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. taxpayer^id^num.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43.taxpayer^id^num. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "02" ! ! Process tag 043 subtag 03 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. tax^rgstr^rsn^cde.tag = "03" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. tax^rgstr^rsn^cde.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43.tax^rgstr^rsn^cde. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "03" ! ! Process tag 043 subtag 04 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num.tag = "04" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. wllt^oper^taxpayer^id^num. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43. wllt^oper^taxpayer^id^num.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "04" ! ! Process tag 043 subtag 05 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde.tag = "05" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43. wllt^oper^tax^rgstr^rsn^cde.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "05" ! ! Process tag 043 subtag 06 if present ! if hdr.adnl^data^natl.ru.sub^fld^43. mob^top^up^phone^num.tag = "06" then begin call ascii^integer( hdr.adnl^data^natl.ru.sub^fld^43. mob^top^up^phone^num.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl. ru.sub^fld^43. mob^top^up^phone^num.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "06" call translate( ptr[ - sub^lgth ], sub^lgth, ascii^to^ebcdic^l ); if t^length <> ( sub^lgth - 6 ) then begin return( index + 1 ); end; end ! of tag = "043" ! #ADD 48534 TRACE^SEM if ptr[ length ] = "043" then begin ! ! Move in the tag and length fields ! movl( sem^ptr.adnl^data^natl.ru. sub^fld^43.tag, ptr[ length ], 6 ); length := length + 6; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 2], 2, sub^lgth ); if ptr[ length ] = "01" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. wllt^id^num.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "02" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. taxpayer^id^num.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "03" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. tax^rgstr^rsn^cde.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "04" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. wllt^oper^taxpayer^id^num. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "05" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. wllt^oper^tax^rgstr^rsn^cde. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "06" then begin movl( sem^ptr.adnl^data^natl.ru. sub^fld^43. mob^top^up^phone^num.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else begin ! ! Unrecognized tag ! length := length + sub^lgth + 4; end; end; ! of while end else #ENDSCN = SW0P147 !#CMP2.28 06/29/21 BNETS 6162 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6162 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6162 * ******************************************************************************** #SCN = SW0P148 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6162 #NEWVERSION = 6163 #ADD 03821<0I ! 29JUN2021 baskarp ! Symptom: Banknet Release 21.Q3 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! Case #3297831 - Bank NET Approval generation for ! Pre-Auth Completion Transaction ! Procs Modified: pstm^0200^request ! sem^advice^response^compl ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #009356 #DELETE 15228<02 SUB^APPRV^BLIND #ADD 18931<00 SUB^APPRV^BLIND if ( pstm.tran.apprv^cde = blanks for #DELETE 18931<01/18931<03 SUB^APPRV^BLIND #ENDSCN = SW0P148 !#CMP2.28 07/08/21 BNETLIBS6309 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6309 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6309 * ******************************************************************************** #SCN = SW0P160 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6309 #NEWVERSION = 6310 #ADD 11002I0P ! 02JUL2021 jayaprm ! Symptom: Incorrect processing of Issuing AFD Maestro CAT2 ! Problem: BASE24 Banknet Interface is not correctly identifying ! AFD Maestro contactless transaction which are using ! CAT2 functionality(DE61 S10 = 2). ! Fix: Modified the interface inorder to support Issuing ! AFD Maestro CAT2 transaction. ! Procs Modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Reference: Case #3300438 ! 07JUL2021 MohanD ! Symptom: BE Token not filled in Account Verification Transaction ! Problem: Account Verification transaction has amount zeroes,and ! BE Token is not filled.Because of this, When AAV is ! checked on Host behind BASE24,this check fails because ! Orig.Currency is not delivered.(BE Token missing). ! Fix: Fixed the code to send BE Token for Account Verification ! transaction based on the presence of AAV Value ! in DE48.43 ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #03306805 #ADD 26588 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN ( ( sem.ntl^pos^data.cond^cde.byte[ 9 ] = "1" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 9 ] = "6" ) and ( sem.ntl^pos^data.cond^cde.byte[ 6 ] = "0" or sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" ) ) then #DELETE 26589 /26596 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN #REPLACE 26631 /26631 OFFSET 0 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN end ! of if sem.typ = sem^auth^advice^d then ! else begin return false; end; #ADD 36015 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Token BE should not be sent for Non Financial Transactions ! except Account Verification Transactions that has AAV value ! filled in DE48.43 ! if not sem^fncl^txn^d( sem ) and sem.addl^data.info.ucaf^sub^fld^43.tag^data = [ $len( sem.addl^data.info.ucaf^sub^fld^43.tag^data ) * [" "] ] and #DELETE 36016 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P160 !#CMP2.28 08/13/21 BNETLIBS6310 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6310 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6310 * ******************************************************************************** #SCN = SW0P181 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6310 #NEWVERSION = 6311 #ADD 11002J0Q ! 12AUG2021 jayaprm ! Symptom: Missing FA token in acquring transaction ! Problem: The banknet interface does not add the FA token in ! acquiring transaction. ! Fix: If DE 48 SEs 22 (with SF 04 = 1), 33 (with SF 01 = E), ! 74 (with SF 01 = 50), 83, 84, 87 are not present in ! the response message and if DE 48 SE 37 present only in ! request message then the fix has been made to add FA ! token to the 0210 pstm with value of DE 48 SE 37 ! present in request message. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3328673 #ADD 27922 SEM^FRMT^XRESP^TO^PSTM^0210 else if not ( sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" and sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag^data = "1" ) and not ( sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag = "01" and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data = "E" ) and not ( sem.addl^data.info. adnl^proc^info^sub^fld^74.tag = "74" and sem.addl^data.info.adnl^proc^info^sub^fld^74. tag^data[ 0 ].mchip^pro^ind = "50" ) and sem.addl^data.info.avs^resp.tag <> "83" and sem.addl^data.info.mrch^advc^cde^sub^fld^84.tag <> "84" and sem.addl^data.info.cvc^sub^fld^87.tag <> "87" then begin if sem.addl^data.info.authn^ind^sub^fld^17.tag = "17" then begin move( rqst.addl^data.info.authn^ind^sub^fld^17, sem.addl^data.info.authn^ind^sub^fld^17 ); end; if sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" then begin move( rqst.addl^data.info.paypass^mapping^sub^fld^33, sem.addl^data.info.paypass^mapping^sub^fld^33 ); end; if sem.addl^data.info.ecom^sec^sub^fld^42.tag = "42" then begin move( rqst.addl^data.info.ecom^sec^sub^fld^42, sem.addl^data.info.ecom^sec^sub^fld^42 ); end; if sem.addl^data.info. on^behalf^svc^sub^fld^51.tag = "51" then begin move( rqst.addl^data.info.on^behalf^svc^sub^fld^51, sem.addl^data.info.on^behalf^svc^sub^fld^51 ); end; if sem.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag = "55" then begin move( rqst.addl^data.info.mrch^fraud^scoring^sub^fld^55, sem.addl^data.info.mrch^fraud^scoring^sub^fld^55 ); end; if sem.addl^data.info.sec^srvc^acq^sub^fld^57.tag = "57" then begin move( rqst.addl^data.info.sec^srvc^acq^sub^fld^57, sem.addl^data.info.sec^srvc^acq^sub^fld^57 ); end; if sem.addl^data.info. moneysend^info^sub^fld^67.tag = "67" then begin move( rqst.addl^data.info.moneysend^info^sub^fld^67, sem.addl^data.info.moneysend^info^sub^fld^67 ); end; if sem.addl^data.info. adnl^proc^info^sub^fld^74.tag = "74" then begin move( rqst.addl^data.info.adnl^proc^info^sub^fld^74, sem.addl^data.info.adnl^proc^info^sub^fld^74 ); end; move ( sem.addl^data, rqst.addl^data ); end #ENDSCN = SW0P181 !#CMP2.28 08/24/21 BNETS 6163 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6163 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6163 * ******************************************************************************** #SCN = SW0P204 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6163 #NEWVERSION = 6164 #ADD 03821=0F ! 24AUG2021 MohanD ! Symptom: Banknet Release 21.Q4 Functional Enhancements ! Case H24-334479/#03322929: AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 1011 - Inclusion of the POI Amount Indicator in ! the Authorization Platform ! AN 4215 - Launch of Account Level Management in New ! Markets and Global ALM Cross-Border ! Recognition ! AN 4668 - Revised Standards for Installment Transactions ! AN 4776 - Data Enhancements for Mastercard MoneySend ! and Funding Transactions ! AN 4777 - Introducing Mastercard Installment Payment ! Product Codes in the U.S. Region ! AN 4779 - Deferred Authorization Indicator ! AN 4782 - Update to Dual Message Best Practices ! and Use of Data Element 39 (Response Code) ! for CVC 2 Declines ! Case H24-334479/#03322929: AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Procs Modified : init^bnet^g ! init^paramproc ! sem^advice^response ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0821M, ILB0821R, ILB0821S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0821M. Run the ILF conversion using ILB0821R. ! Reference: WO #009337 #ADD 10428y02 INIT^BNET^G bnet^g.send^de48se32^g := false; #ADD 12676z02 INIT^PARAMPROC "P", "SW-BNET-SEND-DE48SE32 ", #ADD 13501z0B INIT^PARAMPROC ! ! SW-BNET-SEND-DE48SE32 ! if not ferror then begin if lconf.param^msg.ptxt = "Y" then begin bnet^g.send^de48se32^g := true; end else begin bnet^g.send^de48se32^g := false; end; end; #ADD 18796 SEM^ADVICE^RESPONSE ! DE-48 - Additional Data #ADD 18832 SEM^ADVICE^RESPONSE if addl^data^bit^d then ! P-48 ! begin move( advc.addl^data, sem.addl^data ); end; #ENDSCN = SW0P204 !#CMP2.28 08/24/21 BNETDDLS6080 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6080 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6080 * ******************************************************************************** #SCN = SW0P205 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0026240D * 24AUG2021 MohanD * Symptom: Banknet Release 21.Q4 Functional Enhancements * Case H24-334479/#03322929: AN 4221 - Mastercard Merchant * Validation Service for Mastercard Digital Enablement * Service Transactions * Problem: None * Fix: Modified the interface in support for the below * requirement: * AN 1011 - Inclusion of the POI Amount Indicator * in the Authorization Platform * AN 4215 - Launch of Account Level Management in * New Markets and Global ALM Cross-Border * Recognition * AN 4668 - Revised Standards for Installment Transactions * AN 4776 - Data Enhancements for Mastercard MoneySend * and Funding Transactions * AN 4777 - Introducing Mastercard Installment Payment * Product Codes in the U.S. Region * AN 4779 - Deferred Authorization Indicator * AN 4782 - Update to Dual Message Best Practices * and Use of Data Element 39 (Response Code) * for CVC 2 Declines * Case H24-334479/#03322929: AN 4221 - Mastercard Merchant * Validation Service for Mastercard Digital Enablement * Service Transactions * Added description for DE 54 SF 02 new value 58. * Added new structure for DE 48 SE 24 and also * increased the length of user-fld. * Modified the definition of value "1" in DE 61.7. * Updated the switch token to support new ALM data and * modified the version of it. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BATKNCVS, BATKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * New files: ILB0821M, ILB0821R, ILB0821S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0821M. Run the ILF conversion using ILB0821R. * Reference: WO #009337 #ADD 0115730D SEM * * Account Level Management(ALM) Service Data * Subfield tag = 24 * Contains information about when a PAN is registered and qualifying * for any ALM Service. * 06 alm-srvc-data-sub-fld-24. 08 tag pic 99. 08 lgth pic 99. 08 srvc-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(5). 08 prod-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 prod-clas. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 rate-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 04 user-fld pic x(70). #DELETE 0115730E/0115730F SEM #ADD 01203 SEM * 10 = Healthcare Eligibility Amount * 11 = Prescription Eligibility Amount * 12 = Vision Rx Eligibility Amount #ADD 01205 SEM * 44 = Amount Gratuity * 57 = Original Amount * 58 = POI Amount #ADD 01236B1A SEM * 1 = deferred authorization #ADD 02760200 SAF-BNET * Switch token version (ver-id) will be "22". #DELETE 02760201 SAF-BNET #ADD 0276020E SAF-BNET 02 alm-srvc-data. 04 srvc-cde pic x(5). 04 prod-cde pic x(3). 04 prod-clas pic x(3). 04 rate-typ pic x(3). #ENDSCN = SW0P205 !#CMP2.28 08/24/21 BNETG 60126FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60126 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60126 * ******************************************************************************** #SCN = SW0P206 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o000260F ! 24AUG2021 MohanD ! Symptom: Banknet Release 21.Q4 Functional Enhancements ! Case H24-334479/#03322929: AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Problem: None. ! Fix: Modified the interface in support for the below ! requirements: ! AN 1011 - Inclusion of the POI Amount Indicator in ! the Authorization Platform ! AN 4215 - Launch of Account Level Management in New ! Markets and Global ALM Cross-Border ! Recognition ! AN 4668 - Revised Standards for Installment Transactions ! AN 4776 - Data Enhancements for Mastercard MoneySend ! and Funding Transactions ! AN 4777 - Introducing Mastercard Installment Payment ! Product Codes in the U.S. Region ! AN 4779 - Deferred Authorization Indicator ! AN 4782 - Update to Dual Message Best Practices ! and Use of Data Element 39 (Response Code) ! for CVC 2 Declines ! Case H24-334479/#03322929:AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Added Global variable for new param ! SW-BNET-SEND-DE48SE32 ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0821M, ILB0821R, ILB0821S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0821M. Run the ILF conversion using ILB0821R. ! Reference: WO #009337 #ADD N0043502 int send^de48se32^g; #ENDSCN = SW0P206 !#CMP2.28 08/24/21 BNETLIBS6311 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6311 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6311 * ******************************************************************************** #SCN = SW0P207 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6311 #NEWVERSION = 6312 #ADD 11002K0F ! 24AUG2021 MohanD ! Symptom: Banknet Release 21.Q4 Functional Enhancements ! Case H24-334479/#03322929: AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 1011 - Inclusion of the POI Amount Indicator in ! the Authorization Platform ! AN 4215 - Launch of Account Level Management in New ! Markets and Global ALM Cross-Border ! Recognition ! AN 4668 - Revised Standards for Installment Transactions ! AN 4776 - Data Enhancements for Mastercard MoneySend ! and Funding Transactions ! AN 4777 - Introducing Mastercard Installment Payment ! Product Codes in the U.S. Region ! AN 4779 - Deferred Authorization Indicator ! AN 4782 - Update to Dual Message Best Practices ! and Use of Data Element 39 (Response Code) ! for CVC 2 Declines ! Case H24-334479/#03322929: AN 4221 - Mastercard Merchant ! Validation Service for Mastercard Digital Enablement ! Service Transactions ! Procs Modified : pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xresp^to^pstm^0210 ! util^collapse^sem ! util^expand^sem ! util^ilf^updt ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0821M, ILB0821R, ILB0821S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0821M. Run the ILF conversion using ILB0821R. ! Reference: WO #009337 #ADD 12949 SUB^LOG^ERROR if sem.ntl^pos^data.cond^cde.byte[ 6 ] > "4" then #DELETE 12950 /12951 SUB^LOG^ERROR #ADD 13478 SUB^LOG^ERROR ! ! To set DE61 position 7 using REAL-TIME-DATA-IND field ! in token CH ! if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "0" and ( found^pos^data1^tkn and pos^data1^tkn.real^time^data^ind = "2" ) then begin movd( sem.ntl^pos^data.cond^cde.byte[ 6 ], "1" ); end; #DELETE 13915 /13922 SUB^LOG^ERROR #ADD 15003 PSTM^FRMT^0210^TO^XRESP ! ! To decline the transaction with response code 63 if ! ERR^FLG = "C" and CRD^VRFY^FLG = "D" in token C4 ! if ps50^tkn.err^flg = "H" or ( ps50^tkn.err^flg = "C" and ps50^tkn.crd^vrfy^flg = "D" ) then #DELETE 15004 PSTM^FRMT^0210^TO^XRESP #ADD 16691 PSTM^FRMT^AMT^TO^SEM^AMT fixed orig^remainder^amt := 0f; #ADD 16707 PSTM^FRMT^AMT^TO^SEM^AMT int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); int orig^crncy^60^tkn^lgth := 0; int fnd^orig^crncy^60^tkn := false; #ADD 16731 PSTM^FRMT^AMT^TO^SEM^AMT tkn^id ':=' orig^crncy^60^tkn^id^d; fnd^orig^crncy^60^tkn := hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^tkn, orig^crncy^60^tkn^lgth ); #DELETE 16787 /16788 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 16832 PSTM^FRMT^AMT^TO^SEM^AMT lgth := lgth + $len( sem.addl^amt.info ); amt^num := 1; #ADD 16971 PSTM^FRMT^AMT^TO^SEM^AMT if fnd^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" and sem.tran^crncy^cde <> orig^crncy^60^tkn.crncy^cde for $len( orig^crncy^60^tkn.crncy^cde ) then begin if pos^adjust^d( pstm ) then begin amt^num := 0; init( sem.addl^amt, " ", $len( sem.addl^amt ) ); end; if amt^num < $occurs( sem.addl^amt.info ) then begin movl( sem.addl^amt.info[ amt^num ].acct^typ, sem.proc^cde.byte[ 2 ], 2 ); movd( sem.addl^amt.info[ amt^num ]. amt^typ, bnet^amt^typ^poi^d ); move( sem.addl^amt.info[ amt^num ].crncy^cde, orig^crncy^60^tkn.crncy^cde ); movd( sem.addl^amt.info[ amt^num ].typ^amt, "D" ); if replace^amt^bit^d and sem.replace^amts.tran^amt <> [ $len( sem.replace^amts.tran^amt ) * [ "0" ] ] then begin ! ! If DE 95.1 is present ! orig^remainder^amt := orig^crncy^60^tkn.amt^1 - orig^crncy^60^tkn.amt^2; if not fixed^ascii^( sem.addl^amt.info[ amt^num ].amt, orig^remainder^amt ) then begin return false; end; end else if not fixed^ascii^( sem.addl^amt.info[ amt^num ].amt, orig^crncy^60^tkn.amt^1 ) then begin return false; end; lgth := lgth + $len( sem.addl^amt.info ); amt^num := amt^num + 1; end; ! of amt^num < $occurs end; #ADD 17264 PSTM^FRMT^AMT^TO^SEM^AMT init( sem.addl^amt, " ", $len( sem.addl^amt ) ); amt^num := 0; #ADD 17269 PSTM^FRMT^AMT^TO^SEM^AMT if fnd^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" and sem.tran^crncy^cde <> orig^crncy^60^tkn.crncy^cde for $len( orig^crncy^60^tkn.crncy^cde )then begin if amt^num < $occurs( sem.addl^amt.info ) then begin movl( sem.addl^amt.info[ amt^num ].acct^typ, sem.proc^cde.byte[ 2 ], 2 ); movd( sem.addl^amt.info[ amt^num ].amt^typ, bnet^amt^typ^poi^d ); move( sem.addl^amt.info[ amt^num ].crncy^cde, orig^crncy^60^tkn.crncy^cde ); movd( sem.addl^amt.info[ amt^num ]. typ^amt, "D" ); if not fixed^ascii^( sem.addl^amt.info[ amt^num ].amt, orig^crncy^60^tkn.amt^1 ) then begin return false; end; lgth := lgth + $len( sem.addl^amt.info ); amt^num := amt^num + 1; end; ! of amt^num < $occurs end; if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; #DELETE 17270 /17289 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 19012 PSTM^FRMT^SEM^ADDL^DATA int .p2p^addl^data^tkn ( p2p^addl^data^tkn^def ); int p2p^addl^data^tkn^fnd := 0; #ADD 19252 PSTM^FRMT^SEM^ADDL^DATA ! ! To retrieve Token CI from the PSTM ! movd( tkn^id, pos^mrch^tkn^id^d ); pos^mrch^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn, pos^mrch^tkn^lgth ); #ADD 19253 PSTM^FRMT^SEM^ADDL^DATA ! ! To retrieve Token Structure SK from PSTM ! tkn^id ':=' p2p^addl^data^tkn^id^d; p2p^addl^data^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^tkn, tkn^lgth ); #ADD 19566 PSTM^FRMT^SEM^ADDL^DATA sem.proc^cde = sem^return^d or ( sem.proc^cde = sem^pmnt^txn^d and ( p2p^addl^data^tkn^fnd and p2p^addl^data^tkn.mc.txn^rsn = "12" ) ) then #DELETE 19567 PSTM^FRMT^SEM^ADDL^DATA #ADD 20957 PSTM^FRMT^SEM^ADDL^DATA ! ! To set DE48 SE32 to the Mastercard-assigned ID for the merchant ! and DE48 SE77 to "P10", if the transaction is an installment ! and originates from an installment provider. ! if pstm.typ = request^d and ( ( ps51^tkn^found and ps51^get^tkn.moto^flg = "3" ) or ( pos^data1^tkn^fnd and pos^data1^tkn.pmnt^ind = "I" ) ) then begin ! ! Installment ! call pstm^frmt^stf^prikey( pstm, stf ); if pos^mrch^tkn^fnd and pos^mrch^tkn.pgm^ind = "I" and pos^mrch^tkn.mrch^id <> [ $len( pos^mrch^tkn.mrch^id ) * [" "] ] and pos^mrch^tkn.mrch^id <> [ $len( pos^mrch^tkn.mrch^id ) * ["0"] ] then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, "P10" ); lgth := lgth + $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, "06" ); move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, pos^mrch^tkn.mrch^id ); lgth := lgth + $len( sem.addl^data.info.mc^asgn^id^sub^fld^32 ); end else if util^stf^get( stf ) and stf.swi^merch.id.byte[ 6 ] = "I" then begin movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data, "P10" ); lgth := lgth + $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, "06" ); movl( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, stf.swi^merch.id, $len( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data ) ); lgth := lgth + $len( sem.addl^data.info.mc^asgn^id^sub^fld^32 ); end; end; #ADD 20958 PSTM^FRMT^SEM^ADDL^DATA ! ! To populate DE 48 SE 32 for all transactions if new param ! SW-BNET-SEND-DE48SE32 is configured. ! if bnet^g.send^de48se32^g and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag <> "32" then begin call pstm^frmt^stf^prikey( pstm, stf ); if pos^mrch^tkn^fnd and pos^mrch^tkn.mrch^id <> blanks for $len( pos^mrch^tkn.mrch^id ) and pos^mrch^tkn.mrch^id <> zeroes for $len( pos^mrch^tkn.mrch^id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, pos^mrch^tkn.mrch^id ); end ! of pos^mrch^tkn^fnd else if found^auto^substan^data^tkn and auto^substan^data^tkn.asgn^id <> blanks for $len( auto^substan^data^tkn.asgn^id ) and auto^substan^data^tkn.asgn^id <> zeroes for $len( auto^substan^data^tkn.asgn^id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, auto^substan^data^tkn.asgn^id ); end ! of found^auto^substan^data^tkn else if e^com^addl^data^tkn^found and e^com^addl^data^tkn.scheme^merch^id <> blanks for $len( e^com^addl^data^tkn.scheme^merch^id ) and e^com^addl^data^tkn.scheme^merch^id <> zeroes for $len( e^com^addl^data^tkn.scheme^merch^id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, e^com^addl^data^tkn.scheme^merch^id ); end ! of e^com^addl^data^tkn found else if util^stf^get ( stf ) and stf.swi^merch.id <> blanks for $len( stf.swi^merch.id ) and stf.swi^merch.id <> zeroes for $len( stf.swi^merch.id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, stf.swi^merch.id ); end; if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> blanks for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, "06" ); lgth := lgth + $len( sem.addl^data.info. mc^asgn^id^sub^fld^32 ); end; end; #ADD 21261 PSTM^FRMT^SEM^ADDL^DATA if pos^mrch^tkn^fnd then #DELETE 21262 /21264 PSTM^FRMT^SEM^ADDL^DATA #DELETE 21267 PSTM^FRMT^SEM^ADDL^DATA #ADD 28191 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! To add support for the new value of "22" in DE48 SE84 ! else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "22" then begin movd( err^flg, "Q" ); end #ADD 31865 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! To set CI token data, if DE 48 SE 77 is set to "P10" ! if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "P10" then begin movd( pos^mrch^tkn.pgm^ind, "I" ); move( pos^mrch^tkn.mrch^id, sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data ); end else #ADD 33204 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! To set DE 61 position 7 using the REAL-TIME-DATA-IND ! field in token CH. ! if sem.ntl^pos^data.cond^cde.byte[ 6 ] = "1" then begin movd( pos^data1^tkn.real^time^data^ind, "2" ); add^pos^data1 := true; end; #ADD 34960 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! To set C0 token data and CH token data, if DE 48 SE 77 ! is set to "P10" if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = "P10" then begin movd( ps51^tkn^data.moto^flg, "3" ); movd( pos^data1^tkn.pmnt^ind, "I" ); add^pos^data1 := true; end; #ADD 41929 TRACE^SEM ! ! ALM Service DATA ! if hdr.addl^data.info. alm^srvc^data^sub^fld^24.tag = "24" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. alm^srvc^data^sub^fld^24.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - ALM Service Code ! if hdr.addl^data.info. alm^srvc^data^sub^fld^24. srvc^cde.tag = "01" then begin call ascii^integer( hdr.addl^data.info. alm^srvc^data^sub^fld^24. srvc^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. alm^srvc^data^sub^fld^24. srvc^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! Move Subfield 2 - ALM Product Code ! if hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^cde.tag = "02" then begin call ascii^integer( hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! Move Subfield 3 - ALM Product Class ! if hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^clas.tag = "03" then begin call ascii^integer( hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^clas.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. alm^srvc^data^sub^fld^24. prod^clas.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! ! ! Move Subfield 4 - ALM Rate Type ! if hdr.addl^data.info. alm^srvc^data^sub^fld^24. rate^typ.tag = "04" then begin call ascii^integer( hdr.addl^data.info. alm^srvc^data^sub^fld^24. rate^typ.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. alm^srvc^data^sub^fld^24. rate^typ.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 04 ! end; ! of if hdr...tag = "24" #ADD 46680 TRACE^SEM if ptr[ length ] = "24" then begin ! ! ALM Service Data ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. alm^srvc^data^sub^fld^24.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield 1 - ALM Service Code ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. alm^srvc^data^sub^fld^24. srvc^cde.tag ); end ! subfield 01 ! else ! ! Move Subfield 2 - ALM Product Code ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. alm^srvc^data^sub^fld^24. prod^cde.tag ); end ! subfield 02 ! else ! ! Move Subfield 3 - ALM Product Class ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. alm^srvc^data^sub^fld^24. prod^clas.tag ); end ! subfield 03 ! else ! ! Move Subfield 4 - ALM Rate Type ! if sub^ptr = "04" then begin call sub^move^subfield( sem^ptr. addl^data.info. alm^srvc^data^sub^fld^24. rate^typ.tag ); end ! subfield 04 ! else ! ! bad data, clear sem de-48.se-24, ! end loop ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. alm^srvc^data^sub^fld^24. tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. alm^srvc^data^sub^fld^24, " ", $len( sem^ptr.addl^data.info. alm^srvc^data^sub^fld^24 ) ); loop^lgth := tag^length; end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "24" else #ADD 54460 UTIL^ILF^UPDT sem, sem^lgth, #DELETE 54461 /54462 UTIL^ILF^UPDT #ADD 58425 UTIL^SWI^TKN^INIT ! ! To move data present in DE48 SE24 to Switch Token ! if sem.addl^data.info. alm^srvc^data^sub^fld^24.tag = "24" then begin if sem.addl^data.info.alm^srvc^data^sub^fld^24. srvc^cde.tag = "01" then begin move( bnet^tkn^buf.alm^srvc^data.srvc^cde, sem.addl^data.info.alm^srvc^data^sub^fld^24. srvc^cde.tag^data ); end; if sem.addl^data.info.alm^srvc^data^sub^fld^24. prod^cde.tag = "02" then begin move( bnet^tkn^buf.alm^srvc^data.prod^cde, sem.addl^data.info.alm^srvc^data^sub^fld^24. prod^cde.tag^data ); end; if sem.addl^data.info.alm^srvc^data^sub^fld^24. prod^clas.tag = "03" then begin move( bnet^tkn^buf.alm^srvc^data.prod^clas, sem.addl^data.info.alm^srvc^data^sub^fld^24. prod^clas.tag^data ); end; if sem.addl^data.info.alm^srvc^data^sub^fld^24. rate^typ.tag = "04" then begin move( bnet^tkn^buf.alm^srvc^data.rate^typ, sem.addl^data.info.alm^srvc^data^sub^fld^24. rate^typ.tag^data ); end; end; ! of if tag = "24" #ADD 58958 UTIL^SWI^TKN^UPDT ! ! To add support for DE48 SE24 ! if bnet^tkn^buf.alm^srvc^data <> blanks for $len( bnet^tkn^buf.alm^srvc^data ) then begin movl( bnet^tkn.alm^srvc^data, bnet^tkn^buf.alm^srvc^data, $len( bnet^tkn.alm^srvc^data ) ); end; ! of if bnet^tkn^buf.alm^srvc^data #ENDSCN = SW0P207 !#CMP2.28 10/06/21 BNETLIBS6312 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6312 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6312 * ******************************************************************************** #SCN = SW0P247 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6312 #NEWVERSION = 6313 #ADD 11002L0o ! 05OCT2021 KandhaB ! Symptom: Interface sets response code '96' due to which ! Mastercard goes stand-in for those transactions that ! are not intended to go for STIP. ! Problem: The transactions that are denied by Host system with ! response code '30' gets mapped internally to '69', which ! further translated to external response code '96' by ! interface and that inturn invokes STIP at Mastercard. ! Fix: The interface has been modified to map to corresponding ! external response codes so that STIP is not invoked by ! Mastercard for those transactions that are not intended ! to invoke STIP. ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3345522 #ADD 18529 PSTM^FRMT^RESP^CDE^TO^SEM "003",! Approved - more id ! "*8",! A - 57, P - 08 #DELETE 18530 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 18554 PSTM^FRMT^RESP^CDE^TO^SEM "058",! Declined Card Status ! "14",! Invalid card number #DELETE 18555 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 18573 PSTM^FRMT^RESP^CDE^TO^SEM "069",! Message Edit Error ! "*4",! A - 57, P - 12 #DELETE 18574 PSTM^FRMT^RESP^CDE^TO^SEM #ADD 18575 PSTM^FRMT^RESP^CDE^TO^SEM "070",! No IDF ! "15",! Invalid Issuer #DELETE 18576 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0P247 !#CMP2.28 10/07/21 BNETLIBS6313 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6313 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6313 * ******************************************************************************** #SCN = SW0P250 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6313 #NEWVERSION = 6314 #ADD 11002M0I ! 08OCT2021 wielerk ! Symptom: Interface adds BNET-SWI-TKN with incorrect version. ! Problem: The current version of the token is "22" and the ! interface is still setting "21". ! Fix: Modified the token version to be "22". ! Proc Modified: util^swi^tkn^init ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3350497. #REPLACE 58019E01 UTIL^SWI^TKN^INIT bnet^tkn^buf.ver^id ':=' "22"; #ENDSCN = SW0P250 !#CMP2.28 10/27/21 BNETLIBS6314 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6314 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6314 * ******************************************************************************** #SCN = SW0P256 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6314 #NEWVERSION = 6315 #ADD 11002N0A ! 27OCT2021 wielerk ! Symptom: Reversals sent by this interface after recent mandates ! experience rejects with EMS messages #1405 and #1409. ! Problem: The cash back amount for Purchase with cash back ! transactions was inadvertently space filled in the ! external message. ! Fix: Modified the initialization of DE-54 to occur after ! transaction has been identified as not purchase with ! cash back. ! Proc Modified: pstm^frmt^amt^to^sem^amt ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3356459. ! ! 27OCT2021 wielerk ! Symptom: Interface does not add DE-48.SE-24 ( addl-data.alm. ! srvc.data ) to the B1 token. ! Problem: The subfield is not placed in the request structure ! when returned in a response. ! Fix: Modified the code to identify if DE-48.SE-24 has been ! returned in a response and to move it to the request ! structure for token logging. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3352818. #DELETE 17264L01 PSTM^FRMT^AMT^TO^SEM^AMT #REPLACE 17269L00 PSTM^FRMT^AMT^TO^SEM^AMT init( sem.addl^amt, " ", $len( sem.addl^amt ) ); #ADD 27922K0P SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.alm^srvc^data^sub^fld^24.tag = "24" then begin move( rqst.addl^data.info.alm^srvc^data^sub^fld^24, sem.addl^data.info.alm^srvc^data^sub^fld^24 ); end; #DELETE 27922K0Q SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0P256 !#CMP2.28 11/03/21 BNETLIBS6315 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6315 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6315 * ******************************************************************************** #SCN = SW0P260 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6315 #NEWVERSION = 6316 #ADD 11002O0R ! 03NOV2021 wielerk ! Symptom: Issuer unmatched AFD reversals are declined by the ! interface with a response code of 30. ! Problem: Unmatched reversals use the request formatting proc ! for the initial formatting. There is code for AFD ! transactions that returns false if sem.typ is not a ! request or advice. ! Fix: Modified the code to include sem.typ of reversal for ! PSTM formatitng. ! Proc Modified: sem^frmt^proc^cde^to^pstm^tran ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3359245. #ADD 26582 SEM^FRMT^PROC^CDE^TO^PSTM^TRAN sem.typ = sem^acq^rvsl^rqst^d or sem.typ = sem^rvsl^adv^d or #ENDSCN = SW0P260 !#CMP2.28 11/16/21 BNETG 60127FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60127 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60127 * ******************************************************************************** #SCN = SW0P263 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p000260e ! 16NOV2021 MohanD ! Symptom: Banknet Release 22.Q1 Functional Enhancements ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Problem: None. ! Fix: Modified the interface in support for the below ! requirements: ! AN 5305 - Introducing Mastercard MoneySend Cash-in ! at ATM in Switzerland ! AN 5499 - Revised Standards for Identifying MPOS ! Terminals in Transaction Messages ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Added Global variable for new param EMS-PAN-DIGITS ! Added Logic to source-in supprs_pan proc from bautile ! Dependency: Apply fixes to: ! BA60AFT : RQCPFS, SCRNCPF, SVCPFS ! BA60DDL : DDLFCPF, DDLPSTKN ! BA60EXT : OMFXS ! BA60SRC : BAUTILS ! PS60RTAU: AUTHLIBS, ROUTERS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #PDM-003149 #ADD k0043504 string ems^mask^digits^g[ 0:2 ]; #ADD 01366400 ? supprs_pan, #ADD 01366404 ! supprs_pan, ! #ENDSCN = SW0P263 !#CMP2.28 11/16/21 BNETS 6164 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6164 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6164 * ******************************************************************************** #SCN = SW0P264 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6164 #NEWVERSION = 6165 #ADD 03821>0f ! 16NOV2021 MohanD ! Symptom: Banknet Release 22.Q1 Functional Enhancements ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Problem: None. ! Fix: Modified the interface in support for the below ! requirements: ! AN 5305 - Introducing Mastercard MoneySend Cash-in ! at ATM in Switzerland ! AN 5499 - Revised Standards for Identifying MPOS ! Terminals in Transaction Messages ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Added logic to initialize the new global variable ! ems^mask^digits^g ! Added Logic to process new LCONF Param ! EMS-PAN-DIGITS ! Modified Procedures: INIT^BNET^G ! INIT^PARAMPROC ! Dependency: Apply fixes to: ! BA60AFT : RQCPFS, SCRNCPF, SVCPFS ! BA60DDL : DDLFCPF, DDLPSTKN ! BA60EXT : OMFXS ! BA60SRC : BAUTILS ! PS60RTAU: AUTHLIBS, ROUTERS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #PDM-003149 #ADD 10428Q01 INIT^BNET^G bnet^array^g.ems^mask^digits^g ':=' "094"; #ADD 12676>01 INIT^PARAMPROC "P", "EMS-PAN-DIGITS ", #DELETE 12676>02 INIT^PARAMPROC #ADD 13501>0F INIT^PARAMPROC ! ! ! EMS-PAN-DIGITS ! ! ! if not ferror then begin if lconf.param^msg.plgth <> 3 or not all^numeric( lconf.param^msg.ptxt, lconf.param^msg.plgth ) then begin bnet^array^g.ems^mask^digits^g ':=' "094"; end else begin bnet^array^g.ems^mask^digits^g ':=' lconf.param^msg.ptxt for lconf.param^msg.plgth; end; end; #ENDSCN = SW0P264 !#CMP2.28 11/16/21 BNETLIBS6316 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6316 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6316 * ******************************************************************************** #SCN = SW0P265 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6316 #NEWVERSION = 6317 #ADD 11002P0E ! 16NOV2021 MohanD ! Symptom: Banknet Release 22.Q1 Functional Enhancements ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Problem: None. ! Fix: Modified the interface in support for the below ! requirements: ! AN 5305 - Introducing Mastercard MoneySend Cash-in ! at ATM in Switzerland ! AN 5499 - Revised Standards for Identifying MPOS ! Terminals in Transaction Messages ! Case #03348547 - Mastercard Interface showing PAN ! # when the ILF record cannot be logged ! Added logic to process a MoneySend Cash-In transaction ! Added Logic to invoke new utility procedure supprs_pan ! before dumping the ILF record to EMS ! Procs Modified : sem^frmt^xrqst^to^pstm^0200 ! pstm^frmt^0200^to^xrqst ! util^ilf^add ! util^ilf^updt ! Dependency: Apply fixes to: ! BA60AFT : RQCPFS, SCRNCPF, SVCPFS ! BA60DDL : DDLFCPF, DDLPSTKN ! BA60EXT : OMFXS ! BA60SRC : BAUTILS ! PS60RTAU: AUTHLIBS, ROUTERS ! SW60BNET: BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Reference: WO #PDM-003149 #ADD 13864 SUB^LOG^ERROR ( pos^data1^tkn.term^typ = "8" or pos^data1^tkn.term^typ = "9" ) then #DELETE 13865 SUB^LOG^ERROR #ADD 13867 SUB^LOG^ERROR call ascii^integer^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.accpt^data^sub^fld^21.tag, "21" ); movd( sem.addl^data.info.accpt^data^sub^fld^21.lgth, "05" ); movd( sem.addl^data.info.accpt^data^sub^fld^21. mpos^dev^typ.tag, "01" ); movd( sem.addl^data.info.accpt^data^sub^fld^21. mpos^dev^typ.lgth, "01" ); if pos^data1^tkn.term^typ = "9" then begin movd( sem.addl^data.info.accpt^data^sub^fld^21. mpos^dev^typ.tag^data, "0" ); end else if pos^data1^tkn.term^typ = "8" then begin movd( sem.addl^data.info.accpt^data^sub^fld^21. mpos^dev^typ.tag^data, "1" ); end; call ascii^integer( sem.addl^data.info. accpt^data^sub^fld^21.lgth, 2, se^lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); if pos^data1^tkn.crdhldr^authn^cap^ind = "7" then begin ! ! ! Software-based PIN entry capability ! ! ! movd( sem.pos^entry^mde.byte[ 2 ], "3"); end; #ADD 33167 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^moneysend^d( sem ) and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag^data = "C58" then begin if sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) then begin movd( pos^data1^tkn.term^typ, "A" ); add^pos^data1 := true; end else begin return resp^tran^not^supp^sem^l; end end else #ADD 52387 UTIL^ILF^ADD call supprs_pan( prikey.pan, bnet^array^g.ems^mask^digits^g ); movl ( ilf.prikey, prikey, prikey^lgth ); #DELETE 52388 UTIL^ILF^ADD #ADD 52400 UTIL^ILF^ADD call supprs_pan( prikey.pan, bnet^array^g.ems^mask^digits^g ); movl ( ilf.prikey, prikey, prikey^lgth ); #DELETE 52401 UTIL^ILF^ADD #ADD 54327 UTIL^ILF^UPDT int .prikey( prikey^def ) := wordaddr( @ilf.prikey ); #ADD 54547 UTIL^ILF^UPDT call supprs_pan( prikey.pan, bnet^array^g.ems^mask^digits^g ); #ADD 54587 UTIL^ILF^UPDT call supprs_pan( prikey.pan, bnet^array^g.ems^mask^digits^g ); #ADD 54605 UTIL^ILF^UPDT call supprs_pan( prikey.pan, bnet^array^g.ems^mask^digits^g ); #ENDSCN = SW0P265 !#CMP2.28 12/06/21 BNETLIBS6317 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6317 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6317 * ******************************************************************************** #SCN = SW0P282 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6317 #NEWVERSION = 6318 #ADD 11002Q0W ! 15NOV2021 wielerk ! Symptom: Interface does not forward some reversals for same ! card and amount if adjustment has processed. ! Problem: The interface is matching on prior ILF records and ! not forwarding reversals. ! Fix: Modified the code to include PSTM tran code of ! adjustment and return adjustment to exclude a match. ! Proc Modified: util^ilf^get ! sub^ilf^get^reduced^prikey ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Reference: Case #3356270. ! ! 23NOV2021 wielerk ! Symptom: Interface does not pass DE-48.SE-42 ( addl data.ecomm ! indicators ) in subsequent MITs or recurring ! transactions. ! Problem: The rule for passing DE-48.SE-42 has expanded and ! should be passed for any transaction with a numeric ! value in the PS51.AUTHN-COLL-IND. ! Fix: Modified the code to allow transactions with a numeric ! value in the PS51.AUTHN-COLL-IND to send DE-48.SE-42. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3360391. #ADD 20090 PSTM^FRMT^SEM^ADDL^DATA end ! of ps51^get^tkn.e^com^flg >= "5" and <= "9" else begin e^com := 7; end; if ( ps51^get^tkn.e^com^flg >= "5" and ps51^get^tkn.e^com^flg <= "9" ) or ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [" "] ] then begin #ADD 53036 SUB^ILF^GET^REDUCED^PRIKEY not ( pos^adjust^d( ilf.pos ) ) and not ( pos^return^adjust^d( ilf.pos ) ) and #ENDSCN = SW0P282 !#CMP2.28 12/09/21 BNETLIBS6318 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6318 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6318 * ******************************************************************************** #SCN = SW0P286 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6318 #NEWVERSION = 6319 #ADD 11002R0S ! 09DEC2021 wielerk ! Symptom: Interface passes incorrect value in DE-61.SE-10 ( ntl ! pos data.cond cde.CAT ind ) for unattended terminals. ! Problem: When the CAT level indicator in the PTD is set to "1" ! ( unattended term ) and a contactless transaction is ! entered, DE-61.DE-10 is set to "1" ( PIN present ) ! incorrectly. ! Fix: Modified the code to include an edit for contactless ! along with the no EMV edit to set DE-61.SE-10 to "2". ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3358765. #REPLACE 13783 /13783 OFFSET 0 SUB^LOG^ERROR if sem.pos^entry^mde = pan^auto^cntctlss^m^chip or not emv^data^bit^d then #ENDSCN = SW0P286 !#CMP2.28 12/23/21 BNETG 60128FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60128 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60128 * ******************************************************************************** #SCN = SW0P289 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q000260Q ! 22DEC2021 GadiA ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 3 ! Problem: None ! Fix: The interface has been enhanced for the following: ! Added new defines to identify different types of AAV ! for EMV 3-D Secure: ! sem^aav^frictionless^d, sem^aav^challenge^d, ! sem^aav^refresh^or^3ri^d, sem^aav^trusted^mrch^exempt^d, ! sem^authn^tknzd^txn^d. ! Dependency: Apply fix to: ! SW60BNET: BNETG, BNETLIBS. ! Run Make. ! Reference: WO #009106. #ADD n0023308 define sem^aav^frictionless^d( x ) = ( x.addl^data.info.ucaf^sub^fld^43.tag^data = "kA" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kO" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kR" )#; define sem^aav^challenge^d( x ) = ( x.addl^data.info.ucaf^sub^fld^43.tag^data = "kB" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kP" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kS" )#; define sem^aav^refresh^or^3ri^d( x ) = ( x.addl^data.info.ucaf^sub^fld^43.tag^data = "kO" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kP" or x.addl^data.info.ucaf^sub^fld^43.tag^data = "kQ" )#; define sem^aav^trusted^mrch^exempt^d( x ) = ( x.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" and x.addl^data.info.ucaf^sub^fld^43.tag^data = "kR" )#; define sem^authn^tknzd^txn^d( x ) = ( x.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "242" or ( x.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" and x.addl^data.info.ucaf^sub^fld^43.tag^data = "kD" ) )#; #ENDSCN = SW0P289 !#CMP2.28 12/23/21 BNETLIBS6319 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6319 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6319 * ******************************************************************************** #SCN = SW0P290 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6319 #NEWVERSION = 6320 #ADD 11002S0F ! 22DEC2021 GadiA ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 3 ! Problem: None ! Fix: The interface has been enhanced for the following: ! - To check the SLI (DE 48 SE 42 SF 1) leading ! indicators in the AAV (DE 48 SE 43) in an EMV 3DS ! transaction and set the AUTHN-RESP field in the ! EMV 3-D Secure Data token (ID = "FK"). ! - Added logic to set the SCA-IND field in the SCA ! Acquirer Data token (ID = "FH") when a fully ! authenticated tokenized transaction is received. ! - Added logic to set the TRUSTED-MRCH-EXEMPT-RSLT field ! and the new CAV-TYP field in the SCA Acquirer Data ! token (ID = "FH"). ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETG, BNETLIBS. ! Run Make. ! Reference: WO #009106. #DELETE 34282 /34283 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 34284 SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec = "242" ) then #ADD 35326 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data = "2" and sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "214" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "216" then begin ! ! Not authenticated ! movd( emv^3ds^data^tkn.authn^resp, "0" ); end else if sem^aav^challenge^d( sem ) or sem^aav^frictionless^d( sem ) or sem^aav^refresh^or^3ri^d( sem ) then begin ! ! Authentication response from issuer ! movd( emv^3ds^data^tkn.authn^resp, "1" ); end else begin ! ! Authentication response from interchange ! movd( emv^3ds^data^tkn.authn^resp, "2" ); end; end; #ADD 35327 SEM^FRMT^XRQST^TO^PSTM^0200 [ $len( emv^3ds^data^tkn ) * [ " " ] ] then #DELETE 35328 /35329 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36247 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and sem^aav^trusted^mrch^exempt^d( sem ) then begin movd( sca^acq^data^tkn.trusted^mrch^exempt^rslt, "1" ); end; #ADD 36259 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d and ( sem.pos^entry^mde = elec^commerce or sem.pos^entry^mde = mobile^ecomm^d or sem.pos^entry^mde = credential^on^file^entry^d ) and sem^authn^tknzd^txn^d( sem ) and ps51^tkn^data.cavv^aav^rslt^cde = "2" then begin ! ! ! Validated AAV or Token Cryptogram ! ! ! movd( sca^acq^data^tkn.sca^ind, "1" ); end; #DELETE 36262 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36262G02 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = pan^auto^cntctlss^m^chip and sem.addl^data.info. #DELETE 36262G03 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36290G02 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data = "2" and sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin ! ! EMV 3-D Secure AAV ! if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "212" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "217" then begin if sem.addl^data.info.trc^id^sub^fld^63.tag = "63" and sem^aav^refresh^or^3ri^d( sem ) then begin ! ! 3RI Subsequent MIT or AAV Refresh ! movd( sca^acq^data^tkn.cav^typ, "3" ); end else if sem^aav^frictionless^d( sem ) then begin ! ! Frictionless ! movd( sca^acq^data^tkn.cav^typ, "2" ); end else if sem^aav^challenge^d( sem ) then begin ! ! Challenge ! movd( sca^acq^data^tkn.cav^typ, "1" ); end else begin ! ! Stand-In RBA ! movd( sca^acq^data^tkn.cav^typ, "4" ); end; end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec = "211" then begin ! ! Merchant Only Authenticated ! movd( sca^acq^data^tkn.cav^typ, "5" ); end else begin ! ! Not Authenticated ! movd( sca^acq^data^tkn.cav^typ, "6" ); end; end else begin ! ! Not EMV 3-D Secure ! movd( sca^acq^data^tkn.cav^typ, "0" ); end; #ENDSCN = SW0P290 !#CMP2.28 12/27/21 BNETLIBS6320 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6320 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6320 * ******************************************************************************** #SCN = SW0P295 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6320 #NEWVERSION = 6321 #ADD 11002T0K ! 27DEC2021 wielerk ! Symptom: Interface passes incorrect value in DE-48.SE-63 ( addl ! data.trc id sub fld 63 ) in MIT reversals. ! Problem: The interface was passing the value from the ILF ! which is the value of the 0100 when MITs require ! the value from the 0110 being reversed. ! Fix: Modified the code to include an edit for DE-3 to ! be a purchase and DE-61.cond cde[6] = "4" ( pre auth ) ! to use the value from the ILF. ! Proc Modified: pstm^frmt^0420^to^acq^xrvsl ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3372580. #ADD 16458 PSTM^FRMT^0420^TO^ACQ^XRVSL * [" "] ] and orig^sem.proc^cde = sem^purchase^d and orig^sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then #DELETE 16459 PSTM^FRMT^0420^TO^ACQ^XRVSL #ENDSCN = SW0P295 !#CMP2.28 01/20/22 BNETLIBS6321 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6321 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6321 * ******************************************************************************** #SCN = SW0Q008 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6321 #NEWVERSION = 6322 #ADD 11002U0F ! 20JAN2022 wielerk ! Symptom: Interface abends with a trap #2 collapsing an external ! message. ! Problem: The interface was calculating a pointer address using ! a signed operator. ! Fix: Modified the code to use unsigned operators for address ! calculations. ! Proc Modified: util^collapse^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3384268. #REPLACE 43899 TRACE^SEM @ptr := @ptr '+' length; #REPLACE 44000 /44001 TRACE^SEM @ptr := @ptr '+' subelement^id^lgth^l '+' #REPLACE 44062 TRACE^SEM @ptr := @ptr '+' tag^length; #REPLACE 44088 TRACE^SEM @ptr := @ptr '+' sub^lgth; #REPLACE 44115 TRACE^SEM @ptr := @ptr '+' length; #REPLACE 44377 TRACE^SEM @ptr := @ptr '+' 6; #REPLACE 44548 TRACE^SEM @ptr := @ptr '+' 6; #REPLACE 44630I0I TRACE^SEM @ptr := @ptr '+' 6; #ENDSCN = SW0Q008 !#CMP2.28 01/27/22 BNETLIBS6322 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6322 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6322 * ******************************************************************************** #SCN = SW0Q010 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6322 #NEWVERSION = 6323 #ADD 11002V0D ! 27JAN2022 wielerk ! Symptom: Interface does not format DE-48.SE-61 ( addl-data.POS. ! data ) correctly for partial approval of Purchase with ! Cash Back transactions. ! Problem: The interface was only setting DE-48.SE-61.2 if the ! PSTM.PRE^AUTH^OPT was set to "C". If the card prefix ! is not in the CPF, the flag will remain a "P". ! Fix: Modified the code to allow a value of "P" in ! PSTM.PRE^AUTH^OPT to set DE-48.SE-61.2. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3388125. #ADD 19391 PSTM^FRMT^SEM^ADDL^DATA ( pstm.pre^auth^opt = "P" or pstm.pre^auth^opt = "C" ) then #DELETE 19392 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0Q010 !#CMP2.28 03/22/22 BNETLIBS6323 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6323 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6323 * ******************************************************************************** #SCN = SW0Q076 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6323 #NEWVERSION = 6324 #ADD 11002W0F ! 22MAR2022 wielerk ! Symptom: Interface sends DE-48.SE-42 ( addl-data.ecom sec sub ! fld 42 ) when card is present. ! Problem: The interface is setting DE-48.SE-42 if PS51 Authn ! coll ind has been populated. ! Fix: Modified the code to add an edit of PSTM.PT^SRV^MDE ! equal to "00" or "01" to existing edits. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3404268. #ADD 20090R06 PSTM^FRMT^SEM^ADDL^DATA if ( ps51^get^tkn.e^com^flg >= "5" and ps51^get^tkn.e^com^flg <= "9" ) or ( ( pstm.pt^srv^entry^mde = pos^unkn or pstm.pt^srv^entry^mde = manual^entry ) and ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [" "] ] ) then #DELETE 20090R07/20090R0A PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0Q076 !#CMP2.28 03/25/22 BNETG 60129FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60129 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60129 * ******************************************************************************** #SCN = SW0Q078 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r000260E ! 23MAR2022 jayaprm ! Symptom: EMV tag 9F6E is not sent in external ATM request ! Problem: For ATM transactions, the 9F6E tag present in S4 token, ! is not mapped to external message. ! Fix: Modified the interface to populate DE48, SE23, SF01 for ! ATM transactions, if 9F6E tag is present in S4 token and ! the length of the data present in 9F6E tag is greater ! than or equal to 6 bytes. ! Added new define atm^emv^suppl^data^reqd^d. ! Dependency: Apply fix to: ! SW60BNET: BNETG ! SW60IBNT: BNETEMVS ! Run Make. ! Reference: Case #3406236. #ADD 00148;03 define atm^emv^suppl^data^reqd^d = ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip and not visa_tran_g )#; #ENDSCN = SW0Q078 !#CMP2.28 04/13/22 BNETDDLS6081 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6081 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6081 * ******************************************************************************** #SCN = SW0Q083 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0026250i * 13APR2022 MohanD * Symptom: Banknet Release 22.Q2 Phase2 Functional Enhancements * Case H24-340013 - Query on Suspect Reversals to * to Mastercard MDS * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 5512 - Enhancements to Support Visa Trusted Listing * Indicator and Visa Merchant ID * AN 5519 - Mastercard Send Enhancement for the MoneySend * and Funding Programs and Gaming and Gambling * AN 5524 - Cardholder-Initiated Transaction and * Merchant-Initiated Transaction Indicators * Added a field DE 48 SE 22 subfield 05 (8 bytes) * CIT-MIT-IND. * Decreased the length of user field within the DE48 * definition by 8 bytes to ensure that the overall * length of the SEM structure is not changed * Case H24-340013 - Query on Suspect Reversals to * Mastercard MDS * Dependency: Apply fixes to: * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BAUTILS * OK60LIB : OKLIBTS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * New files: ILB0422M, ILB0422R, ILB0422S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0422M. Run the ILF conversion using ILB0422R. * Reference: WO #003616 #ADD 01157]0b SEM 08 cit-mit-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). #ADD 0115750Q SEM 04 user-fld pic x(62). #DELETE 0115750R SEM #ENDSCN = SW0Q083 !#CMP2.28 04/13/22 BNETG 60130FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60130 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60130 * ******************************************************************************** #SCN = SW0Q084 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s000260F ! 13APR2022 MohanD ! Symptom: Banknet Release 22.Q2 Phase2 Functional Enhancements ! Case H24-340013 - Query on Suspect Reversals to ! to Mastercard MDS ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 5512 - Enhancements to Support Visa Trusted Listing ! Indicator and Visa Merchant ID ! AN 5519 - Mastercard Send Enhancement for the MoneySend ! and Funding Programs and Gaming and Gambling ! AN 5524 - Cardholder-Initiated Transaction and ! Merchant-Initiated Transaction Indicators ! Case H24-340013 - Query on Suspect Reversals to ! Mastercard MDS ! Added a global variable to hold the value of the new ! LCONF parameter SWI-SEND-ATM-SUSPECT-RVSLS ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BAUTILS ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0422M, ILB0422R, ILB0422S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0422M. Run the ILF conversion using ILB0422R. ! Reference: WO #003616 #ADD p0043502 int send^atm^suspect^rvsls^g; #ENDSCN = SW0Q084 !#CMP2.28 04/13/22 BNETLIBS6324 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6324 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6324 * ******************************************************************************** #SCN = SW0Q085 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6324 #NEWVERSION = 6325 #ADD 11002X0D ! 13APR2022 MohanD ! Symptom: Banknet Release 22.Q2 Phase2 Functional Enhancements ! Case H24-340013 - Query on Suspect Reversals to ! to Mastercard MDS ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 5512 - Enhancements to Support Visa Trusted Listing ! Indicator and Visa Merchant ID ! - Added logic to allow DE 48, SE 32 to be set to ! the Visa Merchant Identifier in a Visa-branded ! request message. ! AN 5519 - Mastercard Send Enhancement for the MoneySend ! and Funding Programs and Gaming and Gambling ! - Added logic to allow DE 48, SE 77 to be set to "C04" ! for transactions with an MCC of "7994" ! (regardless of country code) or "9406" ! AN 5524 - Cardholder-Initiated Transaction and ! Merchant-Initiated Transaction Indicators ! - Added support for new indicators for ! Cardholder-Initiated and Merchant-Initiated ! Transactions. ! Case H24-340013 - Query on Suspect Reversals to ! Mastercard MDS ! - Added Support for the new configuration parameter, ! allowing ATM Acquirers to determine whether suspect ! reversals are forwarded to Mastercard. ! Procs Modified : pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xresp ! util^frmt^addl^data^to^xrvsl ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BAUTILS ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0422M, ILB0422R, ILB0422S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0422M. Run the ILF conversion using ILB0422R. ! Reference: WO #003616 #ADD 12893 SUB^LOG^ERROR sem.merch^typ = "7994" or sem.merch^typ = "9406" or #DELETE 12894 /12895 SUB^LOG^ERROR #ADD 13543 SUB^LOG^ERROR if pstm.pt^srv^entry^mde = pos^unkn or pstm.pt^srv^entry^mde = manual^entry then #DELETE 13544 SUB^LOG^ERROR #DELETE 14972 /14979 PSTM^FRMT^0210^TO^XRESP #ADD 15284 PSTM^FRMT^0210^TO^XRESP end; if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and ( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" or sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" ) then begin mov^( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind, blanks ); mov^( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^cap^ind, blanks ); mov^( sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^acq, blanks ); call ascii^integer^( sem.addl^data.info. mrch^inds^sub^fld^22.lgth, se^lgth ); #ADD 15290 PSTM^FRMT^0210^TO^XRESP se^lgth := 0; if sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin se^lgth := se^lgth + $len( sem.addl^data.info. mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss ); end; if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin se^lgth := se^lgth + $len( sem.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind ); end; #DELETE 15291 /15295 PSTM^FRMT^0210^TO^XRESP #ADD 20958 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g and sem.typ = sem^auth^request^d then begin if pos^mrch^tkn^fnd and pos^mrch^tkn.mrch^id <> blanks for $len( pos^mrch^tkn.mrch^id ) and pos^mrch^tkn.mrch^id <> zeroes for $len( pos^mrch^tkn.mrch^id ) then begin move( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data, pos^mrch^tkn.mrch^id ); end; ! of pos^mrch^tkn^fnd if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> blanks for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) and sem.addl^data.info.mc^asgn^id^sub^fld^32.tag^data <> zeroes for $len( sem.addl^data.info. mc^asgn^id^sub^fld^32. tag^data ) then begin movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.tag, "32" ); movd( sem.addl^data.info. mc^asgn^id^sub^fld^32.lgth, "06" ); lgth := lgth + $len( sem.addl^data.info. mc^asgn^id^sub^fld^32 ); end; end; #ADD 20958L18 PSTM^FRMT^SEM^ADDL^DATA if base24^rel^g >= 5 then #DELETE 20959 PSTM^FRMT^SEM^ADDL^DATA #ADD 21082 PSTM^FRMT^SEM^ADDL^DATA sub^lgth := 0; movd( tkn^id, sca^acq^data^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^data^tkn, sca^acq^data^tkn^lgth ) then begin if sem.typ = sem^auth^request^d then #DELETE 21083 /21089 PSTM^FRMT^SEM^ADDL^DATA #ADD 21154 PSTM^FRMT^SEM^ADDL^DATA if visa_tran_g and sca^acq^data^tkn.sca^exempt^inds = "2000" then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. low^risk^mrch^ind.tag^data, "08" ); end else #ADD 21178 PSTM^FRMT^SEM^ADDL^DATA end; ! of sem.typ = sem^auth^request^d #ADD 21194 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pos^data1^tkn^fnd and #DELETE 21195 PSTM^FRMT^SEM^ADDL^DATA #ADD 21212 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pos^data1^tkn^fnd and #DELETE 21213 PSTM^FRMT^SEM^ADDL^DATA #ADD 21229 PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn^fnd then begin if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind = " " then begin ! ! ! Cardholder-initiated COF transaction ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data, "C101" ); end; if pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" then begin ! ! ! Transaction establishing a COF agreement between ! ! merchant and cardholder ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ], "C" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! ! Merchant-initiated COF transaction (except ! ! incremental auth) ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ], "M" ); end; if pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" or pos^data1^tkn.pmnt^ind = "U" then begin ! ! ! Standing instruction ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 1 ], "1" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! ! Industry practice merchant-initiated COF ! ! transaction (except incremental auth) ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 1 ], "2" ); end; if pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "U" then begin ! ! ! Unscheduled COF transaction ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "01" ); end else if pos^data1^tkn.pmnt^ind = "R" and pos^data1^tkn.recur^pmnt.amt <> "F" then begin ! ! ! Recurring payment for variable amount ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte [ 2 ], "02" ); end else if pos^data1^tkn.pmnt^ind = "R" then begin ! ! ! Recurring payment for fixed amount ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "03" ); end else if pos^data1^tkn.pmnt^ind = "I" then begin ! ! ! Installment payment ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "04" ); end else if pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" then begin ! ! ! Set DE 48, SE 22, SF 05 for industry practice MITs ! ! only if they are COF transactions. ! ! ! if pos^data1^tkn.pmnt^ind = "A" or pos^data1^tkn.pmnt^ind = "P" then begin ! ! ! Reauthorization, e.g. partial shipment ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "05" ); end else if pos^data1^tkn.pmnt^ind = "D" then begin ! ! ! Delayed charges ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "06" ); end else if pos^data1^tkn.pmnt^ind = "X" then begin ! ! ! No show ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "07" ); end else if pos^data1^tkn.pmnt^ind = "S" or pos^data1^tkn.pmnt^ind = "T" then begin ! ! ! Resubmission or unspecified industry practice ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ], "08" ); end; end; if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data <> blanks for $len( sem.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.tag^data ) then begin movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag, "05" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.lgth, "04" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind ); end; end; ! of pos^data1^tkn^fnd ! #ADD 21261L00 PSTM^FRMT^SEM^ADDL^DATA if sem.typ = sem^auth^request^d and pos^mrch^tkn^fnd then #DELETE 21261L01 PSTM^FRMT^SEM^ADDL^DATA #ADD 27954 SEM^FRMT^XRESP^TO^PSTM^0210 move( sem.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind, rqst.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind ); #ADD 34960L0C SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "C101" and sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "4" and sem.pos^entry^mde = credential^on^file^entry^d then begin if pos^data1^tkn.pmnt^info = " " then begin movd( pos^data1^tkn.pmnt^info, "2" ); end; end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ] = "C" and sem.pos^entry^mde = credential^on^file^entry^d then begin movd( pos^data1^tkn.pmnt^info, "3" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ] = "C" then begin movd( pos^data1^tkn.pmnt^info, "0" ); end else if sem.pos^entry^mde = credential^on^file^entry^d and pos^data1^tkn.pmnt^info = " " then begin movd( pos^data1^tkn.pmnt^info, "2" ); end; if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "C101" then begin if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then begin movd( pos^data1^tkn.pmnt^ind, "U" ); end else if sem.pos^entry^mde <> credential^on^file^entry^d then begin movd( pos^data1^tkn.pmnt^ind, "C" ); end; end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M101" then begin movd( pos^data1^tkn.pmnt^ind, "U" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "C102" or sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M102" then begin movd( pos^data1^tkn.pmnt^ind, "R" ); movd( pos^data1^tkn.recur^pmnt.amt, "V" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "C103" or sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M103" then begin movd( pos^data1^tkn.pmnt^ind, "R" ); movd( pos^data1^tkn.recur^pmnt.amt, "F" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "C104" or sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M104" then begin movd( pos^data1^tkn.pmnt^ind, "I" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M205" then begin movd( pos^data1^tkn.pmnt^ind, "P" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M206" then begin movd( pos^data1^tkn.pmnt^ind, "D" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M207" then begin movd( pos^data1^tkn.pmnt^ind, "X" ); end else if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data = "M208" then begin movd( pos^data1^tkn.pmnt^ind, "S" ); end; add^pos^data1 := true; end; #ADD 36387 SEM^FRMT^XRQST^TO^SEM^XRESP if addl^data^bit^d and sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin ! ! ! Reduce the length for this tag so the length of ! ! the field is calculated correctly in ! ! util^frmt^addl^data^to^xresp ! ! ! call ascii^integer^( sem.addl^data.lgth, lgth ); call ascii^integer^( sem.addl^data.info. mrch^inds^sub^fld^22.lgth, sub^lgth ); sub^lgth := sub^lgth + 4; lgth := lgth - sub^lgth; call integer^ascii^( resp.addl^data.lgth, lgth ); mov^( resp.addl^data.info.mrch^inds^sub^fld^22, blanks ); sub^lgth := 0; move( resp.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind, sem.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind ); sub^lgth := sub^lgth + $len( resp.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind ); movd( resp.addl^data.info.mrch^inds^sub^fld^22.tag, "22" ); call integer^ascii^( resp.addl^data.info. mrch^inds^sub^fld^22.lgth, sub^lgth ); end; #ADD 41898 TRACE^SEM ! ! ! Move Subfield 5 - CIT MIT Indicator ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 05 ! #ADD 46556 TRACE^SEM else ! ! ! Move Subfield 5 - CIT MIT Indicator ! ! ! if sub^ptr = "05" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.tag ); end ! subfield 05 ! #ADD 48922 UTIL^FRMT^ADDL^DATA^TO^XRESP if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin call ascii^integer^( sem.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.lgth, delta^lgth ); delta^lgth := delta^lgth + $len( sem.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.tag ) + $len( sem.addl^data.info. mrch^inds^sub^fld^22. cit^mit^ind.lgth ); lgth := lgth + delta^lgth; end; #ADD 49083 UTIL^FRMT^ADDL^DATA^TO^XRVSL ! ! ! Subelement 22-Acceptance Data ! ! ! if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" and sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin ! ! ! Subfield 05 required ! ! ! move( rvsl.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind, sem.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind ); tag^lgth := $len( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind ); move( rvsl.addl^data.info.mrch^inds^sub^fld^22.tag, sem.addl^data.info.mrch^inds^sub^fld^22.tag ); call integer^ascii^( rvsl.addl^data.info. mrch^inds^sub^fld^22.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; #ENDSCN = SW0Q085 !#CMP2.28 04/13/22 BNETS 6165 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6165 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6165 * ******************************************************************************** #SCN = SW0Q086 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6165 #NEWVERSION = 6166 #ADD 03821|0U ! 13APR2022 MohanD ! Symptom: Banknet Release 22.Q2 Phase2 Functional Enhancements ! Case H24-340013 - Query on Suspect Reversals to ! to Mastercard MDS ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 5512 - Enhancements to Support Visa Trusted Listing ! Indicator and Visa Merchant ID ! AN 5519 - Mastercard Send Enhancement for the MoneySend ! and Funding Programs and Gaming and Gambling ! AN 5524 - Cardholder-Initiated Transaction and ! Merchant-Initiated Transaction Indicators ! Case H24-340013 - Query on Suspect Reversals to ! Mastercard MDS ! Added Logic to initialize the new global variable ! send^atm^suspect^rvsls^g ! Added Logic to process the new LCONF ! parameter SWI-SEND-ATM-SUSPECT-RVSLS ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BAUTILS ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! New files: ILB0422M, ILB0422R, ILB0422S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0422M. Run the ILF conversion using ILB0422R. ! Reference: WO #003616 #ADD 10428:04 INIT^BNET^G bnet^g.send^atm^suspect^rvsls^g := true; #ADD 12676|05 INIT^PARAMPROC "P", "SWI-SEND-ATM-SUSPECT-RVSLS ", #ADD 13501|0J INIT^PARAMPROC ! ! ! SWI-SEND-ATM-SUSPECT-RVSLS ! ! ! if not ferror then begin bnet^g.send^atm^suspect^rvsls^g := true; if lconf.param^msg.ptxt = "N" then begin bnet^g.send^atm^suspect^rvsls^g := false; end; end; #ENDSCN = SW0Q086 !#CMP2.28 04/15/22 BNETLIBS6325 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6325 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6325 * ******************************************************************************** #SCN = SW0Q090 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6325 #NEWVERSION = 6326 #ADD 11002Y0o ! 15APR2022 wielerk ! Symptom: Interface is sending a different CAT level for an AFD ! completion than the original AFD pre-auth. ! Problem: The interface is formatting DE-61 ( ntl pos data ) ! from the ILF which is the pre-auth image. ! Fix: Modified the code to only set DE-61.SE-7 from the ! ILF. ! Proc Modified: pstm^frmt^0220^to^xadv ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3412441. #ADD 15833 PSTM^FRMT^0220^TO^XADV move( orig^sem.ntl^pos^data.cond^cde.byte[ 6 ], sem.ntl^pos^data.cond^cde.byte[ 6 ] ); #DELETE 15834 PSTM^FRMT^0220^TO^XADV #ENDSCN = SW0Q090 !#CMP2.28 05/03/22 BNETS 6166 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6166 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6166 * ******************************************************************************** #SCN = SW0Q104 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6166 #NEWVERSION = 6167 #ADD 03821@0W ! 29APR2022 jayaprm ! Symptom: BASE24 BNET interface initiate infinite on-demand ! key change process ! Problem: "On-demand" key exchange sequence is initiated when ! an error is encountered during a key exchange sequence ! Fix: Modified the interface to not initiate infinite ! on-demand key exchange process and to reset the new ! key timer. ! Procs Modified: sem^key^chng^rqst ! Dependency: Apply fixes to: ! SW60BNET: BNETS ! Reference: Case #3415555 #ADD 20234y0E SEM^KEY^CHNG^RQST if pct.secure.pin^key^timer^lmt <> 0d then begin ! ! Delete and reset the new key timer ! call timer^delete( tcb^g, typ^14^newkey^l, subtyp^8^newkey^l ); call timer^insert( tcb^g, pct.secure.pin^key^timer^lmt, typ^14^newkey^l, subtyp^8^newkey^l ); end; #DELETE 20234y0F SEM^KEY^CHNG^RQST #ENDSCN = SW0Q104 !#CMP2.28 05/04/22 BNETS 6167 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6167 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6167 * ******************************************************************************** #SCN = SW0Q110 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6167 #NEWVERSION = 6168 #ADD 03821\0D ! 05MAY2022 wielerk ! Symptom: Interface only reports DE-48 ( bnet data ) errors, not ! subelement errors. ! Problem: When a format error involving DE-48 occurs, the EMS ! message doesn't include the subelement. This requires ! an audit to be run to identify the format error. ! Fix: Modified the interface to report sub-element in format ! errors. ! Proc Modified: sem^request^deny ! Dependency: Apply fix to: ! SW60BNET: BNETS ! Run Make. ! Replace file BNETLOGM. ! Reference: Case #3419644. #ADD 21265 SEM^REQUEST^DENY wlform( frmt^err, "Request \\\\ DENIED, Format Error on DE \\\\\\, "',' "BNET REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) #DELETE 21266 /21267 SEM^REQUEST^DENY #ENDSCN = SW0Q110 !#CMP2.28 05/11/22 BNETDDLS6082 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6082 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6082 * ******************************************************************************** #SCN = SW0Q121 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0026260X * 11MAY2022 ChristL * Symptom: BNET interface does not support DE48 SE41 subfield 11. * Problem: The interface fails to add the tag data during SEM * collapse and expansion resulting in error message * "Invalid length on field DE-48". * Fix: Added fields for SE41 subfield 11( 24 bytes ) to the * existing SEM structure of DE 48. * Dependency: Apply fix to: * SW60BNET: BNETDDLS, BNETLIBS * Run Make. * Reference: Case #3421193 #REPLACE 01157500/01157500 OFFSET 0 SEM 08 citizen-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(20). #ADD 01157606 SEM 04 user-fld pic x(38). #DELETE 01157607 SEM #ENDSCN = SW0Q121 !#CMP2.28 05/11/22 BNETLIBS6326 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6326 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6326 * ******************************************************************************** #SCN = SW0Q122 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6326 #NEWVERSION = 6327 #ADD 11002Z0D ! 11MAY2022 ChristL ! Symptom: BNET interface does not support DE48 SE41 subfield 11. ! Problem: The interface fails to add the tag data during SEM ! collapse and expansion resulting in error message ! "Invalid length on field DE-48". ! Fix: Modified the interface to support DE48 SE41 subfield 11. ! Proc Modified: util^collapse^sem ! util^expand^sem ! Dependency: Apply fix to: ! SW60BNET: BNETDDLS, BNETLIBS. ! Run Make. ! Reference: Case #3421193 #ADD 43424H0h TRACE^SEM ! ! ! Move Subfield 11 - Citizen ID ! ! ! if hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. citizen^id.tag = "11" then begin call ascii^integer( hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. citizen^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. e^comm^cert^qual^sub^fld^41. citizen^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 11 ! #ADD 46722H0S TRACE^SEM else ! ! ! Move Subfield 11 - Citizen ID ! ! ! if sub^ptr = "11" then begin call sub^move^subfield( sem^ptr. addl^data.info. e^comm^cert^qual^sub^fld^41. citizen^id.tag ); end ! subfield 11 ! #ENDSCN = SW0Q122 !#CMP2.28 05/26/22 BNETLIBS6327 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6327 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6327 * ******************************************************************************** #SCN = SW0Q146 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6327 #NEWVERSION = 6328 #ADD 11002a0D ! 26MAY2022 wielerk ! Symptom: BNET interface is not mapping DE-39 to PSTM response ! code correctly when DE-39 = "65". ! Problem: The interface is not correctly identifying the alternate ! definition of "65" from Mastercard. ! The Identity Check soft decline of EMV 3DS ! authentication. ! Fix: Modified the interface to limit the alternate mapping ! to PSD2 acquirers and to identify transactions that ! have not had SCA applied. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3427242. #ADD 28451 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = "65" and bnet^g.sppt^sca^g then begin if sem.pos^entry^mde <> chip^read and ( sem.addl^data.info.authn^data^sub^fld^66.pgm^proto. tag^data <> "2" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "0" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "4" ) and sem.addl^data.info.crd^vrfy^mthd^sub^fld^20. tag^data <> "P" then #DELETE 28452 /28462 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 28478 /28491 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0Q146 !#CMP2.28 06/09/22 BNETLIBS6328 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6328 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6328 * ******************************************************************************** #SCN = SW0Q148 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6328 #NEWVERSION = 6329 #ADD 11002b0G ! 09JUN2022 wielerk ! Symptom: BNET interface is not setting PMNT-INFO in the POS ! Data1 token correctly. ! Problem: When DE-48.SE-22.SF05 contains "Mnnn", the code was ! editing POS Data1 token PMNT-INFO for a space to set ! it to a "2". This prevented the "2" setting. ! Fix: Modified the interface to edit PMNT-INFO to not be set ! to "1" to set it to "2". ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3433544. #REPLACE 34960Y0U SEM^FRMT^XRQST^TO^PSTM^0200 pos^data1^tkn.pmnt^info <> "1" then #ENDSCN = SW0Q148 !#CMP2.28 07/04/22 BNETLIBS6329 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6329 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6329 * ******************************************************************************** #SCN = SW0Q172 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6329 #NEWVERSION = 6330 #ADD 11002c0E ! 04JUL2022 ChristL ! Symptom: Interchange declines with RC30 on incorrectly ! formatted DE48.SE22.SF05 during authorization requests ! Problem: Interface sends invalid data to Interchange in DE48.SE22 ! SF05 when PMNT-IND field in POS Data1 Token(CH) is ! filled as space. ! Fix: Modified the interface not to send DE48.SE22.SF05 when ! PMNT-IND field in POS Data1 Token(CH) is space filled. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3433865 and #3438680. #ADD 21229Y0E PSTM^FRMT^SEM^ADDL^DATA if ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) and ( pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" or pos^data1^tkn.pmnt^ind = "U" ) then #DELETE 21229Y0F/21229Y0G PSTM^FRMT^SEM^ADDL^DATA #ADD 21229Y1d PSTM^FRMT^SEM^ADDL^DATA if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then #DELETE 21229Y1e/21229Y1f PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0Q172 !#CMP2.28 07/12/22 BNETLIBS6330 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6330 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6330 * ******************************************************************************** #SCN = SW0Q173 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6330 #NEWVERSION = 6331 #ADD 11002d0E ! 12JUL2022 ChristL ! Symptom: Incorrect value set in DE48.SE42.SF01 for tokenised ! transactions. ! Problem: Interface sets DE48.SE42.SF01 to "24" instead of "21", ! when 3DS DSRP/AAV is present in the Internal message. ! Fix: Modified the Interface to check for the presence of ! 3DS AAV indicators and then set DE48.SE42.SF01 to "24". ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3435502. #ADD 20969 PSTM^FRMT^SEM^ADDL^DATA sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" and #ADD 21528 PSTM^FRMT^SEM^ADDL^DATA if sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" and sem.addl^data.info.ecom^sec^sub^fld^42. #DELETE 21529 PSTM^FRMT^SEM^ADDL^DATA #ENDSCN = SW0Q173 !#CMP2.28 07/26/22 BNETG 60131FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60131 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60131 * ******************************************************************************** #SCN = SW0Q181 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t000260U ! 22JUL2022 jayaprm ! Symptom: DE 61 SF 11 have incorrect value for ATM contactless ! transaction. ! Problem: For ATM contactless transaction, DE 61 SF 11 is not ! populated with the value "3". ! Fix: Sourced In ATM-DATA1-TKN from basrc_baddltal. ! Dependency: Apply fix to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETG ! SW60IBNT: BNETEMVS ! Run Make. ! Reference: Case #3445434. #ADD h000260V ?nolist, source =basrc_baddltal( ? atm^data1^tkn ? emv^3ds^data^tkn ? ) ?list ! atm^data1^tkn ! emv^3ds^data^tkn ! ) #DELETE k000260Q/k000260Y #ENDSCN = SW0Q181 !#CMP2.28 08/03/22 BNETLIBS6331 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6331 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6331 * ******************************************************************************** #SCN = SW0Q184 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6331 #NEWVERSION = 6332 #ADD 11002e0D ! 03AUG2022 wielerk ! Symptom: Incorrect values sent in DE-48.SE-22.SF-05 when ! ( addl data.mrch inds sub 22.cit mit inds ) when ! POS.Data1.pmnt-info = " ". ! Problem: Interface was allowing the space in the token as there ! are conditions where this is valid, but several ! instances required addiitonal edits to prevent invalid ! data being sent to Mastercard. ! Fix: Modified code that assigns values to DE-48.SE-22.SF-05. ! Proc Modified: pstm^frmt^sem^addl^data ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3442774. #DELETE 21229d01/21229d02 PSTM^FRMT^SEM^ADDL^DATA #REPLACE 21229d03 PSTM^FRMT^SEM^ADDL^DATA if ( pos^data1^tkn.pmnt^ind = "C" or #ADD 21229Y0H PSTM^FRMT^SEM^ADDL^DATA if ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) then begin ! ! Transaction establishing a COF agreement ! between merchant and cardholder. ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ], "C1" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then begin ! ! Standing instruction merchant-initiated ! transaction. ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ], "M1" ); end end else if pos^data1^tkn.pmnt^info <> "0" and pos^data1^tkn.pmnt^info <> "3" and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Industry practice merchant-initiated transaction ! (except incremental auth) ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ], "M2" ); end; if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 0 ] = " " or sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data.byte[ 2 ] <> " " then begin ! ! The rest of DE 48, SE 22, SF 05 does not need to ! be set ! end else #DELETE 21229Y0I/21229Y11 PSTM^FRMT^SEM^ADDL^DATA #DELETE 21229d0C/21229d0D PSTM^FRMT^SEM^ADDL^DATA #REPLACE 21229d0E PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn.pmnt^ind <> " " and #REPLACE 21229Y1j PSTM^FRMT^SEM^ADDL^DATA ! (except incremental auth) ! #REPLACE 21229Y2L/21229Y2L OFFSET 0 PSTM^FRMT^SEM^ADDL^DATA end else begin ! ! Do not send DE 48, SE 22, SF 05 ! mov^( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data, blanks ); end; #ENDSCN = SW0Q184 !#CMP2.28 08/23/22 BNETDDLS6083 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6083 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6083 * ******************************************************************************** #SCN = SW0Q202 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0026270C * 23AUG2022 MohanD * Symptom: Banknet Release 22.Q4 Functional Enhancements * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 6035 - Tax Information for Domestic B2B Commercial * Transactions * For DE 112, added a new redefinition to support * domestic Additional Commercial Issuer Data (SE 045). * AN 6037 - Introduction of Digital Service Provider ID * Added a field for DE 104, SE 004, subfield 001. * AN 6038 - Mastercard Send Funding and Payment * Transaction Enhancements * Updated the switch token to support a new field to * hold the Transaction Category Code by replacing * USER-FLD-ACI. * AN 6047 - Expanded Use of Mastercard In Control * Virtual Card Numbers * Added a structure for DE 48, SE 09 (40 bytes), * using the 2-byte user field from the structure for * DE 48, SE 26, and the 38-byte user field at the end * of the structure for DE 48, thereby ensuring that the * length of the DE 48 structure is not increased. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BATKNCVS, BATKNID, BAUTILS * OK60LIB : OKLIBTS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0822M, ILB0822R, ILB0822S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILB0822M. Run the ILF conversion using ILB0822R. * Reference: WO #003804 #DELETE 01157t0B SEM #ADD 01157706 SEM * * Virtual Card Number (VCN) Data * Subfield tag = 09 * Contains information about VCN data in MDES token transactions. * 06 vcn-data-sub-fld-09. 08 tag pic 99. 08 lgth pic 99. 08 vcn-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 vcn-pan. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). 08 vcn-exp-date. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). #DELETE 01157707 SEM #ADD 01411~09 SEM 04 adnl-dgtl-data. 06 tag pic 9(3). 06 lgth pic 9(3). 06 dgtl-srvc-prvd-id. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(5). #ADD 01411:0F SEM 04 dmstc-data redefines info. 06 sub-fld-45. 08 tag pic x(3). 08 lgth pic x(3). 08 taxpayer-cntry-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(3). 08 taxpayer-id-num. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(30). 08 tax-rgstr-rsn-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(30). 06 user-fld-aci pic x(698). #ADD 0276050B SAF-BNET 02 tran-cat-cde pic x. #DELETE 0276020F SAF-BNET #ENDSCN = SW0Q202 !#CMP2.28 08/23/22 BNETG 60132FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60132 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60132 * ******************************************************************************** #SCN = SW0Q203 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u000260D ! 23AUG2022 MohanD ! Symptom: Banknet Release 22.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 6038 - Mastercard Send Funding and Payment ! Transaction Enhancements ! Added Logic to "source in" genrc^ichg^data^tkn and ! genrc^ichg^resp^data2^tkn from BADDLTAL. ! AN 6042 - Mastercard Authorization Optimizer ! Enhancements ! Added Logic to "source in" pos^data3^tkn from ! BADDLTAL. ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0822M, ILB0822R, ILB0822S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0822M. Run the ILF conversion using ILB0822R. ! Reference: WO #003804 #ADD u000260R ?nolist, source =basrc_baddltal( ? genrc^ichg^data^tkn ? genrc^ichg^resp^data2^tkn ? pos^data3^tkn ? ) ?list ! genrc^ichg^data^tkn ! genrc^ichg^resp^data2^tkn ! pos^data3^tkn ! ) #ENDSCN = SW0Q203 !#CMP2.28 08/23/22 BNETLIBS6332 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6332 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6332 * ******************************************************************************** #SCN = SW0Q204 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6332 #NEWVERSION = 6333 #ADD 11002f0F ! 23AUG2022 MohanD ! Symptom: Banknet Release 22.Q4 Functional Enhancements ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 6035 - Tax Information for Domestic B2B Commercial ! Transactions ! AN 6037 - Introduction of Digital Service Provider ID ! AN 6038 - Mastercard Send Funding and Payment ! Transaction Enhancements ! AN 6039 - MDES Remote Commerce Enhancements ! AN 6042 - Mastercard Authorization Optimizer ! Enhancements ! AN 6047 - Expanded Use of Mastercard In Control ! Virtual Card Numbers ! AN 5524/AN 5822 - Cardholder-Initiated Transaction and ! Merchant-Initiated Transaction Support ! AN 6201 - Revised Standards for Card Acceptor ! Business Codes ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^resp^data^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^resp^data^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0822M, ILB0822R, ILB0822S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0822M. Run the ILF conversion using ILB0822R. ! Reference: WO #003804 #DELETE 13125 /13130 SUB^LOG^ERROR #ADD 13131 SUB^LOG^ERROR if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and #DELETE 13132 /13134 SUB^LOG^ERROR #ADD 13139 SUB^LOG^ERROR ! Ensure DE 61.4 is set to 4 for subsequent COF MITs ! #DELETE 13140 /13143 SUB^LOG^ERROR #ADD 13147 SUB^LOG^ERROR if ( pos^data1^tkn.pmnt^info = "0" or #DELETE 13148 /13149 SUB^LOG^ERROR #ADD 13156 SUB^LOG^ERROR ! Ensure DE 61.4 is set to 4 for transactions setting ! ! up a COF agreement for subsequent MITs. ! #DELETE 13157 /13158 SUB^LOG^ERROR #ADD 13169 SUB^LOG^ERROR ( ps51^get^tkn.moto^flg = "2" or ! recurring payment ! ps51^get^tkn.moto^flg = "3" ) ) then ! installment ! #DELETE 13170 SUB^LOG^ERROR #DELETE 13209 /13263 SUB^LOG^ERROR #ADD 15726 PSTM^FRMT^0210^TO^XRESP if base24^rel^g >= 5 and not adnl^data^ntl^bit^d then begin ! ! ! Check for additional national data in domestic transaction ! ! ! if pstm^frmt^resp^data^to^sem( sem, pstm ) then begin adnl^data^ntl^bit^d := 1; end; end; #ADD 18967 PSTM^FRMT^RESP^DATA^TO^SEM if genrc^ichg^resp^data^tkn.frmt^cde = "04" and ( genrc^ichg^resp^data^tkn.bnet^natl^resp^data.cntry^cde = sem.ntl^pos^data.cntry^cde for $len ( sem.ntl^pos^data.cntry^cde )) then begin if genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^cntry^cde <> [ $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. taxpayer^cntry^cde ) * [ " " ] ] then begin movd( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^cntry^cde.tag, "01" ); tag^data^lgth := $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. taxpayer^cntry^cde ); movl( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^cntry^cde.tag^data, genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^cntry^cde, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^cntry^cde.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of taxpayer^cntry^cde tag "01" if genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^id^num <> [ $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. taxpayer^id^num ) * [ " " ] ] then begin movd( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^id^num.tag, "02" ); idx := $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. taxpayer^id^num ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^id^num.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^id^num.tag^data, genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^id^num, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^id^num.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of taxpayer^id^num tag "02" if genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.tax^rgstr^rsn^cde <> [ $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. tax^rgstr^rsn^cde ) * [ " " ] ] then begin movd( sem.adnl^data^natl.dmstc^data.sub^fld^45. tax^rgstr^rsn^cde.tag, "03" ); idx := $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data. tax^rgstr^rsn^cde ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.tax^rgstr^rsn^cde.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.dmstc^data.sub^fld^45. tax^rgstr^rsn^cde.tag^data, genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.tax^rgstr^rsn^cde, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.dmstc^data.sub^fld^45. tax^rgstr^rsn^cde.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 4; end; ! of tax^rgstr^rsn^cde tag "03" if lgth > 0 then begin ! ! ! Tag data was formatted so set the tag and length ! ! fields for DE 112 tag 45 ! ! ! found^resp^data := true; movd( sem.adnl^data^natl.dmstc^data.sub^fld^45.tag, "045" ); call integer^ascii^( sem.adnl^data^natl.dmstc^data.sub^fld^45.lgth, lgth ); ! ! ! Increment the length to account for the 045 tag and ! ! subfield length to set the overall field length. ! ! ! lgth := lgth + 3 + 3; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; ! of if genrc^ichg^resp^data^tkn.frmt^cde = "04" #ADD 19060 PSTM^FRMT^SEM^ADDL^DATA "4899" , "5661" , "R" , "5681" , "5735" , "R" , #DELETE 19061 PSTM^FRMT^SEM^ADDL^DATA #ADD 21229Y03 PSTM^FRMT^SEM^ADDL^DATA if pos^data1^tkn.pmnt^info = "0" and pos^data1^tkn.pmnt^ind = " " then begin ! ! ! Transaction establishing a COF agreement between ! ! merchant and cardholder for future CITs ! ! ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag^data, "C101" ); end else #REPLACE 26902 /26902 OFFSET 0 SEM^FRMT^RESP^DATA^TO^PSTM end else begin movd( genrc^ichg^resp^data^tkn.frmt^cde, "04" ); tkn^lgth := $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cntry^cde ) + $len( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cmrcl^data ); call integer^ascii^( genrc^ichg^resp^data^tkn.lgth, tkn^lgth ); move( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.cntry^cde, sem.ntl^pos^data.cntry^cde ); move( genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^cntry^cde, sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^cntry^cde.tag^data ); move( genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.taxpayer^id^num, sem.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^id^num.tag^data ); move( genrc^ichg^resp^data^tkn.bnet^natl^resp^data. cmrcl^data.tax^rgstr^rsn^cde, sem.adnl^data^natl.dmstc^data.sub^fld^45. tax^rgstr^rsn^cde.tag^data ); tkn^add^lgth := $offset( genrc^ichg^resp^data^tkn. bnet^natl^resp^data.user^fld^aci ); end; #ADD 27611 SEM^FRMT^XRESP^TO^PSTM^0210 struct .genrc^ichg^resp^data2^tkn(genrc^ichg^resp^data2^tkn^def); #ADD 27615 SEM^FRMT^XRESP^TO^PSTM^0210 struct .pos^data3^tkn( pos^data3^tkn^def ); #REPLACE 27636 /27636 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 pos^data3^tkn^found := false, .pos^data3^get^tkn( pos^data3^tkn^def ), pos^data3^get^lgth, #ADD 27694 SEM^FRMT^XRESP^TO^PSTM^0210 int genrc^ichg^resp^data2^tkn^lgth := 0; #ADD 28511 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' pos^data3^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^get^tkn, pos^data3^get^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, pos^data3^tkn ); end else begin @pos^data3^tkn := @pos^data3^get^tkn; end; if sem.resp^cde = "51" and sem.addl^data.info.mrch^advc^cde^sub^fld^84.tag = "84" then begin ! ! ! Map the Merchant Advice Code to the POS-Data3 token. ! ! ! if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "24" then begin movd( pos^data3^tkn.retry^prd, "1" ); movd( pos^data3^tkn.retry^tim, "01" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "25" then begin movd( pos^data3^tkn.retry^prd, "1" ); movd( pos^data3^tkn.retry^tim, "24" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "26" then begin movd( pos^data3^tkn.retry^prd, "2" ); movd( pos^data3^tkn.retry^tim, "02" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "27" then begin movd( pos^data3^tkn.retry^prd, "2" ); movd( pos^data3^tkn.retry^tim, "04" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "28" then begin movd( pos^data3^tkn.retry^prd, "2" ); movd( pos^data3^tkn.retry^tim, "06" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "29" then begin movd( pos^data3^tkn.retry^prd, "2" ); movd( pos^data3^tkn.retry^tim, "08" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "30" then begin movd( pos^data3^tkn.retry^prd, "2" ); movd( pos^data3^tkn.retry^tim, "10" ); end; end; if ( pos^data3^tkn.retry^prd <> " " and pos^data3^tkn.retry^tim <> " " ) then begin movd( tkn^id, pos^data3^tkn^id^d ); tkn^add^lgth := $len( pos^data3^tkn ); pos^data3^tkn^found := false; ! ! ! The token must end on a word boundary ! ! ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! ! Token already exists, so update the token ! ! ! if tkn^result = tkn^exist^l then begin pos^data3^tkn^found := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4138, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else ! ! ! If any other token add/update error encountered log ! ! a message and abend. ! ! ! if not pos^data3^tkn^found then begin call log^message^( 4139, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4139 ); end else begin call log^message^( 4140, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4140 ); end; end; end; #ADD 30570 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 and adnl^data^ntl^bit^d and sem.adnl^data^natl.dmstc^data.sub^fld^45.tag = "045" then begin ! ! ! Domestic additional commercial issuer data ! ! ! call sem^frmt^resp^data^to^pstm( pstm, sem ); end ! of adnl^data^ntl^bit^d and tag = "045") ! else #ADD 30599 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 and mbr^def^bit^d then begin if not ( sem.proc^cde = sem^hlthcr^d ) then begin ! ! Add the Generic Interchange Response Data2 Token ! tkn^id ':=' genrc^ichg^resp^data2^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, genrc^ichg^resp^data2^tkn ); movd( genrc^ichg^resp^data2^tkn.frmt^cde, "01" ); move( genrc^ichg^resp^data2^tkn.lgth, sem.mbr^def.lgth ); call ascii^integer^( sem.mbr^def.lgth, lgth ); movl( genrc^ichg^resp^data2^tkn.info, sem.mbr^def.info, lgth ); tkn^lgth := 0; genrc^ichg^resp^data2^tkn^lgth := lgth + $len( genrc^ichg^resp^data2^tkn.frmt^cde ) + $len( genrc^ichg^resp^data2^tkn.lgth ); ! ! Length must even to add a token. ! if genrc^ichg^resp^data2^tkn^lgth.<15> then begin increment^d( genrc^ichg^resp^data2^tkn^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^resp^data2^tkn, genrc^ichg^resp^data2^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! dspy !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result and tkn^result <> tkn^exist^l then begin if tkn^result = over^max^limit^l then begin call log^message^( 4141,! routing code !, @no^room, net.myname, evt_msg_severity_err_l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 4142, ! routing code !, @erradd^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4142 ); end; end; ! of tkn^result end; ! of sem.mbr^def.hlth.srvc[ idx ].tag end; ! of sem.proc^cde = sem^hlthcr^d #ADD 30984 SEM^FRMT^XRQST^TO^PSTM^0200 struct .genrc^ichg^data^tkn ( genrc^ichg^data^tkn^def ); #ADD 31065 SEM^FRMT^XRQST^TO^PSTM^0200 int genrc^ichg^data^tkn^lgth:= 0; #ADD 32377 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of network token service processing #DELETE 32378 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32379 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.addl^data.info. paypass^mapping^sub^fld^33.tag = "33" and ( sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data <> "C" and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data <> "F" and sem.addl^data.info.paypass^mapping^sub^fld^33. acct^num^ind.tag^data <> "H" ) ) or ( sem.addl^data.info.vcn^data^sub^fld^09.tag = "09" ) then #DELETE 32380 /32383 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32385 SEM^FRMT^XRQST^TO^PSTM^0200 !Subelement 09 - VCN Information, or ! #ADD 32413 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. vcn^data^sub^fld^09.tag = "09" then begin move( pan^mapping^get^tkn.acct^num^ind, sem.addl^data.info.vcn^data^sub^fld^09. vcn^ind.tag^data ); move( pan^mapping^get^tkn.acct^num, sem.addl^data.info.vcn^data^sub^fld^09. vcn^pan.tag^data ); move( pan^mapping^get^tkn.exp^dat, sem.addl^data.info.vcn^data^sub^fld^09. vcn^exp^date.tag^data ); mov^( pan^mapping^get^tkn.prod^cde, blanks ); end; #ADD 32441 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. vcn^data^sub^fld^09.tag = "09" then begin move( pan^mapping^tkn.acct^num^ind, sem.addl^data.info.vcn^data^sub^fld^09. vcn^ind.tag^data ); move( pan^mapping^tkn.acct^num, sem.addl^data.info.vcn^data^sub^fld^09. vcn^pan.tag^data ); move( pan^mapping^tkn.exp^dat, sem.addl^data.info.vcn^data^sub^fld^09. vcn^exp^date.tag^data ); mov^( pan^mapping^tkn.prod^cde, blanks ); end; #ADD 32496 SEM^FRMT^XRQST^TO^PSTM^0200 sem.dgtl^pmnt^data.adnl^dgtl^data.dgtl^srvc^prvd^id. tag = "001" or #ADD 32626 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.dgtl^pmnt^data.adnl^dgtl^data.dgtl^srvc^prvd^id. tag = "001" then begin ! ! ! Digital Service Provider ID ! ! ! movd( iss^tknztn^data^tkn.info.byte[ idx ], "D1" ); idx := idx + 2; movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id.lgth.byte[ 1 ], 2 ); idx := idx + 2; call ascii^integer^( sem.dgtl^pmnt^data. adnl^dgtl^data. dgtl^srvc^prvd^id.lgth, lgth ); movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id.tag^data, lgth ); idx := idx + lgth; end; ! of if dgtl^srvc^prvd^id.tag = "001"! #ADD 34290 SEM^FRMT^XRQST^TO^PSTM^0200 movd( ps51^tkn^data.cavv^aav^rslt^cde, "V" ); #ADD 34338 SEM^FRMT^XRQST^TO^PSTM^0200 movd( ps51^tkn^data.cavv^aav^rslt^cde, "V" ); #DELETE 34681 /34722 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 34960Y0c SEM^FRMT^XRQST^TO^PSTM^0200 ! ! ! New COF agreement for unscheduled MITs ! ! ! #ADD 34960Y0i SEM^FRMT^XRQST^TO^PSTM^0200 ! ! ! New COF agreement for future CITS. ! ! ! movd( pos^data1^tkn.pmnt^ind, " " ); end else begin ! ! ! Cardholder-initiated COF transaction ! ! ! movd( pos^data1^tkn.pmnt^ind, " " ); #DELETE 34960Y0j SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35484 SEM^FRMT^XRQST^TO^PSTM^0200 tag^data[ idx ].svc = "54" or sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "61" then #DELETE 35485 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35509 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].svc = "61" then begin movl( dgtl^pmnt^authn^tkn.mc.obs61^rslt^cde^1, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1, $len( dgtl^pmnt^authn^tkn.mc. obs61^rslt^cde^1 ) ); movl( dgtl^pmnt^authn^tkn.mc.obs61^rslt^cde^2, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^2, $len( dgtl^pmnt^authn^tkn.mc. obs61^rslt^cde^2 ) ); lgth := $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^1 ) + $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^2 ) + $len( dgtl^pmnt^authn^tkn.mc. est^amt ) + $len( dgtl^pmnt^authn^tkn.mc. obs61^rslt^cde^1 ) + $len( dgtl^pmnt^authn^tkn.mc. obs61^rslt^cde^2 ); end else begin movl( dgtl^pmnt^authn^tkn.mc.rslt^cde^1, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1, $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^1 ) ); movl( dgtl^pmnt^authn^tkn.mc.rslt^cde^2, sem.addl^data.info. on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^2, $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^2 ) ); if lgth = 0 then begin lgth := $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^1 ) + $len( dgtl^pmnt^authn^tkn.mc. rslt^cde^2 ); end; end; #DELETE 35510 /35513 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35518 /35531 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35547 SEM^FRMT^XRQST^TO^PSTM^0200 if lgth < $len( dgtl^pmnt^authn^tkn.mc. est^amt ) then begin lgth := lgth + $len( dgtl^pmnt^authn^tkn. mc.est^amt ); end; #DELETE 35548 /35549 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36347 SEM^FRMT^XRQST^TO^PSTM^0200 if mbr^def^bit^d and not (( sem.proc^cde = sem^hlthcr^d ) or ( sem.ntl^pos^data.cntry^cde = pct.dflt.cntry^cde for $len( pct.dflt.cntry^cde ) and sem.ntl^pos^data.cntry^cde = "032" and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" )) then begin ! ! Add the Generic Interchange Data Token ! tkn^id ':=' genrc^ichg^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, genrc^ichg^data^tkn ); movd( genrc^ichg^data^tkn.frmt^cde, "04" ); mov^( genrc^ichg^data^tkn.lgth, sem.mbr^def.lgth ); call ascii^integer^( sem.mbr^def.lgth, lgth ); movl( genrc^ichg^data^tkn.info, sem.mbr^def.info, lgth ); tkn^lgth := 0; genrc^ichg^data^tkn^lgth := lgth + $len( genrc^ichg^data^tkn.frmt^cde ) + $len( genrc^ichg^data^tkn.lgth ); ! ! Length must even to add a token. ! if genrc^ichg^data^tkn^lgth.<15> then begin increment^d( genrc^ichg^data^tkn^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^data^tkn, genrc^ichg^data^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! dspy !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result and tkn^result <> tkn^exist^l then begin if tkn^result = over^max^limit^l then begin call log^message^( 4143,! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 4144, ! routing code !, @erradd^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4144 ); end; end; ! of tkn^result end; ! of mbr^def^bit^d #ADD 36756 SEM^FRMT^XRVSL^TO^PSTM^0420 int lgth := 0; #ADD 36793 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .genrc^ichg^data^tkn( genrc^ichg^data^tkn^def ); int genrc^ichg^data^tkn^lgth := 0; #ADD 37479 SEM^FRMT^XRVSL^TO^PSTM^0420 if mbr^def^bit^d then begin ! ! Add the Generic Interchange Data Token ! tkn^id ':=' genrc^ichg^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, genrc^ichg^data^tkn ); mov^( genrc^ichg^data^tkn.lgth, rvsl.mbr^def.lgth ); call ascii^integer^( rvsl.mbr^def.lgth, lgth ); movl( genrc^ichg^data^tkn.info, rvsl.mbr^def.info, lgth ); movd( genrc^ichg^data^tkn.frmt^cde, "04" ); genrc^ichg^data^tkn^lgth := lgth + $len( genrc^ichg^data^tkn.frmt^cde ) + $len( genrc^ichg^data^tkn.lgth ); ! ! Length must even to add a token. ! if genrc^ichg^data^tkn^lgth.<15> then begin increment^d( genrc^ichg^data^tkn^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^data^tkn, genrc^ichg^data^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! dspy !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result and tkn^result <> tkn^exist^l then begin if tkn^result = over^max^limit^l then begin call log^message^( 4145,! routing code !, @no^room, net.myname, evt_msg_severity_err_l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else begin call log^message^( 4146, ! routing code !, @err^add^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 4146 ); end; end; ! of tkn^result end; ! of mbr^def^bit^d #ADD 41548 TRACE^SEM ! ! Virtual Card Number Data ! if hdr.addl^data.info. vcn^data^sub^fld^09.tag = "09" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. vcn^data^sub^fld^09.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - VCN Indicator ! if hdr.addl^data.info. vcn^data^sub^fld^09. vcn^ind.tag = "01" then begin call ascii^integer( hdr.addl^data.info. vcn^data^sub^fld^09. vcn^ind.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. vcn^data^sub^fld^09. vcn^ind.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! Move Subfield 2 - Virtual Card Number ! if hdr.addl^data.info. vcn^data^sub^fld^09. vcn^pan.tag = "02" then begin call ascii^integer( hdr.addl^data.info. vcn^data^sub^fld^09. vcn^pan.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. vcn^data^sub^fld^09. vcn^pan.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! Move Subfield 3 - VCN Expiration Date ! if hdr.addl^data.info. vcn^data^sub^fld^09. vcn^exp^date.tag = "03" then begin call ascii^integer( hdr.addl^data.info. vcn^data^sub^fld^09. vcn^exp^date.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. vcn^data^sub^fld^09. vcn^exp^date.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! end; ! of if hdr...tag = "09" #ADD 43945 TRACE^SEM if hdr.dgtl^pmnt^data.adnl^dgtl^data. tag = "004" then begin movl( ptr, hdr.dgtl^pmnt^data.adnl^dgtl^data.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! ! Move Subfield 001 - ! ! Digital Service Provider ID ! ! ! if hdr.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id.tag = "001" then begin call ascii^integer( hdr.dgtl^pmnt^data. adnl^dgtl^data.dgtl^srvc^prvd^id. lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 001 ! end; ! of tag = "004" ! #ADD 44630I35 TRACE^SEM else if hdr.adnl^data^natl.dmstc^data. sub^fld^45.tag = "045" then begin call ascii^integer( hdr.adnl^data^natl. dmstc^data. sub^fld^45.lgth, 3, t^length ); ! ! Move the tag 045 and tag length field ! movl( ptr, hdr.adnl^data^natl.dmstc^data. sub^fld^45.tag, 6 ); @ptr := @ptr + 6; sub^lgth := 6; ! ! Process tag 045 subtag 01 if present ! if hdr.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^cntry^cde.tag = "01" then begin call ascii^integer( hdr.adnl^data^natl.dmstc^data. sub^fld^45. taxpayer^cntry^cde.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.dmstc^data. sub^fld^45. taxpayer^cntry^cde.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "01" ! ! Process tag 045 subtag 02 if present ! if hdr.adnl^data^natl.dmstc^data.sub^fld^45. taxpayer^id^num.tag = "02" then begin call ascii^integer( hdr.adnl^data^natl.dmstc^data. sub^fld^45. taxpayer^id^num.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.dmstc^data. sub^fld^45. taxpayer^id^num.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "02" ! ! Process tag 045 subtag 03 if present ! if hdr.adnl^data^natl.dmstc^data.sub^fld^45. tax^rgstr^rsn^cde.tag = "03" then begin call ascii^integer( hdr.adnl^data^natl.dmstc^data. sub^fld^45. tax^rgstr^rsn^cde.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.dmstc^data. sub^fld^45. tax^rgstr^rsn^cde.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "03" call translate( ptr[ - sub^lgth ], sub^lgth, ascii^to^ebcdic^l ); if t^length <> ( sub^lgth - 6 ) then begin return( index + 1 ); end; end ! of tag = "045" ! #ADD 46325 TRACE^SEM ! ! Virtual Card Number Data ! if ptr[ length ] = "09" then begin ! ! Move the tag and the tag length ! movl( sem^ptr.addl^data.info. vcn^data^sub^fld^09.tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! Move Subfield1 - VCN Indicator ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. vcn^data^sub^fld^09. vcn^ind.tag ); end ! subfield 01 ! else ! ! Move Subfield2 - Virtual Card Number ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. vcn^data^sub^fld^09. vcn^pan.tag ); end ! subfield 02 ! else ! ! Move Subfield3 - VCN Expiration Date ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. vcn^data^sub^fld^09. vcn^exp^date.tag ); end ! subfield 03 ! else ! ! bad data, clear sem de-48.se-09, ! end loop ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. vcn^data^sub^fld^09. tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. vcn^data^sub^fld^09, " ", $len( sem^ptr.addl^data.info. vcn^data^sub^fld^09 ) ); loop^lgth := tag^length; end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "09" else #ADD 48004 TRACE^SEM else if ptr[ length ] = "004" then begin movl( sem^ptr.dgtl^pmnt^data. adnl^dgtl^data.tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.dgtl^pmnt^data. adnl^dgtl^data. dgtl^srvc^prvd^id. tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + processed^tag^lgth; end; ! of while ! end #ADD 48534I1b TRACE^SEM if ptr[ length ] = "045" then begin ! ! Move in the tag and length fields ! movl( sem^ptr.adnl^data^natl.dmstc^data. sub^fld^45.tag, ptr[ length ], 6 ); length := length + 6; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 2], 2, sub^lgth ); if ptr[ length ] = "01" then begin movl( sem^ptr.adnl^data^natl. dmstc^data.sub^fld^45. taxpayer^cntry^cde. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "02" then begin movl( sem^ptr.adnl^data^natl. dmstc^data.sub^fld^45. taxpayer^id^num.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "03" then begin movl( sem^ptr.adnl^data^natl. dmstc^data.sub^fld^45. tax^rgstr^rsn^cde. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else begin ! ! Unrecognized tag ! length := length + sub^lgth + 4; end; end; ! of while end else #ADD 58091 UTIL^SWI^TKN^INIT move( bnet^tkn^buf.tran^cat^cde, sem.addl^data.info.tran^cat^cde ); #ADD 58958L0B UTIL^SWI^TKN^UPDT if ( bnet^tkn^buf.tran^cat^cde <> blanks for $len( bnet^tkn^buf.tran^cat^cde) ) then begin move( bnet^tkn.tran^cat^cde, bnet^tkn^buf.tran^cat^cde); end; #ENDSCN = SW0Q204 !#CMP2.28 09/06/22 BNETLIBS6333 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6333 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6333 * ******************************************************************************** #SCN = SW0Q238 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6333 #NEWVERSION = 6334 #ADD 11002g0i ! 06SEP2022 wielerk ! Symptom: Interface does not populate wallet id in the B1 token ! when received in a response. ! Problem: Interface was not logging DE-48 data that was returned ! in a response. ! Fix: Modified code to pass DE-48 data returned in a response ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! util^frmt^addl^data^to^xrvsl ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3449657. #DELETE 27922K00/27922K1E SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 27924 /27924 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 begin ! ! move DE 48 data from the request to the sem structure, ! if not present in the response. ! if sem.addl^data.info.srvc^params^sub^fld^18.tag = " " then begin move( sem.addl^data.info.srvc^params^sub^fld^18, rqst.addl^data.info.srvc^params^sub^fld^18 ); end; if sem.addl^data.info.accpt^data^sub^fld^21.tag = " " then begin move( sem.addl^data.info.accpt^data^sub^fld^21, rqst.addl^data.info.accpt^data^sub^fld^21 ); end; if sem.addl^data.info.pmnt^init^chan^sub^fld^23. tag = " " then begin move( sem.addl^data.info.pmnt^init^chan^sub^fld^23, rqst.addl^data.info.pmnt^init^chan^sub^fld^23 ); end; if sem.addl^data.info.wallet^pgm^sub^fld^26.tag = " " then begin move( sem.addl^data.info.wallet^pgm^sub^fld^26, rqst.addl^data.info.wallet^pgm^sub^fld^26 ); end; if sem.addl^data.info.mc^asgn^id^sub^fld^32.tag = " " then begin move( sem.addl^data.info.mc^asgn^id^sub^fld^32, rqst.addl^data.info.mc^asgn^id^sub^fld^32 ); end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37.tag = " " then begin move( sem.addl^data.info.adnl^mrch^data^sub^fld^37, rqst.addl^data.info.adnl^mrch^data^sub^fld^37 ); end; if sem.addl^data.info.mc^gtwy^txn^ind^sub^fld^47.tag = " " then begin move( sem.addl^data.info.mc^gtwy^txn^ind^sub^fld^47, rqst.addl^data.info.mc^gtwy^txn^ind^sub^fld^47 ); end; if sem.addl^data.info.mobile^pgm^inds^sub^fld^48.tag = " " then begin move( sem.addl^data.info.mobile^pgm^inds^sub^fld^48, rqst.addl^data.info.mobile^pgm^inds^sub^fld^48 ); end; if sem.addl^data.info.e^id^rqst^cde^sub^fld^53.tag = " " then begin move( sem.addl^data.info.e^id^rqst^cde^sub^fld^53, rqst.addl^data.info.e^id^rqst^cde^sub^fld^53 ); end; if sem.addl^data.info.ext^cond^cdes^sub^fld^61.tag = " " then begin move( sem.addl^data.info.ext^cond^cdes^sub^fld^61, rqst.addl^data.info.ext^cond^cdes^sub^fld^61 ); end; if sem.addl^data.info.trc^id^sub^fld^63.tag = " " then begin move( sem.addl^data.info.trc^id^sub^fld^63, rqst.addl^data.info.trc^id^sub^fld^63 ); end; if sem.addl^data.info.transit^pgm^sub^fld^64.tag = " " then begin move( sem.addl^data.info.transit^pgm^sub^fld^64, rqst.addl^data.info.transit^pgm^sub^fld^64 ); end; if sem.addl^data.info.term^cmplnt^ind^sub^fld^65.tag = " " then begin move( sem.addl^data.info.term^cmplnt^ind^sub^fld^65, rqst.addl^data.info.term^cmplnt^ind^sub^fld^65 ); end; if sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76.tag = " " then begin move( sem.addl^data.info.mc^elec^accpt^ind^sub^fld^76, rqst.addl^data.info.mc^elec^accpt^ind^sub^fld^76 ); end; if sem.addl^data.info.visa^fltcrd^sub^fld^93.tag = " " then begin move( sem.addl^data.info.visa^fltcrd^sub^fld^93, rqst.addl^data.info.visa^fltcrd^sub^fld^93 ); end; ! ! the move from sem to rqst adds response data to the request ! move( rqst.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind, sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind ); ! ! the move from rqst to sem adds completed data to response ! move( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind, rqst.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind ); #DELETE 27931 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 49126 UTIL^FRMT^ADDL^DATA^TO^XRVSL call ascii^integer^ ( sem.addl^data.info.ecom^sec^sub^fld^42. lgth, tag^lgth ); if tag^lgth > 7 then begin movd( rvsl.addl^data.info.ecom^sec^sub^fld^42. lgth, "07" ); movd( rvsl.addl^data.info.ecom^sec^sub^fld^42. subfld^id, "01" ); movd( rvsl.addl^data.info.ecom^sec^sub^fld^42. data^lgth, "03" ); move( rvsl.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, sem.addl^data.info.ecom^sec^sub^fld^42. orig^lvl^of^sec ); tag^lgth := 7; end else begin move( rvsl.addl^data.info.ecom^sec^sub^fld^42, sem.addl^data.info.ecom^sec^sub^fld^42 ); end; #DELETE 49127 /49128 UTIL^FRMT^ADDL^DATA^TO^XRVSL #DELETE 49130 /49132 UTIL^FRMT^ADDL^DATA^TO^XRVSL #ENDSCN = SW0Q238 !#CMP2.28 09/12/22 BNETG 60133FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60133 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60133 * ******************************************************************************** #SCN = SW0Q242 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v000260Q ! 13SEP2022 ChristL ! Symptom: BNET Declines ASI transactions with Response Code "05" ! Problem: ASI denied transactions are converted to "05" whereas ! Mastercard mandates states in AN6014 that a valid ! business decline response should be sent to the acquirer ! Fix: Removed the define sem^invalid^asi^resp^cde^d as this ! will no longer be used by the interface. ! Dependency: Apply fix to: ! SW60BNET: BNETG, BNETLIBS ! Run Make. ! Reference: Case #3458630. #DELETE U0023300/U0023308 #ENDSCN = SW0Q242 !#CMP2.28 09/12/22 BNETLIBS6334 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6334 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6334 * ******************************************************************************** #SCN = SW0Q243 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6334 #NEWVERSION = 6335 #ADD 11002h0D ! 13SEP2022 ChristL ! Symptom: Support for MasterCard mandate for Account Status ! Inquiry(ASI) transactions on BASE24. ! Problem: Denied ASI transactions are converted to "05" whereas ! Mastercard mandates states in AN6014 that a valid ! business decline response should be sent to the ! acquirer. ! Fix: Modified the code to remove the logic that maps the ! response code to "05" for ASI transactions. ! Procs Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETG, BNETLIBS. ! Run Make. ! Reference: Case #3458630. #REPLACE 18773 PSTM^FRMT^RESP^CDE^TO^SEM if sem^referral^d( sem ) then #DELETE 18774 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0Q243 !#CMP2.28 09/21/22 BNETLIBS6335 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6335 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6335 * ******************************************************************************** #SCN = SW0Q245 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6335 #NEWVERSION = 6336 #ADD 11002i0F ! 21SEP2022 KandhaB ! Symptom: Usage of SCA Exemption Indicators ! Problem: None ! Fix: The interface has been modified to remove references to ! the obsolete TRUSTED-MRCH-EXEMPT-RSLT field of the SCA ! Acquirer Data Token ( FH ) and instead support the ! usage of EXEMPT-IND-ID and EXEMPT-IND-STAT of SCA ! Acquirer Data Token ( FH ). ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! PS60RTAU: AUTHLIBS ! SW60BNET: BNETLIBS ! Run MAKE. ! Reference: Case #03456182 #ADD 36247T03 SEM^FRMT^XRQST^TO^PSTM^0200 movd( sca^acq^data^tkn.exempt^ind^id, "1" ); movd( sca^acq^data^tkn.exempt^ind^stat, "1" ); #DELETE 36247T04 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0Q245 !#CMP2.28 09/26/22 BNETLIBS6336 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6336 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6336 * ******************************************************************************** #SCN = SW0Q254 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6336 #NEWVERSION = 6337 #ADD 11002j0G ! 26SEP2022 wielerk ! Symptom: Interface does not populate DE-48.SE-84 ( addl-data ! merch-advc-cde ) from the PS50 token error flag on ! a response. ! Problem: Interface was not logging DE-48 data that was returned ! in a response. ! Fix: Modified code to pass DE-48 data returned in a denied ! response. ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3465255. #REPLACE 14917 PSTM^FRMT^0210^TO^XRESP if not pos^approved^d( pstm ) then #ENDSCN = SW0Q254 !#CMP2.28 11/01/22 BNETLIBS6337 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6337 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6337 * ******************************************************************************** #SCN = SW0Q289 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6337 #NEWVERSION = 6338 #ADD 11002k0E ! 01NOV2022 wielerk ! Symptom: Interface does not add the FN token correctly. ! Problem: Interface was passing the Base literal to the convert ! proc and the token was not initialized correctly as ! it requires a POS product literal. ! The SW and SQ tokens were passing a POS literal and ! should pass the Base literal. ! Fix: Modified code to pass the correct product literal. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3478184. #REPLACE 27156 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM pi_base_l, #REPLACE 28511g09 SEM^FRMT^XRESP^TO^PSTM^0210 pi_pos_l, #REPLACE 35470H0D SEM^FRMT^XRQST^TO^PSTM^0200 pi_pos_l, #REPLACE 36347g0E SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_base_l, #REPLACE 37479g08 SEM^FRMT^XRVSL^TO^PSTM^0420 call tkn^main^convert( tkn^id, pi_base_l, #ENDSCN = SW0Q289 !#CMP2.28 12/14/22 BNETLIBS6338 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6338 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6338 * ******************************************************************************** #SCN = SW0Q305 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6338 #NEWVERSION = 6339 #ADD 11002l0H ! 14DEC2022 wielerk ! Symptom: Interface does not format DE-48.SE-42 correctly in a ! reversal. ! Problem: If the tag length in tag 42 is greater than 7, the ! subfield is reformatted without the tag. ! Fix: Modified code to set DE-48.SE-42 tag to "42" when the ! length is greater than 7 in the response. ! Procs Modified: util^frmt^addl^data^to^xrvsl ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3487730. #ADD 49126h05 UTIL^FRMT^ADDL^DATA^TO^XRVSL movd( rvsl.addl^data.info.ecom^sec^sub^fld^42. tag, "42" ); #ENDSCN = SW0Q305 !#CMP2.28 01/09/23 BNETLIBS6339 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6339 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6339 * ******************************************************************************** #SCN = SW0R003 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6339 #NEWVERSION = 6340 #ADD 11002m0D ! 09JAN2023 wielerk ! Symptom: Interface sends incorrect response code to Mastercard ! when a timeout response code is received from Base24. ! Problem: Currently, if a POS timeout response code is received ! ( 113 ), the interface maps to a "01" ( referral ). ! Fix: Modified code to map "113" to "91". ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3494697. #REPLACE 18630 PSTM^FRMT^RESP^CDE^TO^SEM "113",! Referral; Timeout ! "91",! Auth sys. inoperative ! #ENDSCN = SW0R003 !#CMP2.28 01/16/23 BNETDDLS6084 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6084 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6084 * ******************************************************************************** #SCN = SW0R014 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0026280a * 17JAN2023 KandhaB * Symptom: Banknet R23.Q2 Functional Enhancements - * AN 6022 & AN 6832 * Problem: None * Fix: Modified the interface in support for the below * requirements: * AN 6022 - Introduction and Standardization of * Transaction Data Elements * AN 6832 - Adoption of the Euro Currency in the * Republic of Croatia * Modified size of length for DE 32, 33 & 121 definitions * to match CIS definition. * Modified DE 43 definition to remove obsolete redefine. * Added definitions for DE 48 SE 22 SF 06 and DE 122. * Rearranged various other existing definitions for * better usage and readability reasons. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLATTKN, DDLBATKN, DDLPSTKN * BA60SRC : ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, * BAUTILS, PSTKNCVS, PSTKNID * OK60LIB : OKLIBTS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0123M, ILB0123R, ILB0123S depend on the * BA10SC04 subvolume. Make the ILF conversion using * ILB0123M. Run the ILF conversion using ILB0123R. * Reference: WO #PDM-004161 #ADD 00958 SEM 04 cde pic x(6). #DELETE 00959 SEM #ADD 00968 SEM 04 cde pic x(6). #DELETE 00969 SEM #ADD 01037 SEM * country (3-character alphabetic code) ! #DELETE 01038 SEM #ADD 01045 SEM 04 cntry redefines state pic x(3). #DELETE 01142 /01154u03 SEM #DELETE 01157L0B/01157L0G SEM #DELETE 01157L0I/01157L0O SEM #DELETE 01157E0G/01157-02 SEM #DELETE 01157H0V/01157H10 SEM #DELETE 01157z0H/01157|02 SEM #ADD 01157R0h SEM 06 visa-cmrcl-sub-fld-94 redefines iss-chip-auth-sub-fld-72. 08 tag pic 99. 08 lgth pic 99. 08 crd-typ-rqst-ind pic x(3). 08 rqst-cmrcl-crd-typ pic x. 08 user-fld pic x(12). #DELETE 01157W0m/01157-05 SEM #ADD 01157-0B SEM * * Visa CAVV Result Code * Subfield tag = 45 06 visa-cavv-rslt-cde-sub-fld-45 redefines acct-cat-sub-fld-38. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #ADD 01157a0t SEM * * ps2000 data resp tag data. * 06 ps2000-resp-data redefines chip-bit-err-rslts-sub-fld-79. * * tag is '91' * 08 tag pic 99. * * lgth will be '19', '15' or '04. * 08 lgth pic 99. 08 resp-data. 10 tran-id pic x(15). 10 valid-cde pic x(4). 08 reas-code redefines resp-data. 10 reason-cde pic x(4). 10 fillrcde pic x(15). 08 user-fld pic x(31). #ADD 01157a1L SEM * * Visa Market-Specific Data Identifier * Subfield tag = 96 * Contains the new value B (Bill Payment Transaction) that identifies * a Visa bill payment transaction. * 06 visa-mkt-spcfc-data-sub-fld-96 redefines dyn-atc-cvc3-info-sub-fld-34. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. 08 user-fld pic x(10). #ADD 01157a1f SEM * * Visa Service Development Indicator * Subfield tag = 86 06 visa-svc-dvlpmt-ind-sub-fld-86 redefines ncff-rqst-resp-sub-fld-35. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #DELETE 01157d00/01157d09 SEM #ADD 01157f0v SEM * * Authorization System Advice Date and Time * Subfield tag = 15 * Contains the Authorization System Advice Date and Time in * AFD completion advices. * 06 auth-sys-adv-sub-fld-15 redefines mptu-rqst-sub-fld-13. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 dat pic 9(4). 10 tim pic 9(6). 08 user-fld pic x(37). #DELETE 01157k0A/01157l04 SEM #DELETE 01157r0G/01157-0l SEM #ADD 01157v0E SEM * * Card-Level Result (Visa only) * Subfield tag = 46 * Contains the Visa card-level result * 06 crd-lvl-rslt-sub-fld-46 redefines moneysend-info-sub-fld-67. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 08 user-fld pic x(5). #ADD 01157205 SEM 08 user-fld pic x(15). #ADD 01157605 SEM 08 msg-frmt-ver-cde-acq. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). #ADD 01157-14 SEM * * Visa Secure Electronic Commerce Transaction Identifier * Subfield tag = 44 06 visa-ecom-xid-sub-fld-44 redefines txn-analysis-sub-fld-27. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). 08 user-fld pic x(57). #ADD 01157-1F SEM * * Visa Payment Service Indicators * Subfield tag = 78 06 visa-pmnt-srvcs-sub-fld-78 redefines acct-data-cmprms-sub-fld-39. 08 tag pic 99. 08 lgth pic 99. 08 spend-qualified-ind pic x. 08 dcc-ind pic x. 08 def-bill-ind pic x. 08 chkout-ind pic x. 08 msg-rsn-cde pic x. 08 rsrvd pic x. 08 user-fld pic x(24). #ADD 0115720R SEM * * Prestigious Properties Indicator (Visa only) * Subfield tag = 97 * Contains the Visa prestigious property indicator * 06 visa-prest-prop-ind-sub-fld-97 redefines adnl-srvc-data-sub-fld-60. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. 08 user-fld pic x(26). #ADD 0115780P SEM 06 visa-fltcrd-sub-fld-93 redefines vcn-data-sub-fld-09. 08 tag pic 99. 08 lgth pic 99. 08 crd-typ-rqst-ind pic x. 08 tag-data pic x(18). 08 user-fld pic x(17). 06 user-fld-aci pic x(63). #DELETE 01183 /01225 SEM #DELETE 01226 /01235 SEM #DELETE 01306 /01313 SEM #DELETE 01323 /01354X02 SEM #ADD 01402 SEM 04 cde pic x(6). * ! * Additional record data ! * bit map position = 122 ! * EBCDIC in transmission, variable in length ! * ! 02 addl-rec-data. 04 lgth pic 999. 04 accpt. 06 tag pic 9(3). 06 lgth pic 9(3). 06 str-addr. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(48). 06 st. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(3). 06 url-addr. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(255). 06 cust-srvc-phone. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(16). 06 phone. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(16). 06 adnl-cntct-info. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(25). 06 tax-id. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(21). 06 partner-id. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(6). 06 srvc-loc-city. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(13). 06 srvc-loc-st. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(3). 06 srvc-loc-cntry-cde. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(3). 06 srvc-loc-postal-cde. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(10). #DELETE 01403 SEM #DELETE 01404 /01411 SEM #ADD 01411b9U SEM * * additional amounts * bit map position = 54 * EBCDIC in transmission * may have up to 6 occurrences * * Valid values positions 1-2 ( account type ): * * 00 = Not applicable or not specified * 10 = Savings account * 20 = Checking account * 30 = Credit card account * 38 = Credit line account * 50 = Money market investment account * * Valid values positions 3-4 ( amount type ) * * 01 = Ledger balance * 02 = Available balance * 03 = Amount owing * 04 = Amount due * 10 = Healthcare Eligibility Amount * 11 = Prescription Eligibility Amount * 12 = Vision Rx Eligibility Amount * 40 = Amount cash back * 41 = Amount goods and services * 44 = Amount Gratuity * 57 = Original Amount * 58 = POI Amount * 90 = Available credit * 91 = Credit limit * * Valid values positions 5-7 ( currency code ): * * Valid values position 8 ( type of amount ): * * C = Credit amount * D = Debit amount * * Valid values position 9-20 ( amount ) * 02 addl-amt. 04 lgth pic 999. 04 info occurs 6 times. 06 acct-typ pic 99. 06 amt-typ pic 99. 06 crncy-cde pic 999. 06 typ-amt pic x. 06 amt pic 9(12). * * Advice reason code, private * bit map position = 60 * EBCDIC in transmission, variable in length * 02 advice-cde. 04 lgth pic 9(3). 04 reason-cde pic 9(3). 04 detail-cde pic 9(4). 04 detail-txt pic x(53). * * intermediate network facility data * bit map position = 62 * EBCDIC in transmission, variable in length * 02 inf-data. 04 lgth pic 999. 04 info pic x(100). * * original data elements * bit map position = 90 * EBCDIC in transmission * * original message type identifier * original system audit trace number * original transmission date and time * original acquiring institution identification code * original forwarding institution identification code * 02 orig. 04 msg-typ pic 9(4). 04 trace pic 9(6). 04 dat-tim pic 9(10). 04 acq-inst-id pic 9(11). 04 fwd-inst-id pic 9(11). * * replacement amounts * bit map position = 95 * EBCDIC in transmission * * actual amount, transaction n 12 * actual amount, settlement n 12 * actual amount, cardholder billing n 12 * zero fill n 6 * 02 replace-amts. 04 tran-amt pic 9(12). 04 setl-amt pic 9(12). 04 crd-iss-amt pic 9(12). 04 filler pic x(6). #ADD 01411bAI SEM * * private data * bit map position = 127 * EBCDIC in transmission, variable in length * 02 private-data. 04 lgth pic 999. 04 info pic x(100). #ENDSCN = SW0R014 !#CMP2.28 01/16/23 BNETG 60134FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60134 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60134 * ******************************************************************************** #SCN = SW0R015 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w000260C ! 17JAN2023 KandhaB ! Symptom: Banknet R23.Q2 Functional Enhancements- AN6022 & AN6832 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 6022 - Introduction and Standardization of ! Transaction Data Elements ! AN 6832 - Adoption of the Euro Currency in the ! Republic of Croatia ! Added source in entries for ADNL-TERM-OWNER-DATA-TKN, ! ATM-TERM-OWNER-TKN, MRCH-CNTCT-DATA-TKN, ! POS-TERM-OWNER-TKN, POS-SRVC-LOC-TKN, WEBSITE-TKN ! from BADDLTAL. ! Added new global variables MIGR^TO^NEXT^REL^G and ! ACCPT^STR^ADDR^G to hold values from new LCONF ! parameters SW-BNET-MIGR-TO-NEXT-REL and ! SW-BNET-ACCEPTOR-STREET-ADDRESS respectively. ! Added a new define REPOWER^ACCPT^NAM^TEXT^D ! Added an entry in sem^bit^map^tbl^g for DE 122. ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0123M, ILB0123R, ILB0123S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0123M. Run the ILF conversion using ILB0123R. ! Reference: WO #PDM-004161 #ADD v000260e ?nolist, source =basrc_baddltal( ? adnl^term^owner^data^tkn ? atm^term^owner^tkn ? mrch^cntct^data^tkn ? pos^term^owner^tkn ? pos^srvc^loc^tkn ? website^tkn ? ) ?list ! adnl^term^owner^data^tkn ! atm^term^owner^tkn ! mrch^cntct^data^tkn ! pos^term^owner^tkn ! pos^srvc^loc^tkn ! website^tkn ! ) #ADD d0019302 define repower^accpt^nam^text^d = "MC REPOWER"#; #ADD t0043502 int migr^to^next^rel^g; int accpt^str^addr^g; #ADD 01058 122, 3, sem^field( addl^rec^data ), #DELETE 01059 #ENDSCN = SW0R015 !#CMP2.28 01/16/23 BNETLIBS6340 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6340 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6340 * ******************************************************************************** #SCN = SW0R016 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6340 #NEWVERSION = 6341 #ADD 11002n0C ! 17JAN2023 KandhaB ! Symptom: Banknet R23.Q2 Functional Enhancements- AN6022 & AN6832 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 6022 - Introduction and Standardization of ! Transaction Data Elements ! AN 6832 - Adoption of the Euro Currency in the ! Republic of Croatia ! Procs Added: util^add^pos^accpt^data^tkns ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : ATTKNCVS, ATTKNID, BATKNCVS, BATKNID, ! BAUTILS, PSTKNCVS, PSTKNID ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0123M, ILB0123R, ILB0123S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0123M. Run the ILF conversion using ILB0123R. ! Reference: WO #PDM-004161 #ADD 12038 PSTM^FRMT^0200^TO^XRQST int .adnl^term^owner^data^tkn( adnl^term^owner^data^tkn^def ); #ADD 12045 PSTM^FRMT^0200^TO^XRQST int fnd^adnl^term^owner^data^tkn := false; int fnd^mrch^cntct^data^tkn := false; int fnd^pos^srvc^loc^tkn := false; int fnd^pos^term^owner^tkn := false; int fnd^website^tkn := false; #ADD 12057 PSTM^FRMT^0200^TO^XRQST int .mrch^cntct^data^tkn( mrch^cntct^data^tkn^def ); #ADD 12064 PSTM^FRMT^0200^TO^XRQST int .pos^srvc^loc^tkn( pos^srvc^loc^tkn^def ); int .pos^term^owner^tkn( pos^term^owner^tkn^def ); #ADD 12071 PSTM^FRMT^0200^TO^XRQST int send^enhnc^accpt^data := false; #ADD 12077 PSTM^FRMT^0200^TO^XRQST int .website^tkn( website^tkn^def ); #ADD 12093 PSTM^FRMT^0200^TO^XRQST string .txt[ 0:17 ] := [ 18 * [" "] ]; #ADD 12584 SUB^LOG^ERROR if base24^rel^g >= 5 then begin ! ! Retrieve Website Token ! tkn^id ':=' website^tkn^id^d; fnd^website^tkn := hiswtkn^get^tkn( pstm, tkn^id, @website^tkn, tkn^lgth ); ! ! Retrieve POS Terminal Owner Token ! tkn^id ':=' pos^term^owner^tkn^id^d; fnd^pos^term^owner^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^term^owner^tkn, tkn^lgth ); if ( fnd^website^tkn and website^tkn.lgth <> "000" ) or ( fnd^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn. cust^srvc^phone ) * [ " " ] ] ) then begin send^enhnc^accpt^data := true; end; ! of if ( fnd^website^tkn if not bnet^g.migr^to^next^rel^g then begin send^enhnc^accpt^data := false; end; ! of if not bnet^g.migr^to^next^rel^g end; ! of if base24^rel^g >= 5 #ADD 12616 SUB^LOG^ERROR if send^enhnc^accpt^data then begin temp^len := $len( pstm.term^cntry^cde ); temp^mode := alpha^to^alpha; if not conv^cntry^cde( ! crncy^cde !, ! term^cntry !, pstm.term^cntry^cde, ! crncy^cde^alpha !, ! cntry^abbr3 !, sem.crd^acpt.cntry, temp^mode, temp^len ) then begin move( sem.crd^acpt.cntry, pct.dflt.cntry); end; end else #DELETE 12808 /12829 SUB^LOG^ERROR #ADD 12916 SUB^LOG^ERROR if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag^data <> " " then begin call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + $len( sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77 ); call integer^ascii^( sem.addl^data.lgth, lgth ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag, "77" ); movd( sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. lgth, "03" ); end; ! of if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^ #ADD 13923 SUB^LOG^ERROR if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag = "77" then #ADD 13947 SUB^LOG^ERROR end; ! of if if sem^funding^txn^d end; ! of if found^pos^data1^tkn if found^pos^data1^tkn then begin if ( sem.proc^cde.byte[ 0 ] = sem^pmnt^txn^d or sem^funding^txn^d( sem ) ) then begin #ADD 13969 SUB^LOG^ERROR if sem.typ = sem^auth^request^d and ( sem.proc^cde.byte[ 0 ] = sem^pmnt^txn^d or sem^funding^txn^d( sem ) ) and sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77. tag^data = " " then begin return resp^tran^bad^pos^l; end; #ADD 14106 SUB^LOG^ERROR if send^enhnc^accpt^data then begin ! ! Check for occurance of asterisk '*' in pstm.term^owner^name ! idx := -1; done := false; while ( idx := idx + 1 ) < $len( pstm.term^owner^name ) and not done do begin if pstm.term^owner^name.byte[ idx ] = "*" then begin done := true; end; end; ! of while ! ! Format Card Acceptor Location (DE-43) ! if ( not done ) and fnd^pos^term^owner^tkn and pos^term^owner^tkn.retl^typ = "P" and pos^term^owner^tkn.retl^nam.byte[ 22 ] <> [ 18 * [ " " ] ] and pstm.term^owner^name <> pos^term^owner^tkn.retl^nam for $len( pstm.term^owner^name ) then begin ! ! Find actual length of pos^term^owner^tkn.retl^nam ! value to move to DE-43 without trailing spaces. ! txt ':=' pos^term^owner^tkn.retl^nam.byte[ 22 ] for ( $len( pos^term^owner^tkn.retl^nam ) - 22 ); idx := $occurs( txt ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if txt[ idx ] <> " " then begin done := true; lgth := idx + 1; end; ! of if not blanks end; ! of while movl( sem.crd^acpt.reg^e^loc.byte, txt, lgth ); movd( sem.crd^acpt.reg^e^loc.byte[ lgth ], "*" ); movl( sem.crd^acpt.reg^e^loc.byte[ lgth + 1 ], pstm.term^owner^name, ( $len( sem.crd^acpt.reg^e^loc ) - ( lgth + 1 ) ) ); end; ! of if not done ! ! Further format Card Acceptor Location (DE-43) if ! the transaction is from Re-Power Load Card Acceptor ! if sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77.tag^data = "C03" then begin ! ! Check for occurance of 'MC ' in its first 13 bytes of ! pstm.term^owner^name ! idx := -1; done := false; while ( idx := idx + 1 ) < 13 and not done do begin if pstm.term^owner^name.byte[ idx ] = "MC " then begin done := true; end; end; ! of while if not done then begin ! ! Find actual length of Card Acceptor Location ! (DE-43) value that has been formatted so far. ! idx := $len( sem.crd^acpt.reg^e^loc ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if sem.crd^acpt.reg^e^loc.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; ! if not blanks end; ! of while if lgth < 12 then begin movd( sem.crd^acpt.reg^e^loc.byte[ lgth ], repower^accpt^nam^text^d ); end else begin movd( sem.crd^acpt.reg^e^loc.byte[ 12 ], repower^accpt^nam^text^d ); end; ! of if lgth < 12 end; ! of if not done end; ! of if sem.addl^data.info ! ! Update PSTM.term^owner^name as in DE 43 ! movl( pstm.term^owner^name, sem.crd^acpt.reg^e^loc, $len( pstm.term^owner^name ) ); ! ! Update DE 48 SE 22 SF 06 ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag^data, "B" ); ! ! Attempt to retrieve Additional Terminal Owner Data Token ! ( HB ) and Merchant Contact Data Token ( FM ). ! tkn^id ':=' adnl^term^owner^data^tkn^id^d; fnd^adnl^term^owner^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^term^owner^data^tkn, tkn^lgth ); if ( not fnd^adnl^term^owner^data^tkn ) or ( fnd^adnl^term^owner^data^tkn and ( adnl^term^owner^data^tkn.frmt^cde <> "01" or adnl^term^owner^data^tkn.mc.phone = [ $len( adnl^term^owner^data^tkn.mc.phone ) * [" "] ] ) ) then begin tkn^id ':=' mrch^cntct^data^tkn^id^d; fnd^mrch^cntct^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @mrch^cntct^data^tkn, tkn^lgth ); end; tkn^id ':=' pos^srvc^loc^tkn^id^d; fnd^pos^srvc^loc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^srvc^loc^tkn, tkn^lgth ); sub^lgth := 0; ! ! Format DE 122 SE 001 SF 001 ! if pstm.term^name^loc <> [ $len( pstm.term^name^loc ) * [ " " ] ] and ( ( bnet^g.accpt^str^addr^g = 0 ) or ( not fnd^pos^term^owner^tkn ) or ( fnd^pos^term^owner^tkn and pos^term^owner^tkn.str^addr = [ $len( pos^term^owner^tkn.str^addr ) * [" "] ] ) ) then begin movd( sem.addl^rec^data.accpt.str^addr.tag, "001" ); ! ! Find actual length of PSTM.term^name^loc ! idx := $len( pstm.term^name^loc ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.term^name^loc.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt.str^addr.tag^data, pstm.term^name^loc, lgth ); call integer^ascii^( sem.addl^rec^data.accpt.str^addr.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.str^addr.tag ) + $len( sem.addl^rec^data.accpt.str^addr.lgth ) + lgth; end else if fnd^pos^term^owner^tkn and pos^term^owner^tkn.str^addr <> [ $len( pos^term^owner^tkn.str^addr ) * [" "] ] then begin ofst := 0; temp^len := 0; movd( sem.addl^rec^data.accpt.str^addr.tag, "001" ); ! ! Get SF 001 value from PSTM.term^name^loc when LCONF ! param SW-BNET-ACCEPTOR-STREET-ADDRESS is set to '2' ! as both values from PSTM.term^name^loc & FT.str^addr ! are concatenated to derive SF 001. ! if bnet^g.accpt^str^addr^g = 2 and pstm.term^name^loc <> [ $len( pstm.term^name^loc ) * [ " " ] ] then begin ! ! Find actual length of PSTM.term^name^loc ! idx := $len( pstm.term^name^loc ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.term^name^loc.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt. str^addr.tag^data.byte[ ofst ], pstm.term^name^loc, lgth ); ofst := lgth; temp^len := temp^len + lgth; end; ! of if bnet^g.accpt^str^addr^g = 0 or 2 ! ! Get DE 122 SE 001 SF 001 value from FH.str^addr ! when LCONF param SW-BNET-ACCEPTOR-STREET-ADDRESS ! is set to '1' and also for param value '2', as both ! values from PSTM.term^name^loc & FT.str^addr are ! concatenated to derive SF 001. ! if bnet^g.accpt^str^addr^g = 1 or bnet^g.accpt^str^addr^g = 2 then begin ! ! Find actual length of token FH.str^addr ! idx := $len( pos^term^owner^tkn.str^addr ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. str^addr.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while ! ! Calculate the length to accommodate the value for ! tag^data field without having to exceed its size ! when LCONF param SW-BNET-ACCEPTOR-STREET-ADDRESS ! is set to '2'. ! if bnet^g.accpt^str^addr^g = 2 then begin lgth := $min( ( $len( sem.addl^rec^data.accpt. str^addr.tag^data ) - temp^len ), lgth ); end; ! of if bnet^g.accpt^str^addr^g = 2 movl( sem.addl^rec^data.accpt. str^addr.tag^data.byte[ ofst ], pos^term^owner^tkn.str^addr, lgth ); temp^len := temp^len + lgth; end; ! of if bnet^g.accpt^str^addr^g = 1 or 2 call integer^ascii^( sem.addl^rec^data.accpt.str^addr.lgth, temp^len ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.str^addr.tag ) + $len( sem.addl^rec^data.accpt.str^addr.lgth ) + temp^len; end; ! of if DE 122 SE 001 SF 001 formatting ! ! Format DE 122 SE 001 SF 002 ! if pstm.term^st <> [ $len( pstm.term^st ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.st.tag, "002" ); move( sem.addl^rec^data.accpt.st.tag^data, pstm.term^st ); call integer^ascii^( sem.addl^rec^data.accpt.st.lgth, $len( pstm.term^st ) ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.st.tag ) + $len( sem.addl^rec^data.accpt.st.lgth ) + $len( sem.addl^rec^data.accpt.st.tag^data ); end; ! of if DE 122 SE 001 SF 002 formatting ! ! Format DE 122 SE 001 SF 003 ! if fnd^website^tkn and website^tkn.url^addr <> [ $len( website^tkn.url^addr ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.url^addr.tag, "003" ); call ascii^integer^( website^tkn.lgth, lgth ); if lgth > 0 then begin move( sem.addl^rec^data.accpt.url^addr.lgth, website^tkn.lgth ); movl( sem.addl^rec^data.accpt.url^addr.tag^data, website^tkn.url^addr, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.url^addr.tag ) + $len( sem.addl^rec^data.accpt.url^addr.lgth ) + lgth; end; end; ! of if DE 122 SE 001 SF 003 formatting ! ! Format DE 122 SE 001 SF 004 ! if fnd^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn.cust^srvc^phone ) * [" "] ] then begin movd( sem.addl^rec^data.accpt.cust^srvc^phone.tag, "004" ); idx := $len( pos^term^owner^tkn.cust^srvc^phone ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. cust^srvc^phone.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt.cust^srvc^phone.tag^data, pos^term^owner^tkn.cust^srvc^phone, lgth ); call integer^ascii^( sem.addl^rec^data.accpt.cust^srvc^phone.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.cust^srvc^phone.tag ) + $len( sem.addl^rec^data.accpt.cust^srvc^phone.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 004 formatting ! ! Format DE 122 SE 001 SF 005 ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.phone <> [ $len( adnl^term^owner^data^tkn.mc.phone ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.phone.tag, "005" ); idx := $len( adnl^term^owner^data^tkn.mc.phone ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn. mc.phone.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt.phone.tag^data, adnl^term^owner^data^tkn.mc.phone, lgth ); call integer^ascii^( sem.addl^rec^data.accpt.phone.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.phone.tag ) + $len( sem.addl^rec^data.accpt.phone.lgth ) + lgth; end else if fnd^mrch^cntct^data^tkn and mrch^cntct^data^tkn.phone <> [ $len( mrch^cntct^data^tkn.phone ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.phone.tag, "005" ); idx := $len( mrch^cntct^data^tkn.phone ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if mrch^cntct^data^tkn.phone.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt.phone.tag^data, mrch^cntct^data^tkn.phone, lgth ); call integer^ascii^( sem.addl^rec^data.accpt.phone.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.phone.tag ) + $len( sem.addl^rec^data.accpt.phone.lgth ) + lgth; end; ! if DE 122 SE 001 SF 005 formatting if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" then begin ! ! Format DE 122 SE 001 SF 006 ! if adnl^term^owner^data^tkn.mc.adnl^cntct^info <> [ $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ) * [" "] ] then begin movd( sem.addl^rec^data.accpt.adnl^cntct^info.tag, "006" ); idx := $len( adnl^term^owner^data^tkn. mc.adnl^cntct^info ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. adnl^cntct^info.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt. adnl^cntct^info.tag^data, adnl^term^owner^data^tkn.mc. adnl^cntct^info, lgth ); call integer^ascii^( sem.addl^rec^data.accpt. adnl^cntct^info.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. adnl^cntct^info.tag ) + $len( sem.addl^rec^data.accpt. adnl^cntct^info.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 006 formatting ! ! Format DE 122 SE 001 SF 007 ! if adnl^term^owner^data^tkn.mc.tax^id <> [ $len( adnl^term^owner^data^tkn.mc.tax^id ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.tax^id.tag, "007" ); movl( sem.addl^rec^data.accpt.tax^id.tag^data, adnl^term^owner^data^tkn.mc.tax^id, $len( adnl^term^owner^data^tkn.mc.tax^id ) ); call integer^ascii^( sem.addl^rec^data.accpt.tax^id.lgth, $len( adnl^term^owner^data^tkn.mc. tax^id ) ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt.tax^id.tag ) + $len( sem.addl^rec^data.accpt.tax^id.lgth ) + $len( sem.addl^rec^data.accpt.tax^id.tag^data ); end; ! of if DE 122 SE 001 SF 007 formatting ! ! Format DE 122 SE 001 SF 008 ! if adnl^term^owner^data^tkn.mc.partner^id^cde <> [ $len( adnl^term^owner^data^tkn.mc. partner^id^cde ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.partner^id.tag, "008" ); idx := $len( adnl^term^owner^data^tkn. mc.partner^id^cde ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. partner^id^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while ( idx := idx + 1 ) ... movl( sem.addl^rec^data.accpt.partner^id.tag^data, adnl^term^owner^data^tkn.mc.partner^id^cde, $len( adnl^term^owner^data^tkn.mc. partner^id^cde ) ); call integer^ascii^ ( sem.addl^rec^data.accpt.partner^id.lgth, $len( adnl^term^owner^data^tkn.mc. partner^id^cde ) ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. partner^id.tag ) + $len( sem.addl^rec^data.accpt. partner^id.lgth ) + $len( sem.addl^rec^data.accpt. partner^id.tag^data ); end; ! of if DE 122 SE 001 SF 008 formatting end; ! of if fnd^adnl^term^owner^data^tkn if fnd^pos^srvc^loc^tkn then begin ! ! Format DE 122 SE 001 SF 009 ! if pos^srvc^loc^tkn.city <> [ $len( pos^srvc^loc^tkn.city ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.srvc^loc^city.tag, "009" ); idx := $len( pos^srvc^loc^tkn.city ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn.city.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt.srvc^loc^city.tag^data, pos^srvc^loc^tkn.city, lgth ); call integer^ascii^( sem.addl^rec^data.accpt.srvc^loc^city.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. srvc^loc^city.tag ) + $len( sem.addl^rec^data.accpt. srvc^loc^city.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 009 formatting ! ! Format DE 122 SE 001 SF 010 ! if pos^srvc^loc^tkn.st <> [ $len( pos^srvc^loc^tkn.st ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt.srvc^loc^st.tag, "010" ); move( sem.addl^rec^data.accpt.srvc^loc^st.tag^data, pos^srvc^loc^tkn.st ); call integer^ascii^( sem.addl^rec^data.accpt.srvc^loc^st.lgth, $len( pos^srvc^loc^tkn.st ) ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. srvc^loc^st.tag ) + $len( sem.addl^rec^data.accpt. srvc^loc^st.lgth ) + $len( sem.addl^rec^data.accpt. srvc^loc^st.tag^data ); end; ! of if DE 122 SE 001 SF 010 formatting ! ! Format DE 122 SE 001 SF 011 ! if pos^srvc^loc^tkn.cntry^cde <> [ $len( pos^srvc^loc^tkn. cntry^cde ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.tag, "011" ); move( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.tag^data, pos^srvc^loc^tkn.cntry^cde ); call integer^ascii^( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.lgth, $len( pos^srvc^loc^tkn.cntry^cde ) ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.tag ) + $len( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.lgth ) + $len( sem.addl^rec^data.accpt. srvc^loc^cntry^cde.tag^data ); end; ! of if DE 122 SE 001 SF 011 formatting ! ! Format DE 122 SE 001 SF 012 ! if pos^srvc^loc^tkn.postal^cde <> [ $len( pos^srvc^loc^tkn. postal^cde ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt. srvc^loc^postal^cde.tag, "012" ); idx := $len( pos^srvc^loc^tkn.postal^cde ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while movl( sem.addl^rec^data.accpt. srvc^loc^postal^cde.tag^data, pos^srvc^loc^tkn.postal^cde, lgth ); call integer^ascii^( sem.addl^rec^data.accpt. srvc^loc^postal^cde.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. srvc^loc^postal^cde.tag ) + $len( sem.addl^rec^data.accpt. srvc^loc^postal^cde.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 012 formatting end; ! of if fnd^pos^srvc^loc^tkn if sub^lgth > 0 then begin sem.addl^rec^data.accpt.tag ':=' "001"; call integer^ascii^( sem.addl^rec^data.accpt.lgth, sub^lgth ); call integer^ascii^( sem.addl^rec^data.lgth, sub^lgth + 6 ); addl^rec^data^d := 1; end; end; ! of if send^enhnc^accpt^data #ADD 16167 PSTM^FRMT^0420^TO^ACQ^XRVSL addl^amt^bit^d := 0; ! P-54 ! #ADD 16183 PSTM^FRMT^0420^TO^ACQ^XRVSL private^data^bit^d := 0; ! S-127 ! #ADD 17269L0Q PSTM^FRMT^AMT^TO^SEM^AMT end else begin init( sem.addl^amt, " ", $len( sem.addl^amt ) ); if pstm.tran.amt^2 > 0f then begin if amt^num < $occurs( sem.addl^amt.info ) then begin if pstm.tran.tran^cde.aa = b24^savings^d then begin movd( sem.addl^amt.info[ amt^num ].acct^typ, bnet^sav^acct^d ); end else if pstm.tran.tran^cde.aa = b24^checking^d then begin movd( sem.addl^amt.info[ amt^num ].acct^typ, bnet^chk^acct^d ); end else begin movd( sem.addl^amt.info[ amt^num ].acct^typ, bnet^dflt^acct^d ); end; ! of if pstm.tran.tran^cde.aa movd( sem.addl^amt.info[ 0 ].amt^typ, bnet^amt^typ^cb^d ); move( sem.addl^amt.info[ 0 ].crncy^cde, pstm.orig^crncy^cde ); movd( sem.addl^amt.info[ 0 ].typ^amt, "D" ); pstm^amt:= pstm.tran.amt^2; if not hiswutil^cnv^amt^expnt( crncy^expnt^tbl^s, pstm.orig^crncy^cde, 0, pstm^amt ) then begin return false; end; if not fixed^ascii^( sem.addl^amt.info[ amt^num ].amt, pstm^amt ) then begin return false; end; lgth := lgth + $len( sem.addl^amt.info ); amt^num := amt^num + 1; end; ! of if amt^num < $occurs( sem.addl^amt end; ! of if pstm.tran.amt^2 > 0f end; ! of if not pos^purch^cb^d( pstm ) if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; ! of if lgth > 0 #DELETE 17269L0R/17291 PSTM^FRMT^AMT^TO^SEM^AMT #ADD 21229Y2g PSTM^FRMT^SEM^ADDL^DATA ! ! Set DE 48, SE 22, SF 06 ! movd( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag, "06" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.lgth, "01" ); movd( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag^data, "A" ); sub^lgth := sub^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq ); if not bnet^g.migr^to^next^rel^g then begin mov^( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq, blanks ); sub^lgth := sub^lgth - $len( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq ); end; ! of if not bnet^g.migr^to^next^rel^g #DELETE 21603 /21605 PSTM^FRMT^SEM^ADDL^DATA #ADD 21660 PSTM^FRMT^SEM^ADDL^DATA sub^mrch^id ) * [ "0" ] ] ) then #DELETE 21661 /21665 PSTM^FRMT^SEM^ADDL^DATA #ADD 33783 SEM^FRMT^XRQST^TO^PSTM^0200 if addl^rec^data^d and !bit 122 sem.addl^rec^data.accpt.tag = "001" then begin temp^len := $len( sem.crd^acpt.cntry ); temp^mode := alpha^to^alpha; call conv^cntry^cde( ! crncy^cde !, ! term^cntry !, pstm.term^cntry^cde, ! crncy^cde^alpha !, ! cntry^abbr3 !, sem.crd^acpt.cntry, temp^mode, temp^len ); move ( pstm.term^name^loc, sem.addl^rec^data.accpt.str^addr.tag^data ); move ( pstm.term^st, sem.addl^rec^data.accpt.st.tag^data ); end else if sem.ntl^pos^data.cntry^cde = "840" then begin move ( pstm.term^st, sem.crd^acpt.state ); movd ( pstm.term^cntry^cde, "US" ); end #DELETE 33784 /33787 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35828 SEM^FRMT^XRQST^TO^PSTM^0200 if addl^rec^data^d and ! S-122 sem.addl^rec^data.accpt.tag = "001" then begin call util^add^pos^accpt^data^tkns( sem, pstm, ofst, pos^userdata ); end; #ADD 37466 SEM^FRMT^XRVSL^TO^PSTM^0420 if addl^rec^data^d and !S-122 rvsl.addl^rec^data.accpt.tag = "001" then begin call util^add^pos^accpt^data^tkns( rvsl, pstm, ofst, pos^userdata ); end; #ADD 39647 SUB^PROCESS^SENDER^DATA ?section util^add^pos^accpt^data^tkns ?page "util^add^pos^accpt^data^tkns" !#####################################################################! !# #! !# util^add^pos^accpt^data^tkns #! !# #! !# This procedure adds or updates the Additional Terminal Owner #! !# Data token (HB), POS Terminal Owner Data token (FT), POS Service #! !# Location token (FS) and Website token (HA). These tokens are #! !# used for acceptor data processing. #! !# #! !# INPUT PARAMETERS: #! !# sem - External message #! !# sim - Internal message STM/PSTM #! !# ofst - Offset to the token buffer in the SIM #! !# pos^userdata - POS user data flag #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc util^add^pos^accpt^data^tkns( sem, sim, ofst, pos^userdata ) extensible; int .sem( sem^def ); int .sim; int ofst; int pos^userdata; begin wlform( err^add^tkn, "UNABLE TO ADD TOKEN: \\, ERROR: #, PAN: \?, " ','"SEQ NUM: \? " ) wlform( err^no^room, "NO ROOM TO ADD TOKEN: \\, PAN: \?, SEQ NUM: \?" ) wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\, ERROR: #, PAN: \?," ','" SEQ NUM: \?" ) struct .adnl^term^owner^tkn(adnl^term^owner^data^tkn^def); struct .pos^srvc^loc^tkn( pos^srvc^loc^tkn^def ); struct .pos^term^owner^tkn( pos^term^owner^tkn^def ); struct .website^tkn( website^tkn^def ); int add^adnl^term^owner^tkn := false; int add^pos^srv^loc^tkn := false; int add^pos^term^owner^tkn := false; int add^website^tkn := false; int .adnl^term^get^tkn( adnl^term^owner^data^tkn^def ); int pan^lgth := 0; int .pos^srvc^loc^get^tkn( pos^srvc^loc^tkn^def ); int .pos^term^owner^get^tkn( pos^term^owner^tkn^def ); int .pstm( pstm^def ) := @sim; int .sem^( sem^def ) := @sem; int .sbit^map := wordaddr( @sem^.sbit^map ); int tag^lgth := 0; int tkn^add^lgth := 0; int tkn^found := 0; int tkn^lgth := 0; int tkn^rslt := 0; int .website^get^tkn( website^tkn^def ); string pan[ 0:18 ] := [ 19 * [ " " ] ]; string tkn^id[ 0:1 ] := [ 2 *[ " " ] ]; ?page "subproc sub^log^error of util^add^pos^accpt^data^tkns" !################################################################# !# # !# sub^log^error # !# # !# This subprocedure is called when a token error is detected. # !# An appropriate EMS messaage is logged based on the token # !# error. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^log^error; begin if tkn^rslt = over^max^limit^l then begin call log^message^( 4150, ! routing code !, @err^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 4151, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); call abend^( 4151 ); end else begin call log^message^( 4152, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); call abend^( 4152 ); end; ! of if not tkn^found end; ! of if tkn^rslt = over^max^limit^l end; ! of subproc sub^log^error ?page "util^add^pos^accpt^data^tkns" !#################################################################! !# #! !# This is the main body of PROC util^add^pos^accpt^data^tkns #! !# #! !#################################################################! ! ! Return if the release is less than 5 ! if base24^rel^g < 5 then begin return; end; ! if base24^rel^g < 5 then ! ! Save PAN and PAN lgth for event messages ! call ascii^integer^( sem^.pan.lgth, pan^lgth ); movl( pan, sem^.pan.num, pan^lgth ); ! ! Retrieve POS-TERM-OWNER-TKN ( FT ) ! movd( tkn^id, pos^term^owner^tkn^id^d ); if hiswtkn^get^tkn( sim, tkn^id, ! FT ! @pos^term^owner^get^tkn, tkn^lgth ) then begin @pos^term^owner^tkn := @pos^term^owner^get^tkn; end else begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, pos^term^owner^tkn ); end; ! ! Retrieve WEBSITE-TKN ( HA ) ! movd( tkn^id, website^tkn^id^d ); if hiswtkn^get^tkn( sim, tkn^id, ! HA ! @website^get^tkn, tkn^lgth ) then begin @website^tkn := @website^get^tkn; end else begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, website^tkn ); end; ! ! Retrieve ADNL-TERM-OWNER-TKN ( HB ) ! movd( tkn^id, adnl^term^owner^data^tkn^id^d ); if hiswtkn^get^tkn( sim, tkn^id, ! HB ! @adnl^term^get^tkn, tkn^lgth ) then begin @adnl^term^owner^tkn := @adnl^term^get^tkn; end else begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, adnl^term^owner^tkn ); end; ! ! Retrieve POS-SRVC-LOC-TKN ( FS ) ! movd( tkn^id, pos^srvc^loc^tkn^id^d ); if hiswtkn^get^tkn( sim, tkn^id, ! FS ! @pos^srvc^loc^get^tkn, tkn^lgth ) then begin @pos^srvc^loc^tkn := @pos^srvc^loc^get^tkn; end else begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, pos^srvc^loc^tkn ); end; ! ! Move values to respective FT token field from ! DE 122 SE 001 SF 001 ! if sem^.addl^rec^data.accpt.str^addr.tag = "001" then begin call ascii^integer^( sem^.addl^rec^data.accpt.str^addr.lgth, tag^lgth ); if tag^lgth > 25 then begin tag^lgth := tag^lgth - 25; movl( pos^term^owner^tkn.str^addr, sem^.addl^rec^data.accpt.str^addr. tag^data.byte[ 25 ], tag^lgth ); add^pos^term^owner^tkn := true; end; end; ! of if tag 001 ! ! Move values to respective HA token field from ! DE 122 SE 001 SF 003 ! if sem^.addl^rec^data.accpt.url^addr.tag = "003" then begin call ascii^integer^( sem^.addl^rec^data.accpt.url^addr.lgth, tag^lgth ); if tag^lgth > 0 then begin move( website^tkn.lgth, sem^.addl^rec^data.accpt.url^addr.lgth ); movl( website^tkn.url^addr, sem^.addl^rec^data.accpt.url^addr.tag^data, tag^lgth ); add^website^tkn := true; end; end; ! of if tag 003 ! ! Move values to respective FT token field from ! DE 122 SE 001 SF 004 ! if sem^.addl^rec^data.accpt.cust^srvc^phone.tag = "004" then begin call ascii^integer^( sem^.addl^rec^data.accpt.cust^srvc^phone.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^term^owner^tkn.cust^srvc^phone, sem^.addl^rec^data.accpt.cust^srvc^phone.tag^data, tag^lgth ); add^pos^term^owner^tkn := true; end; end; ! of if tag 004 ! ! Move values to respective HB token field from ! DE 122 SE 001 SF 005 ! if sem^.addl^rec^data.accpt.phone.tag = "005" then begin call ascii^integer^( sem^.addl^rec^data.accpt.phone.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( adnl^term^owner^tkn.mc.phone, sem^.addl^rec^data.accpt.phone.tag^data, tag^lgth ); add^adnl^term^owner^tkn := true; end; end; ! of if tag 005 ! ! Move values to respective HB token field from ! DE 122 SE 001 SF 006 ! if sem^.addl^rec^data.accpt.adnl^cntct^info.tag = "006" then begin call ascii^integer^( sem^.addl^rec^data.accpt.adnl^cntct^info.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( adnl^term^owner^tkn.mc.adnl^cntct^info, sem^.addl^rec^data.accpt. adnl^cntct^info.tag^data, tag^lgth ); add^adnl^term^owner^tkn := true; end; end; ! of if tag 006 ! ! Move values to respective HB token field from ! DE 122 SE 001 SF 007 ! if sem^.addl^rec^data.accpt.tax^id.tag = "007" then begin call ascii^integer^( sem^.addl^rec^data.accpt.tax^id.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( adnl^term^owner^tkn.mc.tax^id, sem^.addl^rec^data.accpt.tax^id.tag^data, tag^lgth ); add^adnl^term^owner^tkn := true; end; end; ! of if tag 007 ! ! Move values to respective HB token field from ! DE 122 SE 001 SF 008 ! if sem^.addl^rec^data.accpt.partner^id.tag = "008" then begin call ascii^integer^( sem^.addl^rec^data.accpt.partner^id.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( adnl^term^owner^tkn.mc.partner^id^cde, sem^.addl^rec^data.accpt.partner^id.tag^data, tag^lgth ); add^adnl^term^owner^tkn := true; end; end; ! of if tag 008 ! ! Move values to respective FS token field from ! DE 122 SE 001 SF 009 ! if sem^.addl^rec^data.accpt.srvc^loc^city.tag = "009" then begin call ascii^integer^( sem^.addl^rec^data.accpt.srvc^loc^city.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^srvc^loc^tkn.city, sem^.addl^rec^data.accpt.srvc^loc^city.tag^data, tag^lgth ); add^pos^srv^loc^tkn := true; end; end; ! of if tag 009 ! ! Move values to respective FS token field from ! DE 122 SE 001 SF 010 ! if sem^.addl^rec^data.accpt.srvc^loc^st.tag = "010" then begin call ascii^integer^ ( sem^.addl^rec^data.accpt.srvc^loc^st.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^srvc^loc^tkn.st, sem^.addl^rec^data.accpt.srvc^loc^st. tag^data, tag^lgth ); add^pos^srv^loc^tkn := true; end; end; ! of if tag 010 ! ! Move values to respective FS token field from ! DE 122 SE 001 SF 011 ! if sem^.addl^rec^data.accpt.srvc^loc^cntry^cde.tag = "011" then begin call ascii^integer^ ( sem^.addl^rec^data.accpt. srvc^loc^cntry^cde.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^srvc^loc^tkn.cntry^cde, sem^.addl^rec^data.accpt.srvc^loc^cntry^cde. tag^data, tag^lgth ); add^pos^srv^loc^tkn := true; end; end; ! of if tag 011 ! ! Move values to respective FS token field from ! DE 122 SE 001 SF 012 ! if sem^.addl^rec^data.accpt.srvc^loc^postal^cde.tag = "012" then begin call ascii^integer^ ( sem^.addl^rec^data.accpt. srvc^loc^postal^cde.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^srvc^loc^tkn.postal^cde, sem^.addl^rec^data.accpt. srvc^loc^postal^cde.tag^data, tag^lgth ); add^pos^srv^loc^tkn := true; end; end; ! of if tag 012 ! ! Attempt to add POS-TERM-OWNER-TKN ! if add^pos^term^owner^tkn then begin tkn^found := false; movd( tkn^id, pos^term^owner^tkn^id^d ); movl( pos^term^owner^tkn.retl^nam, sem^.crd^acpt.reg^e^loc, $len( sem^.crd^acpt.reg^e^loc ) ); tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^term^owner^tkn, $len( pos^term^owner^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^term^owner^tkn, $len( pos^term^owner^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^rslt = tkn^exist^l if tkn^rslt then begin call sub^log^error; end; ! of if tkn^rslt end; ! of if add^pos^term^owner^tkn ! ! Attempt to add WEBSITE-TKN ! if add^website^tkn then begin tkn^found := false; movd( tkn^id, website^tkn^id^d ); call ascii^integer^( website^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + 3; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, website^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, website^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^rslt = tkn^exist^l if tkn^rslt then begin call sub^log^error; end; ! of if tkn^rslt end; ! of if add^website^tkn ! ! Attempt to add ADNL-TERM-OWNER-TKN ! if add^adnl^term^owner^tkn then begin tkn^found := false; movd( tkn^id, adnl^term^owner^data^tkn^id^d ); movd( adnl^term^owner^tkn.frmt^cde, "01" ); tkn^add^lgth := $offset( adnl^term^owner^tkn.mc.user^fld^aci ); call integer^ascii^( adnl^term^owner^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + 4; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^term^owner^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^term^owner^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^rslt = tkn^exist^l if tkn^rslt then begin call sub^log^error; end; ! of if tkn^rslt end; ! of if add^adnl^term^owner^tkn ! ! Attempt to add POS-SRVC-LOC-TKN ! if add^pos^srv^loc^tkn then begin tkn^found := false; movd( tkn^id, pos^srvc^loc^tkn^id^d ); tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^srvc^loc^tkn, $len( pos^srvc^loc^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! Token already exists, so update the token ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^srvc^loc^tkn, $len( pos^srvc^loc^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^rslt = tkn^exist^l if tkn^rslt then begin call sub^log^error; end; ! of if tkn^rslt end; ! of if add^pos^srvc^loc^tkn end; ! of proc util^add^pos^accpt^data^tkns #ADD 41519 TRACE^SEM index <> 111 and index <> 121 then #DELETE 41520 TRACE^SEM #ADD 41898Y0N TRACE^SEM ! ! ! Move Subfield 6 - Message Format Version ! ! Code: Acquirer ! ! ! if hdr.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag = "06" then begin call ascii^integer( hdr.addl^data.info. mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 06 ! #ADD 44636 TRACE^SEM end ! index = 111 else if index = 121 then ! field 122 begin ! ! External message is too long. ! if ( extlgth := extlgth '+' length ) > $len( msg^def ) then begin return ( index + 1 ); end; ptr ':=' sem[ offset ] for $len( hdr.addl^rec^data.lgth ); call ascii^integer( ptr, 3, t^length ); call translate( ptr, $len( hdr.addl^rec^data.lgth ), ascii^to^ebcdic^l ); length := 3; @ptr := @ptr '+' length; if hdr.addl^rec^data.accpt.tag = "001" then begin movl( ptr, hdr.addl^rec^data.accpt.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! Move Subfield 001 - Street Address ! if hdr.addl^rec^data.accpt.str^addr.tag = "001" then begin call ascii^integer( hdr.addl^rec^data.accpt. str^addr.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. str^addr.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 001 ! ! Move Subfield 002 - Street ! if hdr.addl^rec^data.accpt.st.tag = "002" then begin call ascii^integer( hdr.addl^rec^data.accpt.st.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt.st.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 002 ! ! Move Subfield 003 - URL Address ! if hdr.addl^rec^data.accpt.url^addr.tag = "003" then begin call ascii^integer( hdr.addl^rec^data.accpt. url^addr.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. url^addr.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 003 ! ! Move Subfield 004 - Customer Service Phone ! if hdr.addl^rec^data.accpt.cust^srvc^phone. tag = "004" then begin call ascii^integer( hdr.addl^rec^data.accpt. cust^srvc^phone.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. cust^srvc^phone.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 004 ! ! Move Subfield 005 - Phone ! if hdr.addl^rec^data.accpt.phone.tag = "005" then begin call ascii^integer( hdr.addl^rec^data.accpt. phone.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. phone.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 005 ! ! Move Subfield 006 - Additional Contact Info ! if hdr.addl^rec^data.accpt.adnl^cntct^info. tag = "006" then begin call ascii^integer( hdr.addl^rec^data.accpt. adnl^cntct^info.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. adnl^cntct^info.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 006 ! ! Move Subfield 007 - Tax ID ! if hdr.addl^rec^data.accpt.tax^id.tag = "007" then begin call ascii^integer( hdr.addl^rec^data.accpt. tax^id.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt.tax^id.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 007 ! ! Move Subfield 008 - Partner ID ! if hdr.addl^rec^data.accpt.partner^id.tag = "008" then begin call ascii^integer( hdr.addl^rec^data.accpt. partner^id.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. partner^id.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 008 ! ! Move Subfield 009 - Service Location City ! if hdr.addl^rec^data.accpt.srvc^loc^city. tag = "009" then begin call ascii^integer( hdr.addl^rec^data.accpt. srvc^loc^city.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. srvc^loc^city.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 009 ! ! Move Subfield 010 - Service Location Street ! if hdr.addl^rec^data.accpt.srvc^loc^st.tag = "010" then begin call ascii^integer( hdr.addl^rec^data. accpt.srvc^loc^st.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. srvc^loc^st.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 010 ! ! Move Subfield 011 - Service Location ! Cntry Cde ! if hdr.addl^rec^data.accpt. srvc^loc^cntry^cde.tag = "011" then begin call ascii^integer( hdr.addl^rec^data.accpt. srvc^loc^cntry^cde.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. srvc^loc^cntry^cde.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 011 ! ! Move Subfield 012 - Service Location ! Postal Cde ! if hdr.addl^rec^data.accpt. srvc^loc^postal^cde.tag = "012" then begin call ascii^integer( hdr.addl^rec^data.accpt. srvc^loc^postal^cde.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. srvc^loc^postal^cde.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 012 end;! of tag = "001" set( translate^field, false ); end; ! index = 122 #DELETE 44637 TRACE^SEM #ADD 44645 TRACE^SEM index <> 111 and index <> 121 then #DELETE 44646 TRACE^SEM #ADD 46257 TRACE^SEM index <> 111 and index <> 121 then #DELETE 46258 TRACE^SEM #ADD 46556Y0C TRACE^SEM else ! ! ! Move Subfield 6 - Message Format ! ! Version Code: Acquirer ! ! ! if sub^ptr = "06" then begin call sub^move^subfield( sem^ptr. addl^data.info. mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag ); end ! subfield 06 ! #REPLACE 48534I0P OFFSET 1 TRACE^SEM sub^lgth + 4 ); #ADD 48574 TRACE^SEM end ! index = 111 else if index = 121 then ! field 122 begin call translate( ptr, $len( hdr.addl^rec^data.lgth ), ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for $len( hdr.addl^rec^data.lgth ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! the sem has invalid data. ! return ( index + 1 ); end; call translate( ptr[ 3 ], t^length, ebcdic^to^ascii^l ); set( translate^field, true ); length := 3; if t^length < 6 then begin ! ! no subfields present ! length := t^length + 3; end; tag^length := 0; bad^lgth := 0; while ( length < ( t^length + 3 ) ) do begin if not ascii^integer( ptr[ length + 3 ], 3, tag^length ) then begin ! ! DE 122 sub-element has invalid data. ! return ( index + 1 ); end; if ptr[ length ] = "001" then begin movl( sem^ptr.addl^rec^data.accpt.tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.addl^rec^data.accpt. str^addr.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.addl^rec^data.accpt. st.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "003" then begin movl( sem^ptr.addl^rec^data.accpt. url^addr.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "004" then begin movl( sem^ptr.addl^rec^data.accpt. cust^srvc^phone.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "005" then begin movl( sem^ptr.addl^rec^data.accpt. phone.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "006" then begin movl( sem^ptr.addl^rec^data.accpt. adnl^cntct^info.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "007" then begin movl( sem^ptr.addl^rec^data.accpt. tax^id.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "008" then begin movl( sem^ptr.addl^rec^data.accpt. partner^id.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "009" then begin movl( sem^ptr.addl^rec^data.accpt. srvc^loc^city.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "010" then begin movl( sem^ptr.addl^rec^data.accpt. srvc^loc^st.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "011" then begin movl( sem^ptr.addl^rec^data.accpt. srvc^loc^cntry^cde.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "012" then begin movl( sem^ptr.addl^rec^data.accpt. srvc^loc^postal^cde.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! Unrecognized tag ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + sub^lgth + 6; end; ! of while end else if ptr[ length ] <> " " then begin bad^lgth := bad^lgth + tag^length + 6; length := length + tag^length + 6; end else begin return ( index + 1 ); end; end; if length <> t^length + 3 then begin ! ! parsing of DE 122 has gone wrong somewhere. ! length := t^length + 3; return ( index + 1 ); end; ! ! if this field is greater than 0, an unsupported ! subfield was hit and the length needs to be ! re-set. ! if bad^lgth > 0 then begin if t^length > bad^lgth then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.addl^rec^data.lgth, t^length ); end; ! of resetting field length end; ! of if bad^lgth > 0 set( translate^field, false ); @ptr := @ptr '+' length; end; ! index = 121 #DELETE 48575 TRACE^SEM #ADD 48582 TRACE^SEM index <> 111 and index <> 121 then #DELETE 48583 TRACE^SEM #ADD 48586 TRACE^SEM ! already moved data for fields 48, 104, 108, 112 ! and 122 #DELETE 48587 TRACE^SEM #ENDSCN = SW0R016 !#CMP2.28 01/16/23 BNETS 6168 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6168 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6168 * ******************************************************************************** #SCN = SW0R019 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6168 #NEWVERSION = 6169 #ADD 03821]0F ! 17JAN2023 KandhaB ! Symptom: Banknet R23.Q2 Functional Enhancements- AN6022 & AN6832 ! Problem: None ! Fix: Modified the interface in support for the below ! requirements: ! AN 6022 - Introduction and Standardization of ! Transaction Data Elements ! AN 6832 - Adoption of the Euro Currency in the ! Republic of Croatia ! Procs Modified: init^bnet^g ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS, BNETS ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0123M, ILB0123R, ILB0123S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0123M. Run the ILF conversion using ILB0123R. ! Reference: WO #PDM-004161 #ADD 10428@02 INIT^BNET^G bnet^g.migr^to^next^rel^g := false; bnet^g.accpt^str^addr^g := 0; #ADD 12676@02 INIT^PARAMPROC "P", "SW-BNET-MIGR-TO-NEXT-REL ", "P", "SW-BNET-ACCEPTOR-STREET-ADDRESS ", #ADD 13501@0D INIT^PARAMPROC ! ! SW-BNET-MIGR-TO-NEXT-REL ! if not ferror then begin bnet^g.migr^to^next^rel^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.migr^to^next^rel^g := true; end; end; ! ! SW-BNET-ACCEPTOR-STREET-ADDRESS ! if not ferror then begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, bnet^g.accpt^str^addr^g ) then begin bnet^g.accpt^str^addr^g := 0; call log^message^( 1342, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.accpt^str^addr^g ); end else if bnet^g.accpt^str^addr^g < 0 or bnet^g.accpt^str^addr^g > 2 then begin bnet^g.accpt^str^addr^g := 0; call log^message^( 1343, ! routing code !, @inv^param, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^len^l, bnet^g.accpt^str^addr^g ); end; end; #ENDSCN = SW0R019 !#CMP2.28 01/17/23 BNETLIBS6341 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6341 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6341 * ******************************************************************************** #SCN = SW0R022 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6341 #NEWVERSION = 6342 #ADD 11002o0X ! 17JAN2023 wielerk ! Symptom: Interface emits EMS message #8102 unknown product id ! when a warmboot is sent to the process. ! Problem: There is a length variable defined as a pointer that ! causes SKEL corruption. ! Fix: Modified code to remove indirection from the length ! variable and removed a similarly defined variable ! which is unused. ! Procs Modified: sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^instl^pmnt^to^pstm ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3498520. #DELETE 24708 SEM^FRMT^INSTL^PMNT^TO^PSTM #REPLACE 27091 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM int compliance^get^lgth := 0; #ENDSCN = SW0R022 !#CMP2.28 01/20/23 BNETLIBS6342 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6342 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6342 * ******************************************************************************** #SCN = SW0R023 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6342 #NEWVERSION = 6343 #ADD 11002p0F ! 20JAN2023 wielerk ! Symptom: Interface maps Base24 response code "074" to external ! response code "96". ! Problem: A value of "96" allows Mastercard to stand-in and this ! is allowing fraudulent activity. ! Fix: Modified code to map internal response code "074" to ! external response code "12". ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3498074. #REPLACE 18581 PSTM^FRMT^RESP^CDE^TO^SEM "074",! Unable to Authorize ! "12",! Invalid transaction ! #ENDSCN = SW0R023 !#CMP2.28 02/23/23 BNETDDLS6085 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6085 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6085 * ******************************************************************************** #SCN = SW0R062 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0026290V * 23FEB2023 jayaprm * Symptom: Banknet Release 23.Q2 Functional Enhancements * Problem: None * Fix: The interface has been modified in support for the * below requirements: * AN 6568 - Introducing the Merchant Payment Gateway ID * for Authorization Transactions. * - Replaced the user field at the end of the structure * for DE 48, SE 37 (adnl-mrch-data-sub-fld-37) with a * structure to support DE 48, SE 37, subfield 05. * AN 6572 - Adding a Data Field to Support the Visa Secure * Credential Framework * - Replaced the reserved byte at the end of the * structure for DE 48, SE 78 * ( visa-pmnt-srvcs-sub-fld-78 ) with a field to * support DE 48, SE 78, subfield 6 * - Added a redefinition of field AUTH-SYS-ADV-DAT-TIM * to hold data specific to Visa transactions. * AN 6787 - Introducing Digital Authentication Indicators * - Added code to support for new fields DE 104 SE 004 * SF 002, DE 104 SE 005 SF 001 and DE 104 SE 005 * SF 002. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, * PSTKNID, SUBTPTBL * OK60LIB : OKLIBTS * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run MAKE. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #PDM-004334 #ADD 0115791x SEM 08 mrch-pmnt-gtwy-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(11). #DELETE 0115791y SEM #REPLACE 0115792U SEM 08 tkn-resp-info pic x(1). #ADD 01411807 SEM 06 dgtl-srvc-prvd-id2. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(5). 04 dgtl-authn-data. 06 tag pic 9(3). 06 lgth pic 9(3). 06 crdhldr-vrfy. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(5). 06 authn-factrs. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(5). #ADD 02760k05 SAF-BNET 02 visa redefines auth-sys-adv-dat-tim. 04 pmnt-srvc-inds pic x(6). 04 rsrvd pic x(4). #ENDSCN = SW0R062 !#CMP2.28 02/23/23 BNETG 60135FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60135 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60135 * ******************************************************************************** #SCN = SW0R063 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x000260X ! 23FEB2023 jayaprm ! Symptom: Banknet Release 23.Q2 Functional Enhancements ! Problem: None ! Fix: The interface has been modified in support for the ! below requirements: ! AN 6568 - Introducing the Merchant Payment Gateway ID ! for Authorization Transactions. ! - Sourced in suppl^mrch^data^tkn from BASRC_BADDLTAL. ! AN 6779 - Revising Transaction Type Identifier for ! Purchase Repayments ! - Added the define purch^repmnt^sub^d ! AN 6787 - Introducing Digital Authentication Indicators ! - Source in dgtl^pgm^tkn from BASRC_BADDLTAL. ! Case #03472225 - MasterCard foreign ATM fee is not ! calculating the correct fee amount ! - Sourced in hiswutil^adjust^amt^expnt from ! BASRC_HISWUTLE ! Case #03489300 - MC certification - ATC update ! - Added the define atc^update^sub^d ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID, SUBTPTBL ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #PDM-004334 #ADD 0002620w ?nolist, source =basrc_baddltal( ? dgtl^pgm^tkn ? genrc^ichg^resp^data^tkn ? ichg^pgm^tkn ? sca^acq^data^tkn ? suppl^mrch^data^tkn ? ) ?list ! dgtl^pgm^tkn ! genrc^ichg^resp^data^tkn ! ichg^pgm^tkn ! sca^acq^data^tkn ! suppl^mrch^data^tkn ! ) #DELETE 0002620x/a000260o #ADD 00176302 define atc^update^sub^d = "C011"#; define purch^repmnt^sub^d = "C016"#; #REPLACE 01366Z0B/01366Z0B OFFSET 0 ? hiswtkn_add_orig_crncy_60, ? hiswutil^adjust^amt^expnt ) #REPLACE 01366Z0H/01366Z0H OFFSET 0 ! hiswtkn_add_orig_crncy_60, ! ! hiswutil^adjust^amt^expnt ) #ENDSCN = SW0R063 !#CMP2.28 02/23/23 BNETLIBS6343 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6343 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6343 * ******************************************************************************** #SCN = SW0R064 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6343 #NEWVERSION = 6344 #ADD 11002q0D ! 23FEB2023 jayaprm ! Symptom: Banknet Release 23.Q2 Functional Enhancements ! Problem: None ! Fix: The interface has been modified in support for the ! below requirements: ! AN 6568 - Introducing the Merchant Payment Gateway ID ! for Authorization Transactions. ! AN 6572 - Adding a Data Field to Support the Visa Secure ! Credential Framework ! AN 6779 - Revising Transaction Type Identifier for ! Purchase Repayments ! AN 6787 - Introducing Digital Authentication Indicators ! AN 7090 - Updating the Mastercard Identity Check ! Program ! AN 2921 - Dual and Single Message Authorization Best ! Practices and Data Element 39 Response Codes ! Case #03472225 - MasterCard foreign ATM fee is not ! calculating the correct fee amount ! Case #03489300 - MC certification - ATC update ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^resp^cde^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^fee^to^pstm^fee ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! util^collapse^sem ! util^expand^sem ! util^swi^tkn^init ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID, SUBTPTBL ! OK60LIB : OKLIBTS ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #PDM-004334 #ADD 13107 SUB^LOG^ERROR if found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = atc^update^sub^d then begin ! ATC update transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "6" ); end; #ADD 13340 SUB^LOG^ERROR if found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = atc^update^sub^d then begin ! ATC update transaction movd ( sem.ntl^pos^data.cond^cde.byte[ 6 ], "6" ); end else #ADD 14563 PSTM^FRMT^0210^TO^XRESP int .pos^data3^tkn( pos^data3^tkn^def ); int pos^data3^tkn^lgth; #ADD 14917k00 PSTM^FRMT^0210^TO^XRESP if not pos^approved^d( pstm ) and sem.pos^entry^mde = credential^on^file^entry^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then #DELETE 14917k01 PSTM^FRMT^0210^TO^XRESP #ADD 15084 PSTM^FRMT^0210^TO^XRESP movd( tkn^id, pos^data3^tkn^id^d ); if hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^tkn, pos^data3^tkn^lgth ) then begin if not pos^approved^d( pstm ) then begin case pos^data3^tkn.resp^cde^cat of begin "1" -> begin set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "01" ); end; "2" -> begin set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "02" ); end; "3" -> begin set^addl^data^d( mrch^advc^cde^sub^fld^84 .tag^data, "03" ); end; otherwise -> begin ! ! Do nothing. ! end; end; ! of case ! end; ! of if ! end; ! of if hiswtkn^get^tkn( pstm, #REPLACE 18554M01 PSTM^FRMT^RESP^CDE^TO^SEM "058",! Declined Card Status ! "05",! Do not Honor ! #REPLACE 18557 PSTM^FRMT^RESP^CDE^TO^SEM "059",! Restricted Card ! "57",! Tran not supp/permit ! #REPLACE 18561 PSTM^FRMT^RESP^CDE^TO^SEM "061",! No PBF ! "*7",! A - 14, P - 78 ! #REPLACE 18565 PSTM^FRMT^RESP^CDE^TO^SEM "063",! Invalid Auth Type ! "05",! Do not Honor ! #ADD 18576M01 PSTM^FRMT^RESP^CDE^TO^SEM "071",! Invalid Routing to Auth ! "05",! Do not Honor ! #REPLACE 18579 PSTM^FRMT^RESP^CDE^TO^SEM "073",! Invalid Service Dest ! "05",! Do not Honor ! #ADD 18588 PSTM^FRMT^RESP^CDE^TO^SEM "079",! Refund Max reached ! "13",! Invalid Amount ! "080",! Offline Refund Max reach! "13",! Invalid Amount ! "081",! Max Credit/Refund reach ! "13",! Invalid Amount ! #DELETE 18589 /18591 PSTM^FRMT^RESP^CDE^TO^SEM #REPLACE 18593 PSTM^FRMT^RESP^CDE^TO^SEM "083",! Max Refund Credit reach ! "13",! Invalid Amount ! #REPLACE 18606 PSTM^FRMT^RESP^CDE^TO^SEM "093",! Delinquent ! "62",! Restricted card ! #REPLACE 18615 PSTM^FRMT^RESP^CDE^TO^SEM "099",! bad PBF ! "62",! Restricted card ! #REPLACE 18634 PSTM^FRMT^RESP^CDE^TO^SEM "122",! Unable to Validate PIN ! "86",! Cannot Validate PIN ! #REPLACE 18640 PSTM^FRMT^RESP^CDE^TO^SEM "150",! Invalid Merchant ! "*3",! A - 57, P - 03 ! #REPLACE 18657 PSTM^FRMT^RESP^CDE^TO^SEM "251",! Purchase w/cash back-nsf! "61",! Exceeds wdl limits ! #ADD 20418 PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, "1" ); #ADD 20433 PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, "2" ); #ADD 20957L02 PSTM^FRMT^SEM^ADDL^DATA ! and DE48 SE77 to "P10", on purchase repayment transactions. ! #DELETE 20957L03/20957L04 PSTM^FRMT^SEM^ADDL^DATA #ADD 20957L06 PSTM^FRMT^SEM^ADDL^DATA ( found^txn^sub^tkn and txn^subtyp^tkn.txn^subtyp = purch^repmnt^sub^d ) then #DELETE 20957L07/20957L0A PSTM^FRMT^SEM^ADDL^DATA #REPLACE 20957L0D PSTM^FRMT^SEM^ADDL^DATA ! Purchase repayment ! #DELETE 20957L0I PSTM^FRMT^SEM^ADDL^DATA #ADD 20957L0o PSTM^FRMT^SEM^ADDL^DATA if util^stf^get( stf ) then #DELETE 20957L0p/20957L0q PSTM^FRMT^SEM^ADDL^DATA #ADD 24542 SEM^FRMT^FEE^TO^PSTM^FEE if not hiswutil^adjust^amt^expnt( sem.tran^crncy^cde, sem.iss^crncy^cde, temp^tran^fee ) then begin temp^tran^fee := 0f; end; #REPLACE 26731 SEM^FRMT^RESP^CDE^TO^PSTM "62",! Restricted card ! "089",! Inactive or closed ! #REPLACE 26736 SEM^FRMT^RESP^CDE^TO^PSTM "71",! PIN not changed ! "054",! No Security box ! #REPLACE 26758 SEM^FRMT^RESP^CDE^TO^PSTM "92",! Unable to route transaction ! "074",! Unable to process ! #REPLACE 27712 SEM^FRMT^XRESP^TO^PSTM^0210 string err^flg := " "; #ADD 27924h1k SEM^FRMT^XRESP^TO^PSTM^0210 move( rqst.addl^data.info.visa^pmnt^srvcs^sub^fld^78. tkn^resp^info, sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. tkn^resp^info ); #ADD 27924h1n SEM^FRMT^XRESP^TO^PSTM^0210 move( sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78, rqst.addl^data.info.visa^pmnt^srvcs^sub^fld^78 ); #DELETE 27924h1o/27924h1r SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 27999 SEM^FRMT^XRESP^TO^PSTM^0210 movd( card^vrfy^flg, "C" ); #ADD 28160 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.pos^entry^mde = credential^on^file^entry^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then begin movd( err^flg, "1" ); end; #DELETE 28161 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28167 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.pos^entry^mde = credential^on^file^entry^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then begin movd( err^flg, "2" ); end; #DELETE 28168 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28174 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.pos^entry^mde = credential^on^file^entry^d and sem.ntl^pos^data.cond^cde.byte[ 6 ] = "4" then begin movd( err^flg, "3" ); end; #DELETE 28175 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 28363 /28392 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28418 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if tag = "87" ! #DELETE 28419 /28437 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 28441 /28449 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28500 SEM^FRMT^XRESP^TO^PSTM^0210 end; if err^flg <> " "then begin #ADD 28511g1A SEM^FRMT^XRESP^TO^PSTM^0210 end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84.tag = "84" then begin ! ! ! Map the Merchant Advice Code to the POS-Data3 token. ! ! ! if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "01" then begin movd( pos^data3^tkn.resp^cde^cat, "1" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "02" then begin movd( pos^data3^tkn.resp^cde^cat, "2" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "03" then begin movd( pos^data3^tkn.resp^cde^cat, "3" ); end; #ADD 28511g1C SEM^FRMT^XRESP^TO^PSTM^0210 if pos^data3^tkn.resp^cde^cat <> [ $len( pos^data3^tkn ) * [" "] ] then #DELETE 28511g1D/28511g1E SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 30971 SEM^FRMT^XRQST^TO^PSTM^0200 struct .dgtl^pgm^tkn( dgtl^pgm^tkn^def ); #ADD 31004 SEM^FRMT^XRQST^TO^PSTM^0200 struct .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 31097 SEM^FRMT^XRQST^TO^PSTM^0200 int .suppl^mrch^data^get^tkn( suppl^mrch^data^tkn^def ); #ADD 31431 SEM^FRMT^XRQST^TO^PSTM^0200 sem^atc^update^d( sem ) or sem.addl^data.info. pmnt^txn^typ^ind^sub^fld^77. tag^data = "P10" or #ADD 31458 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^atc^update^d( sem ) then begin movd( txn^subtyp^tkn.txn^subtyp, atc^update^sub^d ); end else if sem.addl^data.info.pmnt^txn^typ^ind^sub^fld^77.tag^data = "P10" then begin movd( txn^subtyp^tkn.txn^subtyp, purch^repmnt^sub^d ); end else #DELETE 31865L00/31865L0D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32496g03 SEM^FRMT^XRQST^TO^PSTM^0200 sem.dgtl^pmnt^data.adnl^dgtl^data.dgtl^srvc^prvd^id2. tag = "002" or #ADD 32626g0W SEM^FRMT^XRQST^TO^PSTM^0200 if sem.dgtl^pmnt^data.adnl^dgtl^data.dgtl^srvc^prvd^id2. tag = "002" then begin ! ! Digital Service Provider ID 2 ! movd( iss^tknztn^data^tkn.info.byte[ idx ], "D2" ); idx := idx + 2; movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id2.lgth.byte[ 1 ], 2 ); idx := idx + 2; call ascii^integer^( sem.dgtl^pmnt^data. adnl^dgtl^data. dgtl^srvc^prvd^id2.lgth, lgth ); movl( iss^tknztn^data^tkn.info.byte[ idx ], sem.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id2.tag^data, lgth ); idx := idx + lgth; end; ! of if dgtl^srvc^prvd^id.tag = "002" #ADD 32714 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.adnl^mrch^data^sub^fld^37. pmnt^facilitator^id.tag = "01" or sem.addl^data.info.adnl^mrch^data^sub^fld^37. idpnt^sales^org^id.tag = "02" or sem.addl^data.info.adnl^mrch^data^sub^fld^37. sub^mrch^id.tag = "03" or sem.addl^data.info.adnl^mrch^data^sub^fld^37. cntry^cde.tag = "04" then #ADD 32785 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag = "05" then begin tkn^id ':=' suppl^mrch^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @suppl^mrch^data^get^tkn, tkn^lgth ) then begin move( suppl^mrch^data^get^tkn.mrch^pmnt^gtwy^id, sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data ); move( suppl^mrch^data^get^tkn.mrch^id, sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data ); end else begin ! ! Add Supplementary Merchant Data Token ("FG") ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, suppl^mrch^data^tkn ); move( suppl^mrch^data^tkn.mrch^pmnt^gtwy^id, sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data ); move( suppl^mrch^data^tkn.mrch^id, sem.addl^data.info. mc^asgn^id^sub^fld^32.tag^data ); tkn^add^lgth := $len( suppl^mrch^data^tkn ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, suppl^mrch^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1823, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add error encountered ! log a message. ! begin call log^message^( 1824, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1824 ); end; end; ! of if tkn^result end; ! of if hiswtkn^get^tkn( pstm, end; #DELETE 34960L00/34960L0C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35306 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66 = "66" and sem.addl^data.info.authn^data^sub^fld^66.ds^txn^id.tag^data <> [ $len( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id.tag^data ) * [ " " ] ] then #DELETE 35307 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35739 SEM^FRMT^XRQST^TO^PSTM^0200 if dgtl^pmnt^data^bit^d and sem.dgtl^pmnt^data.dgtl^authn^data.tag = "005" then begin lgth := 0; if sem.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.tag = "001" then begin call ascii^integer^( sem.dgtl^pmnt^data. dgtl^authn^data.crdhldr^vrfy.lgth, temp^lgth ); temp^lgth := temp^lgth + $len( sem.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.tag ) + $len( sem.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.lgth ); movl( dgtl^pgm^tkn.mc.byte[ lgth ], sem.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.tag, temp^lgth ); lgth := lgth + temp^lgth; end; if sem.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.tag = "002" then begin call ascii^integer^( sem.dgtl^pmnt^data. dgtl^authn^data.authn^factrs.lgth, temp^lgth ); temp^lgth := temp^lgth + $len( sem.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.tag ) + $len( sem.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.lgth ); movl( dgtl^pgm^tkn.mc.byte[ lgth ], sem.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.tag, temp^lgth ); lgth := lgth + temp^lgth; end; if lgth > 0 then begin tkn^id ':=' dgtl^pgm^tkn^id^d; movd( dgtl^pgm^tkn.frmt^cde, "01" ); integer^ascii^( dgtl^pgm^tkn.lgth, lgth ); tkn^add^lgth := $offset( dgtl^pgm^tkn.mc ) + lgth; ! ! The token must end on a word boundary. ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dgtl^pgm^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1825, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! If any other token add error encountered ! log a message. ! begin call log^message^( 1826, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1826 ); end; end; ! of if tkn^result end; ! of if lgth > 0 end; ! of if dgtl^pmnt^data^bit^d and #ADD 43374H0S TRACE^SEM ! ! ! Move Subfield 5 - Merchant Payment ! ! Gateway ID ! ! ! if hdr.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag = "05" then begin call ascii^integer( hdr.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 05 ! #ADD 43945g0W TRACE^SEM ! ! ! Move Subfield 002 - ! ! Digital Service Provider ID 2 ! ! ! if hdr.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id2.tag = "002" then begin call ascii^integer( hdr.dgtl^pmnt^data. adnl^dgtl^data. dgtl^srvc^prvd^id2.lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.adnl^dgtl^data. dgtl^srvc^prvd^id2.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 002 #ADD 43945g0a TRACE^SEM if hdr.dgtl^pmnt^data.dgtl^authn^data. tag = "005" then begin movl( ptr, hdr.dgtl^pmnt^data.dgtl^authn^data.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! ! Move Subfield 001 - Cardholder Verification ! ! ! if hdr.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.tag = "001" then begin call ascii^integer( hdr.dgtl^pmnt^data. dgtl^authn^data.crdhldr^vrfy. lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.dgtl^authn^data. crdhldr^vrfy.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 001 ! ! ! ! Move Subfield 002 – Authentication Factors ! ! ! if hdr.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.tag = "002" then begin call ascii^integer( hdr.dgtl^pmnt^data. dgtl^authn^data.authn^factrs. lgth, 3, tag^length ); movl( ptr, hdr.dgtl^pmnt^data.dgtl^authn^data. authn^factrs.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 002 ! end; ! of tag = "005" ! #ADD 47784H0C TRACE^SEM ! ! ! Move Subfield 5 - Merchant Payment ! ! Gateway ID ! ! ! if sub^ptr = "05" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag ); end else #ADD 48004g0V TRACE^SEM if ptr[ length ] = "002" then begin movl( sem^ptr.dgtl^pmnt^data. adnl^dgtl^data. dgtl^srvc^prvd^id2. tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else #ADD 48004g0j TRACE^SEM length := length + sub^lgth + 6; #DELETE 48004g0k TRACE^SEM #ADD 48004g0n TRACE^SEM else if ptr[ length ] = "005" then begin movl( sem^ptr.dgtl^pmnt^data. dgtl^authn^data.tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.dgtl^pmnt^data. dgtl^authn^data. crdhldr^vrfy.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.dgtl^pmnt^data. dgtl^authn^data. authn^factrs.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + sub^lgth + 6; end; ! of while ! end #ADD 58210 UTIL^SWI^TKN^INIT movl( bnet^tkn^buf.visa.pmnt^srvc^inds, sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind, $len( bnet^tkn^buf.visa.pmnt^srvc^inds ) ); #ENDSCN = SW0R064 !#CMP2.28 03/03/23 BNETLIBS6344 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6344 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6344 * ******************************************************************************** #SCN = SW0R087 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6344 #NEWVERSION = 6345 #ADD 11002r0h ! 01MAR2023 jayaprm ! Symptom: Issue with DE 122 ! Problem: DE 122 is populated in the response messages but as ! per the specification DE 122 should not be present ! in the response messages. ! Fix: Code has been fixed to not to populate DE 122 in the ! response messages. ! Procs Modified: pstm^frmt^0210^to^xresp ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^sem^xack ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETLIBS ! Reference: Case #3511935 #ADD 14625 PSTM^FRMT^0210^TO^XRESP addl^rec^data^d := 0; #ADD 27474 SEM^FRMT^XADV^TO^SEM^XACK addl^rec^data^d := 0; #ADD 36502 SEM^FRMT^XRQST^TO^SEM^XRESP addl^rec^data^d := 0; #ADD 37608 SEM^FRMT^XRVSL^TO^SEM^XACK addl^rec^data^d := 0; #ADD 37638 SEM^FRMT^XRVSL^TO^SEM^XACK addl^rec^data^d := 0; #ENDSCN = SW0R087 !#CMP2.28 03/03/23 BNETLIBS6345 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6345 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6345 * ******************************************************************************** #SCN = SW0R091 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6345 #NEWVERSION = 6346 #ADD 11002s0G ! 03MAR2023 wielerk ! Symptom: Interface moves too much data in DE-122.SE-01.SF-04. ! Problem: In the POS Term Owner token ( FT ) the customer service ! phone number is carried as 20 bytes. The field in the ! SEM only allows for 16 bytes and 20 bytes of data ! causes a format error in the MAS simulator. ! Fix: Modified code to move the lesser of the length of the ! data in the token field and the byte length of ! DE-122.SE-01.SF-04. ! Modified code to move the lesser of the length of the ! data in the token field and the byte length of ! DE-122.SE-01.SF-05. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3511709. #ADD 14106o62 SUB^LOG^ERROR if lgth > $len( sem.addl^rec^data.accpt. cust^srvc^phone.tag^data ) then begin lgth := $len( sem.addl^rec^data.accpt. cust^srvc^phone.tag^data ); end; #DELETE 14106o63 SUB^LOG^ERROR #ADD 14106o6g SUB^LOG^ERROR if lgth > $len( sem.addl^rec^data.accpt.phone. tag^data ) then begin lgth := $len( sem.addl^rec^data.accpt.phone. tag^data ); end; #DELETE 14106o6h SUB^LOG^ERROR #ENDSCN = SW0R091 !#CMP2.28 03/17/23 BNETLIBS6346 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6346 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6346 * ******************************************************************************** #SCN = SW0R097 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6346 #NEWVERSION = 6347 #ADD 11002t0I ! 17MAR2023 wielerk ! Symptom: Interface does not set DE-48.SE-22.SF-06 in reversals ! and DE-122 was sent with a zero length in a reversal. ! Problem: The interface was not saving DE-48.SE-22.SF-06 and ! DE-122 from the request to the ILF. There was no ! formatting of DE-48.SE-22.SF-06 for reversals. ! Fix: Modified code to save request data to the ILF and ! add formatting for DE-48.SE-22.SF-06 for reversals. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! util^frmt^addl^data^to^xrvsl ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3516098. #REPLACE 27863 SEM^FRMT^XRESP^TO^PSTM^0210 move ( sem.addl^rec^data, rqst.addl^rec^data ); #REPLACE 27955 /27955 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 move( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq, rqst.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq ); #REPLACE 49083Y04/49083Y04 OFFSET 0 UTIL^FRMT^ADDL^DATA^TO^XRVSL if sem.addl^data.info.mrch^inds^sub^fld^22.tag = "22" then begin if sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind.tag = "05" then begin ! ! Subfield 05 required ! move( rvsl.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind, sem.addl^data.info.mrch^inds^sub^fld^22.cit^mit^ind ); tag^lgth := $len( sem.addl^data.info.mrch^inds^sub^fld^22. cit^mit^ind ); move( rvsl.addl^data.info.mrch^inds^sub^fld^22.tag, sem.addl^data.info.mrch^inds^sub^fld^22.tag ); end; if sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq.tag = "06" then begin ! ! Subfield 06 required ! move( rvsl.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq, sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq ); tag^lgth := tag^lgth + $len( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq ); move( rvsl.addl^data.info.mrch^inds^sub^fld^22.tag, sem.addl^data.info.mrch^inds^sub^fld^22.tag ); end; if rvsl.addl^data.info.mrch^inds^sub^fld^22.tag = "22" then begin call integer^ascii^( rvsl.addl^data.info. mrch^inds^sub^fld^22.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; end; #DELETE 49083Y05/49083Y0Q UTIL^FRMT^ADDL^DATA^TO^XRVSL #REPLACE 49098 UTIL^FRMT^ADDL^DATA^TO^XRVSL ! Subelement 32-MasterCard Assigned ID ! #ENDSCN = SW0R097 !#CMP2.28 03/30/23 BNETLIBS6347 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6347 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6347 * ******************************************************************************** #SCN = SW0R112 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6347 #NEWVERSION = 6348 #ADD 11002u0F ! 30MAR2023 wielerk ! Symptom: Interface does not set DE-48.SE-22.SF-06 in reversals. ! Problem: The interface was not saving DE-48.SE-22.SF-06 if ! DE-48.SE-22 if it wasn't returned in a response. ! Fix: Modified code to save request data for ! DE-48.SE-22.SF-06 to the ILF if not returned in a 0110. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3521063. #REPLACE 27936 /27936 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.mrch^inds^sub^fld^22.tag = " " then begin move( sem.addl^data.info.mrch^inds^sub^fld^22, rqst.addl^data.info.mrch^inds^sub^fld^22 ); end else #ENDSCN = SW0R112 !#CMP2.28 04/12/23 BNETLIBS6348 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6348 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6348 * ******************************************************************************** #SCN = SW0R123 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6348 #NEWVERSION = 6349 #ADD 11002v0C ! 12APR2023 wielerk ! Symptom: Interface is not setting the PS50 error flag correctly. ! Problem: The interface was editing the wrong byte of DE-61 to ! identify a recurring/MIT transaction. ! Fix: Modified code to use sem.ntl^pos^data.cond^cde.byte[3] ! to identify a recurring/MIT transaction. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3526642. #REPLACE 28160r02 SEM^FRMT^XRESP^TO^PSTM^0210 sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then #REPLACE 28167r02 SEM^FRMT^XRESP^TO^PSTM^0210 sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then #REPLACE 28174r02 SEM^FRMT^XRESP^TO^PSTM^0210 sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" then #ENDSCN = SW0R123 !#CMP2.28 04/13/23 BNETS 6169 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6169 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6169 * ******************************************************************************** #SCN = SW0R127 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6169 #NEWVERSION = 6170 #ADD 03821^0P ! 14APR2023 wielerk ! Symptom: Interface does not send DE-95 in a partially approved ! unmatched reversal. ! Problem: The interface was not re-setting the PSTM tran code ! from purchase to adjustment for amount formatting. ! Fix: Modified code to re-set PSTM tran code to "21" ! to correct amount formatting for the reversal. ! Proc Modified: pstm^send^unmatchd^xrvsl^pos ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3525279. #ADD 17066f1C PSTM^SEND^UNMATCHD^XRVSL^POS if pos^purchase^d( pstm ) and pstm.tran.amt^2 > 0f then begin ! ! adjustment needs tran code set back from purchase ! movd( pstm.tran.tran^cde, "21" ); end; #ENDSCN = SW0R127 !#CMP2.28 04/19/23 BNETG 60136FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60136 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60136 * ******************************************************************************** #SCN = SW0R129 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y000260W ! 18APR2023 jayaprm ! Symptom: BNET partial reversal of incremental auth declined ! with RC 13 ! Problem: The define used to identify Incremental Auth have check ! on message type "0100" cause reversal of Incremental ! Auth to be declined with response code RC 13. ! Fix: Modified sem^incr^auth^d to have check on the message ! type not equal "0120" instead of equal to "0100". ! Dependency: Apply fix to: ! SW60BNET: BNETG ! Run Make. ! Reference: Case #3527496. #ADD L0023301 ( x.typ <> sem^auth^advice^d and #DELETE V0023300/V0023303 #ENDSCN = SW0R129 !#CMP2.28 04/19/23 BNETLIBS6349 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6349 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6349 * ******************************************************************************** #SCN = SW0R130 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6349 #NEWVERSION = 6350 #ADD 11002w0C ! 19APR2023 wielerk ! Symptom: Interface declines refund transaction for MCC 7995. ! Problem: The interface was including refund transactions in a ! 3DS authenticated requirement that only applies to ! Gambling authorizations. ! Fix: Modified code to exclude return transactions from the ! 3DS requirement. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3525181. #REPLACE 13883 SUB^LOG^ERROR sem.proc^cde <> sem^return^d and #ENDSCN = SW0R130 !#CMP2.28 04/26/23 BNETS 6170 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6170 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6170 * ******************************************************************************** #SCN = SW0R134 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6170 #NEWVERSION = 6171 #ADD 03821`0D ! 26APR2023 wielerk ! Symptom: Interface does forward a log only message to Base24 ! when processing an advice response. ! Problem: The interface was not re-setting DE-60 in the struct ! passed to sem^advice^response^pos. ! Fix: Modified code to use a pos preauth edit instead of the ! edit for DE-60. ! Proc Modified: sem^advice^response^pos ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3528716. #ADD 18836 SEM^ADVICE^RESPONSE if advice^cde^bit^d then ! P-60 ! begin move( advc.advice^cde, sem.advice^cde ); end; #REPLACE 19205 SEM^ADVICE^RESPONSE^POS pos^preauth^comp^d( pstm ) and #ENDSCN = SW0R134 !#CMP2.28 05/04/23 BNETDDLS6086 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6086 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6086 * ******************************************************************************** #SCN = SW0R156 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6086 #NEWVERSION = 6087 #ADD A002620Z * 05MAY2023 ChristL * Symptom: Banknet 23.Q2 Phase 2 Functional Enhancements * Problem: None * Fix: The interface has been modified in support for the * below requirements: * AN 6794 - Enhancing Mastercard Fleet Program * Capabilities. * - Added a field for DE 106 (945 bytes) to the area * of the SEM not logged to the ILF. * AN 6987 - Expansion of Authorization and Clearing Data * to Support France National Data. * - For DE 112, moved the definition for SE 020 to the * beginning of the HGMINS structure. Also, added a * new redefinition to support support intra-country * data for domestic transactions performed in * France (SE 020, SE 096, SE 097, SE 098). * AN 7094 - Introducing Subelement to Support * Installments and Recurring Payments. * - Added a new redefinition to support Visa * Installment/Recurring Payment Data in transactions * switched via Mastercard (SE 044). * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : PSTKNCVS, PSTKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run MAKE. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Reference: WO #PDM-004644 #ADD 01411808 SEM * ! * Fleet service data ! * bit map position = 106 ! * EBCDIC in transmission, variable in length ! * ! 02 fleet-srvc-data. 04 lgth pic 9(3). 04 prmpt-data. 06 tag pic 9(3). 06 lgth pic 9(3). 06 item occurs 5 times. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data. 10 cde pic x(3). 10 val pic x(35). 04 spend-cntl-ovrrd-cap-ind. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(1). 04 spend-cntl-ovrrd-items. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(16). 04 fuel-info. 06 tag pic 9(3). 06 lgth pic 9(3). 06 item occurs 3 times. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data. 10 prod-cde pic x(3). 10 unit-price pic x(12). 10 unit-of-meas pic x(1). 10 qty pic x(6). 10 qty-expnt pic x(1). 10 sale-amt pic x(12). 04 non-fuel-info. 06 tag pic 9(3). 06 lgth pic 9(3). 06 item occurs 12 times. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data. 10 prod-cde pic x(3). 10 qty pic x(12). 10 qty-expnt pic x(1). 10 unit-of-meas pic x(12). 10 sale-amt pic x(12). #ADD 01411v06 SEM 06 sub-fld-20. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 crd-accpt-tax-id pic x(20). #DELETE 01411v0G/01411v0K SEM #ADD 0141180R SEM 04 fr redefines info. 06 sub-fld-20. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 crd-accpt-tax-id pic x(20). 06 sub-fld-96. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 transit-offer-id pic x(20). 06 sub-fld-97. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 appl-selct-id pic x(1). 06 sub-fld-98. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 brand-id pic x(2). 06 user-fld-aci pic x(712). #ADD 0141140U SEM 04 visa-mit redefines info. 06 sub-fld-44. 08 tag pic x(3). 08 lgth pic x(3). 08 txn-typ. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(2). 08 recur-pmnt-valid. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(1). 08 max-recur-pmnt-amt. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(12). 08 rgstr-txn-id. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(10). 08 num-of-pmnts. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(2). 08 pmnt-freq. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(2). 08 ttl-instl-amt. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(12). 08 crncy-cde. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(3). 08 instl-intrst-rate. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(4). 08 instl-pmnt-enty. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(1). 08 instl-intrst-chrg. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(1). 08 mbr-def-data. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(20). 08 pmnt-amt-ind. 10 tag pic x(2). 10 lgth pic x(2). 10 tag-data pic x(1). 06 user-fld-aci pic x(650). #ENDSCN = SW0R156 !#CMP2.28 05/04/23 BNETG 60137FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60137 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60137 * ******************************************************************************** #SCN = SW0R157 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z000260D ! 05MAY2023 ChristL ! Symptom: Banknet 23.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: The interface has been modified in support for the ! below requirements: ! AN 6794 - Enhancing Mastercard Fleet Program ! Capabilities. ! - Added a define to identify the bit setting for ! DE 106. ! - Added an entry to sem^bit^map^tbl^g to support ! DE 106 in authorization messages. ! - Sourced in all^hex from aciutils_utilexts. ! - Sourced in the following Tokens, ! fleet^prmpt^data^tkn ( FY ) ! fleet^spend^cntl^tkn ( FZ ). ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : PSTKNCVS, PSTKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #PDM-004644 #ADD 00026N0B ?nolist, source =aciutils_utilexts( ? all^hex ) ?list ! all^hex ) #ADD x000260p ?nolist, source =basrc_baddltal( ? fleet^prmpt^data^tkn ? fleet^spend^cntl^tkn ? ) ?list ! fleet^prmpt^data^tkn ! fleet^spend^cntl^tkn ! ) #ADD d0061202 fleet^srvc^data^bit^d = sbit^map[2].<09> #, !bit 106 ! #ADD 01042 106, 3, sem^field( fleet^srvc^data ), #DELETE 01043 #ENDSCN = SW0R157 !#CMP2.28 05/05/23 BNETLIBS6350 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6350 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6350 * ******************************************************************************** #SCN = SW0R158 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6350 #NEWVERSION = 6351 #ADD 11002x0D ! 05MAY2023 ChristL ! Symptom: Banknet Release 23.Q2 Phase 2 Functional Enhancements ! Problem: None ! Fix: The interface has been modified in support for the ! below requirements: ! AN 6318 - Clarification on the Use of Security Level ! Indicator 247 in Tokenized Merchant-Initiated ! Transactions. ! AN 6794 - Enhancing Mastercard Fleet Program ! Capabilities ! AN 6987 - Expansion of Authorization and Clearing Data ! to Support France National Data ! AN 7090 - Updating the Mastercard Identity Check ! Program ! AN 7094 - Introducing Subelement to Support ! Installments and Recurring Payments ! AN 6022 Cleanup ! Procs Added: pstm^frmt^fleet^data^to^sem ! sem^frmt^fleet^data^to^pstm ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^instl^pmnt^to^sem ! pstm^frmt^natl^data^to^sem ! pstm^frmt^sem^addl^data ! sem^frmt^natl^data^to^pstm ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^sem ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : PSTKNCVS, PSTKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Reference: WO #PDM-004644 #DELETE 12584o0X/12584o0b SUB^LOG^ERROR #DELETE 14230 /14238 SUB^LOG^ERROR #ADD 14248 SUB^LOG^ERROR if base24^rel^g >= 5 and pstm^frmt^fleet^data^to^sem( pstm, sem ) then begin ! ! ! Include EMV fleet service data in the message ! ! ! fleet^srvc^data^bit^d := 1; end; #ADD 14373 SUB^LOG^ERROR if base24^rel^g >= 5 and sem.ntl^pos^data.cntry^cde = "356" and visa_tran_g then begin ! ! ! Format data for Visa-branded transactions from India ! ! ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; end else #ADD 14480I0D SUB^LOG^ERROR end else if base24^rel^g >= 5 and sem.ntl^pos^data.cntry^cde = "250" then begin ! ! Format domestic data for transaction performed in France ! if pstm^frmt^natl^data^to^sem( pstm, sem ) then begin adnl^data^ntl^bit^d := 1; end; #ADD 14549 PSTM^FRMT^0210^TO^XRESP int .fleet^spend^cntl^tkn( fleet^spend^cntl^tkn^def ); int fleet^spend^cntl^tkn^lgth := 0; #ADD 14624 PSTM^FRMT^0210^TO^XRESP fleet^srvc^data^bit^d := 0; #ADD 15414 PSTM^FRMT^0210^TO^XRESP if base24^rel^g >= 5 then begin tkn^id ':=' fleet^spend^cntl^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @fleet^spend^cntl^tkn, fleet^spend^cntl^tkn^lgth ) then begin if all^hex( fleet^spend^cntl^tkn.host^spend^cntls, $len( fleet^spend^cntl^tkn. host^spend^cntls ) ) then begin movl( sem.fleet^srvc^data, blanks, $len( sem.fleet^srvc^data ) ); call hexchar^binary( fleet^spend^cntl^tkn.host^spend^cntls, $len( fleet^spend^cntl^tkn.host^spend^cntls ), sem.fleet^srvc^data.spend^cntl^ovrrd^items. tag^data ); lgth := $len( sem.fleet^srvc^data. spend^cntl^ovrrd^items.tag^data ); call integer^ascii^( sem.fleet^srvc^data. spend^cntl^ovrrd^items.lgth, lgth ); movd( sem.fleet^srvc^data.spend^cntl^ovrrd^items.tag, "003" ); call integer^ascii^( sem.fleet^srvc^data.lgth, ( lgth + 6 ) ); fleet^srvc^data^bit^d := 1; end; end; ! of if fleet^spend^cntl^tkn end; ! of if base24^rel^g >= 5 then #ADD 15848 PSTM^FRMT^0220^TO^XADV move( orig^sem.fleet^srvc^data, sem.fleet^srvc^data ); #ADD 15920 PSTM^FRMT^0220^TO^XADV if sem.ntl^pos^data.cntry^cde = "250" and ( sem.adnl^data^natl.fr.sub^fld^20.tag = "020" or sem.adnl^data^natl.fr.sub^fld^96.tag = "096" or sem.adnl^data^natl.fr.sub^fld^97.tag = "097" or sem.adnl^data^natl.fr.sub^fld^98.tag = "098" ) then begin adnl^data^ntl^bit^d := 1; ! S-112 ! end; #ADD 16176 PSTM^FRMT^0420^TO^ACQ^XRVSL fleet^srvc^data^bit^d := 0; ! S-106 ! #ADD 16184 PSTM^FRMT^0420^TO^ACQ^XRVSL if pstm.rte.srv = visa_card_d or ( sem.pan.num = "4" and sem.pan.lgth >= "13" and sem.pan.lgth <= "19" ) then begin visa_tran_g := true; end; #ADD 16219I06 PSTM^FRMT^0420^TO^ACQ^XRVSL if sem.ntl^pos^data.cntry^cde = "250" then begin adnl^data^ntl^bit^d := 0 end else if sem.ntl^pos^data.cntry^cde = "356" and visa_tran_g and adnl^data^ntl^bit^d then begin ! ! ! Rebuild DE 112 because it is not logged to the ILF. ! ! ! if pstm^frmt^instl^pmnt^to^sem( pstm, sem ) then begin ! ! ! Nothing to do, yet ! ! ! end; end else #ADD 17418 PSTM^FRMT^FEE^TO^SEM^FEE ?section pstm^frmt^fleet^data^to^sem ?page "pstm^frmt^fleet^data^to^sem" !#####################################################################! !# #! !# pstm^frmt^fleet^data^to^sem #! !# #! !# This proc formats fleet service data from PSTM tokens Fleet #! !# Prompt data token( FY ) and Fleet Spend Control token (FZ) and #! !# Purchase Token ( C2 ) to DE 106. #! !# #! !# INPUT PARAMETERS: #! !# PSTM - Pointer to BASE24 internal POS message #! !# SEM - Pointer to Banknet external message #! !# #! !# OUTPUT PARAMETERS: #! !# SEM - Pointer to Banknet external message #! !# #! !# RETURN: #! !# True - PROC completed with no errors. #! !# False - PROC encountered errors #! !#####################################################################! int proc pstm^frmt^fleet^data^to^sem( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin int .fleet^prmpt^data^tkn( fleet^prmpt^data^tkn^def ); int .fleet^spend^cntl^tkn( fleet^spend^cntl^tkn^def ); int found^fleet^prmpt^data^tkn := false; int found^fleet^spend^cntl^tkn := false; int found^purchase^tkn := false; int i; int j; int k; int f^item^found := 0; int f^sub^lgth := 0; int item^lgth := 0; int lgth := 0; int nf^item^found := 0; int nf^sub^lgth := 0; int num^items := 0; int sub^lgth := 0; int tkn^lgth := 0; int .purchase^tkn( purchase^tkn^def ); string .tkn^id[ 0:1 ]; if base24^rel^g >= 5 then begin tkn^id ':=' fleet^prmpt^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @fleet^prmpt^data^tkn, ! FY ! tkn^lgth ) and fleet^prmpt^data^tkn.crd^typ = "D" then begin found^fleet^prmpt^data^tkn := true; end; tkn^id ':=' fleet^spend^cntl^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @fleet^spend^cntl^tkn, ! FZ ! tkn^lgth ) and sem.typ = sem^auth^request^d then begin found^fleet^spend^cntl^tkn := true; end; tkn^id ':=' purchase^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @purchase^tkn, ! C2 ! tkn^lgth ) and purchase^tkn.purchase.crd^typ = "D" then begin found^purchase^tkn := true; end; end else begin return false; end; if not found^fleet^prmpt^data^tkn and not found^fleet^spend^cntl^tkn and not found^purchase^tkn then begin return false; end; if found^fleet^prmpt^data^tkn and fleet^prmpt^data^tkn.prmpt^data <> [ $len( fleet^prmpt^data^tkn.prmpt^data ) * [ " " ] ] then begin sub^lgth := 0; tkn^lgth := 0; call ascii^integer^( fleet^prmpt^data^tkn.lgth, tkn^lgth ); while sub^lgth < tkn^lgth do begin if fleet^prmpt^data^tkn.prmpt^data.byte[ sub^lgth ] = "001" then begin call ascii^integer( fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth + 3 ], 3, item^lgth ); movl( sem.fleet^srvc^data.prmpt^data. item[ 0 ].tag, fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth ], ( item^lgth + 6 ) ); end else if fleet^prmpt^data^tkn.prmpt^data.byte[ sub^lgth ] = "002" then begin call ascii^integer( fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth + 3 ], 3, item^lgth ); movl( sem.fleet^srvc^data.prmpt^data. item[ 1 ].tag, fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth ], ( item^lgth + 6 ) ); end else if fleet^prmpt^data^tkn.prmpt^data.byte[ sub^lgth ] = "003" then begin call ascii^integer( fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth + 3 ], 3, item^lgth ); movl( sem.fleet^srvc^data.prmpt^data. item[ 2 ].tag, fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth ], ( item^lgth + 6 ) ); end else if fleet^prmpt^data^tkn.prmpt^data.byte[ sub^lgth ] = "004" then begin call ascii^integer( fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth + 3 ], 3, item^lgth ); movl( sem.fleet^srvc^data.prmpt^data. item[ 3 ].tag, fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth ], ( item^lgth + 6 ) ); end else if fleet^prmpt^data^tkn.prmpt^data.byte[ sub^lgth ] = "005" then begin call ascii^integer( fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth + 3 ], 3, item^lgth ); movl( sem.fleet^srvc^data.prmpt^data. item[ 4 ].tag, fleet^prmpt^data^tkn.prmpt^data. byte[ sub^lgth ], ( item^lgth + 6 ) ); end; sub^lgth := sub^lgth + item^lgth + 6; end; ! of while sub^lgth < tkn^lgth do call integer^ascii^( sem.fleet^srvc^data.prmpt^data.lgth, sub^lgth ); movd( sem.fleet^srvc^data.prmpt^data.tag, "001" ); lgth := lgth + sub^lgth + 6; end; ! if found^fleet^prmpt^data^tkn and if found^fleet^spend^cntl^tkn and fleet^spend^cntl^tkn.spend^cntl^cap.host <> " " then begin sub^lgth := 0; movl( sem.fleet^srvc^data.spend^cntl^ovrrd^cap^ind.tag^data, fleet^spend^cntl^tkn.spend^cntl^cap.host, $len( fleet^spend^cntl^tkn.spend^cntl^cap.host ) ); sub^lgth := $len( sem.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.tag^data ); call integer^ascii^( sem.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.lgth, sub^lgth ); movd( sem.fleet^srvc^data.spend^cntl^ovrrd^cap^ind.tag, "002" ); lgth := lgth + sub^lgth + 6; end; if found^purchase^tkn then begin j := 0; k := 0; f^item^found := 0; nf^item^found := 0; f^sub^lgth := 0; nf^sub^lgth := 0; call ascii^integer^( purchase^tkn.mc^emv^fleet^data. num^items, num^items ); for i := 0 to ( num^items - 1 ) do begin if ( purchase^tkn.mc^emv^fleet^data.item[ i ].fuel.ind = "F" ) and f^item^found < 3 then begin f^item^found := f^item^found + 1; item^lgth := $len( sem.fleet^srvc^data.fuel^info. item[ j ].tag^data ); call integer^ascii( sem.fleet^srvc^data.fuel^info. item[ j ].tag, 3, f^item^found ); call integer^ascii( sem.fleet^srvc^data.fuel^info. item[ j ].lgth, 3, item^lgth ); movl( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.prod^cde, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. prod^cde, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.prod^cde ) ); movl( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.unit^price, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. unit^price, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.unit^price ) ); move( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.unit^of^meas, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. unit^of^meas ); movl( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.qty, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. qty, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.qty ) ); move( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.qty^expnt, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. qty^expnt ); movl( sem.fleet^srvc^data.fuel^info.item[ j ]. tag^data.sale^amt, purchase^tkn.mc^emv^fleet^data.item[ i ].fuel. sale^amt, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.sale^amt ) ); j := f^item^found; f^sub^lgth := f^sub^lgth + item^lgth + 6; end else if ( purchase^tkn.mc^emv^fleet^data.item[ i ].non^fuel. ind = "N" ) and nf^item^found < 12 then begin nf^item^found := nf^item^found + 1; item^lgth := $len( sem.fleet^srvc^data.non^fuel^info. item[ k ].tag^data ); call integer^ascii( sem.fleet^srvc^data. non^fuel^info.item[ k ].tag, 3, nf^item^found ); call integer^ascii( sem.fleet^srvc^data. non^fuel^info.item[ k ].lgth, 3, item^lgth ); movl( sem.fleet^srvc^data.non^fuel^info.item[ k ]. tag^data.prod^cde, purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.prod^cde, $len( purchase^tkn.mc^emv^fleet^data.item [i ]. non^fuel.prod^cde ) ); movl( sem.fleet^srvc^data.non^fuel^info.item[ k ]. tag^data.qty, purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.qty, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.qty ) ); move( sem.fleet^srvc^data.non^fuel^info.item[ k ]. tag^data.qty^expnt, purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.qty^expnt ); move( sem.fleet^srvc^data.non^fuel^info.item[ k ]. tag^data.unit^of^meas, purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.unit^of^meas ); movl( sem.fleet^srvc^data.non^fuel^info.item[ k ]. tag^data.sale^amt, purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.ext^item^amt, $len( purchase^tkn.mc^emv^fleet^data.item[ i ]. non^fuel.ext^item^amt ) ); k := nf^item^found; nf^sub^lgth := nf^sub^lgth + item^lgth + 6; end; ! if ( purchase^tkn.mc^emv end; ! for i := 0 to ( num^items - 1 ) do if f^sub^lgth > 0 then begin call integer^ascii( sem.fleet^srvc^data.fuel^info.lgth, 3, f^sub^lgth ); movd( sem.fleet^srvc^data.fuel^info.tag, "004" ); lgth := lgth + f^sub^lgth + 6; end; if nf^sub^lgth > 0 then begin call integer^ascii( sem.fleet^srvc^data.non^fuel^info.lgth, 3, nf^sub^lgth ); movd( sem.fleet^srvc^data.non^fuel^info.tag, "005" ); lgth := lgth + nf^sub^lgth + 6; end; end; ! if found^purchase^tkn then if lgth > 0 then begin call integer^ascii^( sem.fleet^srvc^data.lgth, lgth ); end else begin return false; end; return true; end;! of pstm^frmt^fleet^data^to^sem #ADD 17468 PSTM^FRMT^INSTL^PMNT^TO^SEM int sub^fld^44^lgth := 0; #ADD 17475 PSTM^FRMT^INSTL^PMNT^TO^SEM if visa_tran_g and sem.ntl^pos^data.cntry^cde = "356" then begin tkn^id ':=' ichg^pgm^tkn^id^d; found^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^tkn, lgth ); if found^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "10" then begin found^instl^data := true; end else begin return false; end; sub^fld^44^lgth := 0; sem.adnl^data^natl.visa^mit.sub^fld^44.tag ':=' "044"; if ichg^pgm^tkn.mc^visa^mit^data.txn^typ <> [ $len( ichg^pgm^tkn.mc^visa^mit^data.txn^typ ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44.txn^typ.tag, "01" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44.txn^typ. lgth, "02" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44.txn^typ. tag^data, ichg^pgm^tkn.mc^visa^mit^data.txn^typ ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. txn^typ ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.recur^pmnt^valid <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. recur^pmnt^valid ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. recur^pmnt^valid.tag, "02" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. recur^pmnt^valid.lgth, "01" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. recur^pmnt^valid.tag^data, ichg^pgm^tkn.mc^visa^mit^data.recur^pmnt^valid ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. recur^pmnt^valid ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.max^recur^pmnt^amt <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. max^recur^pmnt^amt ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. max^recur^pmnt^amt.tag, "03" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. max^recur^pmnt^amt.lgth, "12" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. max^recur^pmnt^amt.tag^data, ichg^pgm^tkn.mc^visa^mit^data.max^recur^pmnt^amt ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. max^recur^pmnt^amt ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.rgstr^txn^id <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. rgstr^txn^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. rgstr^txn^id.tag, "04" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. rgstr^txn^id.lgth, "10" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. rgstr^txn^id.tag^data, ichg^pgm^tkn.mc^visa^mit^data.rgstr^txn^id ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. rgstr^txn^id ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.num^of^pmnts <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. num^of^pmnts ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. num^of^pmnts.tag, "05" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. num^of^pmnts.lgth, "02" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. num^of^pmnts.tag^data, ichg^pgm^tkn.mc^visa^mit^data.num^of^pmnts ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. num^of^pmnts ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.pmnt^freq <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. pmnt^freq ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^freq.tag, "06" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^freq.lgth, "02" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^freq.tag^data, ichg^pgm^tkn.mc^visa^mit^data.pmnt^freq ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. pmnt^freq ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.ttl^instl^amt <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. ttl^instl^amt ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. ttl^instl^amt.tag, "07" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. ttl^instl^amt.lgth, "12" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. ttl^instl^amt.tag^data, ichg^pgm^tkn.mc^visa^mit^data.ttl^instl^amt ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. ttl^instl^amt ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.crncy^cde <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. crncy^cde ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. crncy^cde.tag, "08" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. crncy^cde.lgth, "03" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. crncy^cde.tag^data, ichg^pgm^tkn.mc^visa^mit^data.crncy^cde ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. crncy^cde ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.instl^intrst^rate <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. instl^intrst^rate ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^rate.tag, "09" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^rate.lgth, "04" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^rate.tag^data, ichg^pgm^tkn.mc^visa^mit^data.instl^intrst^rate ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. instl^intrst^rate ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.instl^pmnt^enty <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. instl^pmnt^enty ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^pmnt^enty.tag, "10" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^pmnt^enty.lgth, "01" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^pmnt^enty.tag^data, ichg^pgm^tkn.mc^visa^mit^data.instl^pmnt^enty ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. instl^pmnt^enty ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.instl^intrst^chrg <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. instl^intrst^chrg ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^chrg.tag, "11" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^chrg.lgth, "01" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^chrg.tag^data, ichg^pgm^tkn.mc^visa^mit^data.instl^intrst^chrg ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. instl^intrst^chrg ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.mbr^def^data <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. mbr^def^data ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. mbr^def^data.tag, "12" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. mbr^def^data.lgth, "20" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. mbr^def^data.tag^data, ichg^pgm^tkn.mc^visa^mit^data.mbr^def^data ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. mbr^def^data ) + 4; end; if ichg^pgm^tkn.mc^visa^mit^data.pmnt^amt^ind <> [ $len( ichg^pgm^tkn.mc^visa^mit^data. pmnt^amt^ind ) * [ " " ] ] then begin movd( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^amt^ind.tag, "13" ); movd( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^amt^ind.lgth, "01" ); move( sem.adnl^data^natl.visa^mit.sub^fld^44. pmnt^amt^ind.tag^data, ichg^pgm^tkn.mc^visa^mit^data.pmnt^amt^ind ); sub^fld^44^lgth := sub^fld^44^lgth + $len( ichg^pgm^tkn.mc^visa^mit^data. pmnt^amt^ind ) + 4; end; call integer^ascii^( sem.adnl^data^natl.visa^mit.sub^fld^44. lgth, sub^fld^44^lgth ); call integer^ascii^( sem.adnl^data^natl.lgth, ( sub^fld^44^lgth + 6 ) ); return found^instl^data; end; #ADD 18184I4T PSTM^FRMT^NATL^DATA^TO^SEM if sem.ntl^pos^data.cntry^cde = "250" and intra^cntry^data^tkn.frmt^cde = "22" then begin found^natl^data := true; ! ! Format DE 112 French Domestic Data ! if intra^cntry^data^tkn.fr^bnet.crd^accpt^tax^id <> [ $len( intra^cntry^data^tkn.fr^bnet. crd^accpt^tax^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.fr.sub^fld^20.tag, "020" ); idx := $len( intra^cntry^data^tkn.fr^bnet. crd^accpt^tax^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.fr^bnet. crd^accpt^tax^id.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.fr.sub^fld^20.tag^data, intra^cntry^data^tkn.fr^bnet.crd^accpt^tax^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.fr.sub^fld^20.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; end; if intra^cntry^data^tkn.fr^bnet.transit^offer^id <> [ $len( intra^cntry^data^tkn.fr^bnet. transit^offer^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.fr.sub^fld^96.tag, "096" ); idx := $len( intra^cntry^data^tkn.fr^bnet. transit^offer^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^tkn.fr^bnet. transit^offer^id.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and ... movl( sem.adnl^data^natl.fr.sub^fld^96.tag^data, intra^cntry^data^tkn.fr^bnet.transit^offer^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.fr.sub^fld^96.lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; end; if intra^cntry^data^tkn.fr^bnet.appl^selct^id <> [ $len( intra^cntry^data^tkn.fr^bnet. appl^selct^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.fr.sub^fld^97.tag, "097" ); tag^data^lgth := $len( intra^cntry^data^tkn.fr^bnet. appl^selct^id ); movl( sem.adnl^data^natl.fr.sub^fld^97.tag^data, intra^cntry^data^tkn.fr^bnet.appl^selct^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.fr.sub^fld^97. lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; end; if intra^cntry^data^tkn.fr^bnet.brand^id <> [ $len( intra^cntry^data^tkn.fr^bnet. brand^id ) * [ " " ] ] then begin movd( sem.adnl^data^natl.fr.sub^fld^98.tag, "098" ); tag^data^lgth := $len( intra^cntry^data^tkn.fr^bnet. brand^id ); movl( sem.adnl^data^natl.fr.sub^fld^98.tag^data, intra^cntry^data^tkn.fr^bnet.brand^id, tag^data^lgth ); call integer^ascii^( sem.adnl^data^natl.fr.sub^fld^98. lgth, tag^data^lgth ); lgth := lgth + tag^data^lgth + 3 + 3; end; if lgth > 0 then begin ! ! Tag data was formatted so set the tag and length ! fields for DE 112 SE 20, 096, 097, 098 ! call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); end; end; ! if sem.ntl^pos^data.cntry^cde = "250" and #ADD 19972 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.e^com^flg <= "7" ) and #DELETE 19973 PSTM^FRMT^SEM^ADDL^DATA #ADD 19981 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.e^com^flg <= "7" ) then #DELETE 19982 PSTM^FRMT^SEM^ADDL^DATA #ADD 20090X01 PSTM^FRMT^SEM^ADDL^DATA ps51^get^tkn.e^com^flg <= "7" ) or #DELETE 20090X02 PSTM^FRMT^SEM^ADDL^DATA #ADD 20090R0B PSTM^FRMT^SEM^ADDL^DATA movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "21" ); #DELETE 20090R0C/20108 PSTM^FRMT^SEM^ADDL^DATA #ADD 20122 PSTM^FRMT^SEM^ADDL^DATA if ps51^get^tkn.authn^coll^ind = "H" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "242" ); end else if ps51^get^tkn.authn^coll^ind = "L" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "246" ); end else if ps51^get^tkn.authn^coll^ind = "M" then begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec, "247" ); end else if ps51^get^tkn.authn^coll^ind <> [ $len( ps51^get^tkn.authn^coll^ind ) * [" "] ] then begin move( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, ps51^get^tkn.authn^coll^ind ); end else begin movd( sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind, "0" ); end; #DELETE 20123 /20138 PSTM^FRMT^SEM^ADDL^DATA #ADD 20371 PSTM^FRMT^SEM^ADDL^DATA if emv^3ds^data^tkn.pgm^proto <> " " then begin move( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, emv^3ds^data^tkn.pgm^proto ); end; #DELETE 20410 /20429 PSTM^FRMT^SEM^ADDL^DATA #ADD 20433 PSTM^FRMT^SEM^ADDL^DATA ! ! ! Populate DE 48, SE 66, SF 1 ! ! ! movd( sem.addl^data.info.authn^data^sub^fld^66. tag, "66" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag, "01" ); movd( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.lgth, "01" ); move( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, ext^authn^data^tkn. mc^authn^data.pgm^proto ); sub^lgth := $len( sem.addl^data.info. authn^data^sub^fld^66. pgm^proto ); ! ! ! Populate DE 48, SE 66, SF 2 ! ! ! #DELETE 20433r00/20433r03 PSTM^FRMT^SEM^ADDL^DATA #DELETE 20469 /20484 PSTM^FRMT^SEM^ADDL^DATA #ADD 20838 PSTM^FRMT^SEM^ADDL^DATA "21" ); #DELETE 20839 PSTM^FRMT^SEM^ADDL^DATA #ADD 20975 PSTM^FRMT^SEM^ADDL^DATA lvl^of^sec, "242" ); #DELETE 20976 PSTM^FRMT^SEM^ADDL^DATA #DELETE 21069 /21078 PSTM^FRMT^SEM^ADDL^DATA #ADD 21178Y02 PSTM^FRMT^SEM^ADDL^DATA end; #DELETE 21179 /21193 PSTM^FRMT^SEM^ADDL^DATA #DELETE 21229o0G/21229o0R PSTM^FRMT^SEM^ADDL^DATA #DELETE 21241 /21255 PSTM^FRMT^SEM^ADDL^DATA #ADD 24628 SEM^FRMT^FEE^TO^PSTM^FEE ?section sem^frmt^fleet^data^to^pstm ?page "sem^frmt^fleet^data^to^pstm" !#####################################################################! !# #! !# sem^frmt^fleet^data^to^pstm #! !# #! !# This proc formats EMV Fleet data from SEM DE 106 and #! !# is mapped to the Fleet Prompt Data Token (FY), Fleet Spend #! !# Control Token (FZ) and Purchasing Card and Fleet Card Token (C2).#! !# #! !# INPUT PARAMETERS: #! !# PSTM - Pointer to BASE24 internal POS message #! !# SEM - Pointer to Banknet external message #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# #! !# RETURN: #! !# #! !#####################################################################! int proc sem^frmt^fleet^data^to^pstm( pstm, sem ); int .pstm( pstm^def ); int .sem( sem^def ); begin wlform( erradd^tkn, "UNABLE TO ADD TOKEN: \\, ERROR: #, PAN: \?, " ','"SEQ NUM: \? " ) wlform( no^room, "NO ROOM TO ADD TOKEN: \\, PAN: \?, SEQ NUM: \?" ) wlform( errupdt^tkn, "UNABLE TO UPDATE TOKEN: \\, ERROR: #, PAN: \?," ','" SEQ NUM: \?" ) struct .fleet^prmpt^data^tkn( fleet^prmpt^data^tkn^def ); struct .fleet^spend^cntl^tkn( fleet^spend^cntl^tkn^def ); struct .purchase^tkn( purchase^tkn^def ); int dspy := false; int i; int j; int item^lgth := 0; int lgth := 0; int mov^lgth := 0; int num^items := 0; int ofst := 0; int pan^lgth := 0; int pos^userdata; int sub^lgth := 0; int tkn^add^lgth := 0; int tkn^found := false; int tkn^lgth := 0; int tkn^result := 0; string pan[ 0:18 ] := [ 19 * [ " " ] ]; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; ?page "subproc sub^log^error of sem^frmt^fleet^data^to^pstm" !################################################################# !# # !# sub^log^error # !# # !# This subprocedure is called when a token error is detected. # !# An appropriate EMS messaage is logged based on the token # !# error. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^log^error; begin if tkn^result = over^max^limit^l then begin call log^message^( 1831, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin ! ! If any other token add/update error encountered log ! a message and abend. ! if not tkn^found then begin call log^message^( 1832, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^result, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); call abend^( 1832 ); end else begin call log^message^( 1833, ! routing code !, @errupdt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^result, @pan, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); call abend^( 1833 ); end; ! of if not tkn^found end; ! of if tkn^result = over^max^limit^l end; ! of subproc sub^log^error ?page "sem^frmt^fleet^data^to^pstm" !################################################################# !# # !# This is the main body of PROC sem^frmt^fleet^data^to^pstm # !# # !################################################################# ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; if sem.fleet^srvc^data.prmpt^data.tag = "001" then begin ! ! ! Add the Fleet Prompt Data Token ("FY") ! ! ! tkn^id ':=' fleet^prmpt^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, fleet^prmpt^data^tkn ); sub^lgth := 0; for i := 0 to 4 do begin if sem.fleet^srvc^data.prmpt^data.item[ i ].tag <> [ $len( sem.fleet^srvc^data.prmpt^data.item[ i ]. tag ) * [ " " ] ] then begin call ascii^integer^( sem.fleet^srvc^data.prmpt^data. item[ i ].lgth, item^lgth ); mov^lgth := item^lgth + 6; movl( fleet^prmpt^data^tkn. prmpt^data.byte[ sub^lgth ], sem.fleet^srvc^data.prmpt^data.item[ i ], mov^lgth ); sub^lgth := sub^lgth + item^lgth + 6; end; end; if sub^lgth > 0 then begin tkn^found := false; call integer^ascii^( fleet^prmpt^data^tkn.lgth, sub^lgth ); fleet^prmpt^data^tkn.crd^typ := "D"; tkn^add^lgth := $offset( fleet^prmpt^data^tkn.prmpt^data ) + sub^lgth; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fleet^prmpt^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^found := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fleet^prmpt^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin call sub^log^error; end; ! of if tkn^result ("FY") end; ! of if sub^lgth > 0 then end; ! of if sem.fleet^srvc^data.prmpt^data.tag = "001" if sem.fleet^srvc^data.spend^cntl^ovrrd^cap^ind.tag = "002" then begin ! ! ! Add the Fleet Spend Data Token ("FZ") ! ! ! tkn^id ':=' fleet^spend^cntl^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, fleet^spend^cntl^tkn ); sub^lgth := 0; tkn^found := false; movl( fleet^spend^cntl^tkn.spend^cntl^cap.host, sem.fleet^srvc^data.spend^cntl^ovrrd^cap^ind. tag^data, $len( fleet^spend^cntl^tkn.spend^cntl^cap.host ) ); tkn^add^lgth := $len( fleet^spend^cntl^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fleet^spend^cntl^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^found := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, fleet^spend^cntl^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin call sub^log^error; end; ! of if tkn^result ("FZ") end; ! of if sub^lgth > 0 then if sem.fleet^srvc^data.fuel^info.tag = "004" or sem.fleet^srvc^data.non^fuel^info.tag = "005" then begin ! ! ! Add the Purchase Card and Fleet Card Token ("C2") ! ! ! tkn^id ':=' purchase^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, purchase^tkn ); sub^lgth := 0; num^items := 0; tkn^found := false; j := 0; item^lgth := $len( purchase^tkn.mc^emv^fleet^data.item[ 0 ] ); if sem.fleet^srvc^data.fuel^info.tag = "004" then begin for i := 0 to 2 do begin if sem.fleet^srvc^data.fuel^info.item[ i ].tag <> [ $len( sem.fleet^srvc^data.fuel^info. item[ i ].tag ) * [ " " ] ] then begin movd( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.ind, "F" ); movl( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.prod^cde, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.prod^cde, $len( purchase^tkn.mc^emv^fleet^data. item[ i ].fuel.prod^cde ) ); movl( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.unit^price, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.unit^price, $len( purchase^tkn.mc^emv^fleet^data. item[ i ].fuel.unit^price ) ); move( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.unit^of^meas, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.unit^of^meas ); movl( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.qty, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.qty, $len( purchase^tkn.mc^emv^fleet^data. item[i].fuel.qty ) ); move( purchase^tkn.mc^emv^fleet^data.item[ i ]. fuel.qty^expnt, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.qty^expnt ); movl( purchase^tkn.mc^emv^fleet^data.item[i]. fuel.sale^amt, sem.fleet^srvc^data.fuel^info.item[ i ]. tag^data.sale^amt, $len( purchase^tkn.mc^emv^fleet^data. item[ i ].fuel.sale^amt ) ); num^items := num^items + 1; end; ! of if sem.fleet^srvc^data.fuel. end; ! of for ( i := 0 ) to 2 do end; ! of if sem.fleet^srvc^data.fuel^info.tag = "004" if sem.fleet^srvc^data.non^fuel^info.tag = "005" then begin for i := 0 to 11 do begin ! ! Move the data of non-fuel item to the next ! available entry in the array. ! j := num^items; if sem.fleet^srvc^data.non^fuel^info.item[ i ].tag <> [ $len( sem.fleet^srvc^data.non^fuel^info. item[ i ].tag ) * [ " " ] ] then begin movd( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.ind, "N" ); movl( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.prod^cde, sem.fleet^srvc^data.non^fuel^info. item[ i ].tag^data.prod^cde, $len( purchase^tkn.mc^emv^fleet^data. item[ j ].non^fuel.prod^cde ) ); movl( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.qty, sem.fleet^srvc^data.non^fuel^info. item[ i ].tag^data.qty, $len( purchase^tkn.mc^emv^fleet^data. item[ j ].non^fuel.qty ) ); move( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.qty^expnt, sem.fleet^srvc^data.non^fuel^info. item[ i ].tag^data.qty^expnt ); movl( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.unit^of^meas, sem.fleet^srvc^data.non^fuel^info. item[ i ].tag^data.unit^of^meas, $len( purchase^tkn.mc^emv^fleet^data. item[ j ].non^fuel. unit^of^meas ) ); movl( purchase^tkn.mc^emv^fleet^data.item[ j ]. non^fuel.ext^item^amt, sem.fleet^srvc^data.non^fuel^info. item[ i ].tag^data.sale^amt, $len( purchase^tkn.mc^emv^fleet^data. item[ j ].non^fuel. ext^item^amt ) ); num^items := num^items + 1; end; ! of if sem.fleet^srvc^data.non^fuel. end; ! of for ( i := 0 ) to 2 do end; ! of if sem.fleet^srvc^data.non^fuel^info.tag movd( purchase^tkn.purchase.crd^typ, "D" ); call integer^ascii^( purchase^tkn.mc^emv^fleet^data. num^items, num^items ); sub^lgth := num^items * item^lgth; tkn^add^lgth := $offset( purchase^tkn.mc^emv^fleet^data. item ) + sub^lgth; if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, purchase^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^found := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, purchase^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin call sub^log^error; end; ! of if tkn^result ("C2") end; !of if sem.fleet^srvc^data.fuel^info.tag = "004" or return true; end; #ADD 25550 SEM^FRMT^NATL^DATA^TO^PSTM int tag^lgth; #ADD 25713 SEM^FRMT^NATL^DATA^TO^PSTM if sem.ntl^pos^data.cntry^cde = "250" then begin ! ! France Domestic data ! movd( intra^cntry^data^tkn.frmt^cde, "22" ); if sem.adnl^data^natl.fr.sub^fld^20.tag = "020" then begin move( intra^cntry^data^tkn.fr^bnet.crd^accpt^tax^id, sem.adnl^data^natl.fr.sub^fld^20.tag^data ); end; if sem.adnl^data^natl.fr.sub^fld^96.tag = "096" then begin move( intra^cntry^data^tkn.fr^bnet.transit^offer^id, sem.adnl^data^natl.fr.sub^fld^96.tag^data ); end; if sem.adnl^data^natl.fr.sub^fld^97.tag = "097" then begin move( intra^cntry^data^tkn.fr^bnet.appl^selct^id, sem.adnl^data^natl.fr.sub^fld^97.tag^data ); end; if sem.adnl^data^natl.fr.sub^fld^98.tag = "098" then begin move( intra^cntry^data^tkn.fr^bnet.brand^id, sem.adnl^data^natl.fr.sub^fld^98.tag^data ); end; tkn^add^lgth := $offset( intra^cntry^data^tkn.fr^bnet. user^fld^fr^bnet ); end; #ADD 27468 SEM^FRMT^XADV^TO^SEM^XACK fleet^srvc^data^bit^d := 0; #ADD 27664 SEM^FRMT^XRESP^TO^PSTM^0210 int .fleet^spend^cntl^tkn( fleet^spend^cntl^tkn^def ); int fleet^spend^cntl^tkn^lgth := 0; #ADD 28451b04 SEM^FRMT^XRESP^TO^PSTM^0210 ( sem.addl^data.info.authn^data^sub^fld^66.tag <> "66" or sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "0" ) and #DELETE 28451b05/28451b0A SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 29807 SEM^FRMT^XRESP^TO^PSTM^0210 if base24^rel^g >= 5 and fleet^srvc^data^bit^d and ! bit 106 sem.fleet^srvc^data.spend^cntl^ovrrd^items.tag = "003" then begin tkn^id ':=' fleet^spend^cntl^tkn^id^d; ! ! Map data from DE 106 to Fleet Spend Control token. ! if hiswtkn^get^tkn( pstm, tkn^id, @fleet^spend^cntl^tkn, fleet^spend^cntl^tkn^lgth ) then begin datalgth := 0; datalgth := $len( sem.fleet^srvc^data. spend^cntl^ovrrd^items.tag^data ) * 2; call binary^hexchar( fleet^spend^cntl^tkn.host^spend^cntls, datalgth, sem.fleet^srvc^data.spend^cntl^ovrrd^items. tag^data ); end; end; #ADD 32325 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "2" then begin movd( ntwk^tkn^srvc^tkn.genrc.txn^typ, "1" ); end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "6" then begin movd( ntwk^tkn^srvc^tkn.genrc.txn^typ, "2" ); end else if sem.addl^data.info.ecom^sec^sub^fld^42. lvl^of^sec.ucaf^ind = "7" then begin movd( ntwk^tkn^srvc^tkn.genrc.txn^typ, "3" ); end; #ADD 33154 SEM^FRMT^XRQST^TO^PSTM^0200 sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. crdhldr^auth = "1" and sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. ucaf^ind <> "0" then #DELETE 33155 /33162 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33403 SEM^FRMT^XRQST^TO^PSTM^0200 else if adnl^data^ntl^bit^d and ( sem.adnl^data^natl.fr.sub^fld^20.tag = "020" or sem.adnl^data^natl.fr.sub^fld^96.tag = "096" or sem.adnl^data^natl.fr.sub^fld^97.tag = "097" or sem.adnl^data^natl.fr.sub^fld^98.tag = "098" ) then begin call sem^frmt^natl^data^to^pstm( pstm, sem ); end #DELETE 33783o0I/33796 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 34315 /34321 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 34385 SEM^FRMT^XRQST^TO^PSTM^0200 lvl^of^sec.crdhldr^auth = "1" and sem.addl^data.info.ucaf^sub^fld^43.tag <> "43" then #DELETE 34386 /34388 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35320 SEM^FRMT^XRQST^TO^PSTM^0200 movl( emv^3ds^data^tkn.pgm^proto, sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data, $len( sem.addl^data.info.authn^data^sub^fld^66. pgm^proto.tag^data ) ); #ADD 35326T00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then #DELETE 35326T01/35326T03 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35813 SEM^FRMT^XRQST^TO^PSTM^0200 if fleet^srvc^data^bit^d then begin call sem^frmt^fleet^data^to^pstm( pstm, sem ); end; #ADD 36248 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^request^d then begin if sem.addl^data.info.authn^data^sub^fld^66.tag = "66" and sem.addl^data.info.authn^data^sub^fld^66.ds^txn^id <> [ $len( sem.addl^data.info.authn^data^sub^fld^66. ds^txn^id ) * [ " " ] ] then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end else if sem.addl^data.info.ucaf^sub^fld^43.tag = "43" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else begin movd( sca^acq^data^tkn.pgm^proto, "0" ); end; #DELETE 36249 /36258 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36501 SEM^FRMT^XRQST^TO^SEM^XRESP fleet^srvc^data^bit^d := 0; #ADD 36588 SEM^FRMT^XRQST^TO^SEM^XRVSL fleet^srvc^data^bit^d := 0; !de 106! #ADD 36598 SEM^FRMT^XRQST^TO^SEM^XRVSL sem.ntl^pos^data.cntry^cde = "250" or #ADD 41518 TRACE^SEM index <> 105 and #ADD 43949 TRACE^SEM if index = 105 then ! field 106 begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then ! ! External message is too long. ! begin return ( index + 1 ); end; ptr ':=' sem[ offset ] for $len( hdr.fleet^srvc^data.lgth ); call ascii^integer( ptr, 3, t^length ); call translate( ptr, $len( hdr.fleet^srvc^data.lgth ), ascii^to^ebcdic^l ); length := 3; @ptr := @ptr '+' length; if hdr.fleet^srvc^data.prmpt^data.tag = "001" then begin movl( ptr, hdr.fleet^srvc^data.prmpt^data.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! ! Move Subfield item - 001 ! ! ! if hdr.fleet^srvc^data.prmpt^data.item[ 0 ]. tag = "001" then begin call ascii^integer( hdr.fleet^srvc^data. prmpt^data.item[ 0 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.prmpt^data. item[ 0 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 001 ! ! ! ! Move Subfield item - 002 ! ! ! if hdr.fleet^srvc^data.prmpt^data.item[ 1 ]. tag = "002" then begin call ascii^integer( hdr.fleet^srvc^data. prmpt^data.item[ 1 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.prmpt^data. item[ 1 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield item 002 ! ! ! ! Move Subfield item - 003 ! ! ! if hdr.fleet^srvc^data.prmpt^data.item[ 2 ]. tag = "003" then begin call ascii^integer( hdr.fleet^srvc^data. prmpt^data.item[ 2 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.prmpt^data. item[ 2 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield item 003 ! ! ! ! Move Subfield item - 004 ! ! ! if hdr.fleet^srvc^data.prmpt^data.item[ 3 ]. tag = "004" then begin call ascii^integer( hdr.fleet^srvc^data. prmpt^data.item[ 3 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.prmpt^data. item[ 3 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield item 004 ! ! ! ! Move Subfield item - 005 ! ! ! if hdr.fleet^srvc^data.prmpt^data.item[ 4 ]. tag = "005" then begin call ascii^integer( hdr.fleet^srvc^data. prmpt^data.item[ 4 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.prmpt^data. item[ 4 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield item 004 ! end; ! of tag = "001" if hdr.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.tag = "002" then begin call ascii^integer( hdr.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "002" if hdr.fleet^srvc^data. spend^cntl^ovrrd^items.tag = "003" then begin call ascii^integer( hdr.fleet^srvc^data. spend^cntl^ovrrd^items.lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data. spend^cntl^ovrrd^items.tag, ( tag^length + 6 ) ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "003" if hdr.fleet^srvc^data.fuel^info.tag = "004" then begin movl( ptr, hdr.fleet^srvc^data.fuel^info.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! ! Move Subfield Fuel item - 001 ! ! ! if hdr.fleet^srvc^data.fuel^info.item[ 0 ]. tag = "001" then begin call ascii^integer( hdr.fleet^srvc^data. fuel^info.item[ 0 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.fuel^info. item[ 0 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield Fuel Item 001 ! ! ! ! Move Subfield Fuel item - 002 ! ! ! if hdr.fleet^srvc^data.fuel^info.item[ 1 ]. tag = "002" then begin call ascii^integer( hdr.fleet^srvc^data. fuel^info.item[ 1 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.fuel^info. item[ 1 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield Fuel Item 002 ! ! ! ! Move Subfield Fuel item - 003 ! ! ! if hdr.fleet^srvc^data.fuel^info.item[ 2 ]. tag = "003" then begin call ascii^integer( hdr.fleet^srvc^data. fuel^info.item[ 2 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.fuel^info. item[ 2 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield Fuel Item 003 ! end; ! of tag = "004" if hdr.fleet^srvc^data.non^fuel^info. tag = "005" then begin movl( ptr, hdr.fleet^srvc^data.non^fuel^info.tag, 6 ); call translate( ptr, 6, ascii^to^ebcdic^l ); @ptr := @ptr '+' 6; ! ! Move Subfield Non-Fuel item - 001 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 0 ].tag = "001" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 0 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 0 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 001 ! ! ! Move Subfield Non-Fuel item - 002 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 1 ].tag = "002" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 1 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 1 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 002 ! ! ! Move Subfield Non-Fuel item - 003 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 2 ].tag = "003" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 2 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 2 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 003 ! ! ! Move Subfield Non-Fuel item - 004 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 3 ].tag = "004" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 3 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 3 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 004 ! ! ! Move Subfield Non-Fuel item - 005 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 4 ].tag = "005" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 4 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 4 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 005 ! ! ! Move Subfield Non-Fuel item - 006 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 5 ].tag = "006" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 5 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 5 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 006 ! ! ! Move Subfield Non-Fuel item - 007 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 6 ].tag = "007" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 6 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 6 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 007 ! ! ! Move Subfield Non-Fuel item - 008 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 7 ].tag = "008" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 7 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 7 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 008 ! ! ! Move Subfield Non-Fuel item - 009 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 8 ].tag = "009" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 8 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 8 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 009 ! ! ! Move Subfield Non-Fuel item - 0010 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 9 ].tag = "010" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 9 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 9 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 010 ! ! ! Move Subfield Non-Fuel item - 0011 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 10 ].tag = "011" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 10 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 10 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 011 ! ! ! Move Subfield Non-Fuel item - 0012 ! if hdr.fleet^srvc^data.non^fuel^info. item[ 11 ].tag = "012" then begin call ascii^integer( hdr.fleet^srvc^data. non^fuel^info.item[ 11 ].lgth, 3, tag^length ); movl( ptr, hdr.fleet^srvc^data.non^fuel^info. item[ 11 ].tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield non fuel Item 012 ! end; ! of tag = "005" set( translate^field, false ); end ! index = 105 else #ADD 44245 TRACE^SEM else if hdr.adnl^data^natl.fr.sub^fld^20.tag = "020" or hdr.adnl^data^natl.fr.sub^fld^96.tag = "096" or hdr.adnl^data^natl.fr.sub^fld^97.tag = "097" or hdr.adnl^data^natl.fr.sub^fld^98.tag = "098" then begin if hdr.adnl^data^natl.fr. sub^fld^20.tag = "020" then begin call ascii^integer( hdr.adnl^data^natl. fr.sub^fld^20.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.fr.sub^fld^20. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.fr. sub^fld^96.tag = "096" then begin call ascii^integer( hdr.adnl^data^natl. fr.sub^fld^96.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.fr.sub^fld^96. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.fr. sub^fld^97.tag = "097" then begin call ascii^integer( hdr.adnl^data^natl. fr.sub^fld^97.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.fr.sub^fld^97. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; if hdr.adnl^data^natl.fr. sub^fld^98.tag = "098" then begin call ascii^integer( hdr.adnl^data^natl. fr.sub^fld^98.lgth, 3, tag^length ); movl( ptr, hdr.adnl^data^natl.fr.sub^fld^98. tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; end #ADD 44630g00 TRACE^SEM else if hdr.adnl^data^natl.visa^mit. sub^fld^44.tag = "044" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.lgth, 3, t^length ); ! ! Move the tag 043 and tag length field ! movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.tag, 6 ); @ptr := @ptr '+' 6; sub^lgth := 6; ! ! Process tag 044 subtag 01 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. txn^typ.tag = "01" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.txn^typ.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.txn^typ.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "01" ! ! Process tag 044 subtag 02 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. recur^pmnt^valid.tag = "02" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.recur^pmnt^valid. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.recur^pmnt^valid. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "02" ! ! Process tag 044 subtag 03 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. max^recur^pmnt^amt.tag = "03" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.max^recur^pmnt^amt. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.max^recur^pmnt^amt. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "03" ! ! Process tag 044 subtag 04 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. rgstr^txn^id.tag = "04" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.rgstr^txn^id. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.rgstr^txn^id. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "04" ! ! Process tag 044 subtag 05 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. num^of^pmnts.tag = "05" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.num^of^pmnts.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.num^of^pmnts.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "05" ! ! Process tag 044 subtag 06 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. pmnt^freq.tag = "06" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.pmnt^freq.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.pmnt^freq.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "06" ! ! Process tag 044 subtag 07 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. ttl^instl^amt.tag = "07" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.ttl^instl^amt.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.ttl^instl^amt.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "07" ! ! Process tag 044 subtag 08 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. crncy^cde.tag = "08" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.crncy^cde.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.crncy^cde.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "08" ! ! Process tag 044 subtag 09 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^rate.tag = "09" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^intrst^rate. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^intrst^rate. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "09" ! ! Process tag 044 subtag 10 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. instl^pmnt^enty.tag = "10" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^pmnt^enty. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^pmnt^enty. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "10" ! ! Process tag 044 subtag 11 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. instl^intrst^chrg.tag = "11" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^intrst^chrg. lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.instl^intrst^chrg. tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "11" ! ! Process tag 044 subtag 12 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. mbr^def^data.tag = "12" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.mbr^def^data.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.mbr^def^data.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "12" ! ! Process tag 044 subtag 13 if present ! if hdr.adnl^data^natl.visa^mit.sub^fld^44. pmnt^amt^ind.tag = "13" then begin call ascii^integer( hdr.adnl^data^natl.visa^mit. sub^fld^44.pmnt^amt^ind.lgth, tag^lgth^fld^lgth^l, tag^length ); tag^length := tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^length; movl( ptr, hdr.adnl^data^natl.visa^mit. sub^fld^44.pmnt^amt^ind.tag, tag^length ); @ptr := @ptr[ tag^length ]; sub^lgth := sub^lgth + tag^length; end; ! of tag = "13" call translate( ptr[ - sub^lgth ], sub^lgth, ascii^to^ebcdic^l ); if t^length <> ( sub^lgth - 6 ) then begin return( index + 1 ); end; end ! of tag = "044" #ADD 44644 TRACE^SEM index <> 105 and #ADD 46256 TRACE^SEM index <> 105 and #ADD 48044 TRACE^SEM if index = 105 then ! field 106 ! begin call translate( ptr, $len( hdr.fleet^srvc^data.lgth ), ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for $len( hdr.fleet^srvc^data. lgth ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! ! The SEM has invalid data. ! ! ! return ( index + 1 ); end; call translate( ptr[ 3 ], t^length, ebcdic^to^ascii^l ); set ( translate^field, true ); length := 3; if t^length < 6 then begin ! ! ! no subfields present ! ! ! length := t^length + 3; end; tag^length := 0; bad^lgth := 0; while ( length < ( t^length + 3 ) ) do begin if not ascii^integer( ptr[ length + 3 ], 3, tag^length ) then begin ! ! ! DE 106 sub-element has invalid data. ! ! ! return ( index + 1 ); end; if ptr[ length ] = "001" then begin movl( sem^ptr.fleet^srvc^data.prmpt^data. tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.fleet^srvc^data. prmpt^data. item[ 0 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.fleet^srvc^data. prmpt^data. item[ 1 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "003" then begin movl( sem^ptr.fleet^srvc^data. prmpt^data. item[ 2 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "004" then begin movl( sem^ptr.fleet^srvc^data. prmpt^data. item [3 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "005" then begin movl( sem^ptr.fleet^srvc^data. prmpt^data. item[ 4 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + sub^lgth + 6; end; ! of while ! end else if ptr[ length ] = "002" then begin movl( sem^ptr.fleet^srvc^data. spend^cntl^ovrrd^cap^ind.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "003" then begin call translate( ptr[ length + 6 ], tag^length, ascii^to^ebcdic^l ); movl( sem^ptr.fleet^srvc^data. spend^cntl^ovrrd^items.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "004" then begin movl( sem^ptr.fleet^srvc^data. fuel^info.tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.fleet^srvc^data. fuel^info.item[ 0 ]. tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.fleet^srvc^data. fuel^info.item[ 1 ]. tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "003" then begin movl( sem^ptr.fleet^srvc^data. fuel^info.item[ 2 ]. tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + sub^lgth + 6; end; ! of while ! end else if ptr[ length ] = "005" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info.tag, ptr[ length ], 6 ); length := length + 6; processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do begin call ascii^integer( ptr[ length + 3 ], 3, sub^lgth ); if ptr[ length ] = "001" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 0 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "002" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 1 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "003" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 2 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "004" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 3 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "005" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 4 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "006" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 5 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "007" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 6 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "008" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 7 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "009" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 8 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "010" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 9 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "011" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 10 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "012" then begin movl( sem^ptr.fleet^srvc^data. non^fuel^info. item[ 11 ].tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else begin return( index + 1 ); end; length := length + sub^lgth + 6; end; ! of while end else if ptr[ length ] <> " " then begin bad^lgth := bad^lgth + tag^length + 6; length := length + tag^length + 6; end else begin return ( index + 1 ); end; end; ! while( if length <> t^length + 3 then begin ! ! ! Parsing of DE 106 has gone wrong somewhere. ! ! ! length := t^length + 3; return ( index + 1 ); end; ! ! ! If this field is greater than 0, an unsupported ! ! subfield was hit and the length needs to be ! ! re-set. ! ! ! if bad^lgth > 0 then begin if t^length > bad^lgth then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.dgtl^pmnt^data.lgth, t^length ); end; ! of resetting field length ! end; set( translate^field, false ); @ptr := @ptr '+' length; end ! index = 106 ! else #ADD 48534g00 TRACE^SEM if ptr[ length ] = "044" then begin ! ! Move in the tag and length fields ! movl( sem^ptr.adnl^data^natl.visa^mit. sub^fld^44.tag, ptr[ length ], 6 ); length := length + 6; while ( length < ( t^length + 3 ) ) do begin call ascii^integer( ptr[ length + 2 ], 2, sub^lgth ); if ptr[ length ] = "01" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. txn^typ.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "02" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. recur^pmnt^valid. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "03" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. max^recur^pmnt^amt. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "04" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. rgstr^txn^id.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "05" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. num^of^pmnts.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "06" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. pmnt^freq.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "07" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. ttl^instl^amt.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "08" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. crncy^cde.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "09" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. instl^intrst^rate.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "10" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. instl^pmnt^enty.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "11" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. instl^intrst^chrg. tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "12" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. mbr^def^data.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else if ptr[ length ] = "13" then begin movl( sem^ptr.adnl^data^natl. visa^mit.sub^fld^44. pmnt^amt^ind.tag, ptr[ length ], sub^lgth + 4 ); length := length + sub^lgth + 4; end else begin ! ! Unrecognized tag ! length := length + sub^lgth + 4; end; end; ! of while end else #ADD 48534g0x TRACE^SEM if ptr[ length ] = "096" then begin movl( sem^ptr.adnl^data^natl.fr. sub^fld^96.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "097" then begin movl( sem^ptr.adnl^data^natl.fr. sub^fld^97.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] = "098" then begin movl( sem^ptr.adnl^data^natl.fr. sub^fld^98.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else #ADD 48581 TRACE^SEM index <> 105 and #ADD 48586o00 TRACE^SEM ! already moved data for fields 48, 104, 106, 108, ! ! 112 and 122 ! #DELETE 48586o01/48586o02 TRACE^SEM #ENDSCN = SW0R158 !#CMP2.28 06/09/23 BNETLIBS6351 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6351 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6351 * ******************************************************************************** #SCN = SW0R194 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6351 #NEWVERSION = 6352 #ADD 11002y0j ! 09JUN2023 wielerk ! Symptom: Interface moves too much data in DE-122.SE-01.SF-05. ! Problem: In the Mrch Cntct Data token ( FM ) the phone number is ! carried as 20 bytes. The field in the SEM only allows ! for 16 bytes and 20 bytes of data causes a format error ! in the MAS simulator. ! Fix: Modified code to move the lesser of the length of the ! data in the token field and the byte length of ! DE-122.SE-01.SF-05. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3541685. #ADD 14106o7D SUB^LOG^ERROR if lgth > $len( sem.addl^rec^data.accpt.phone. tag^data ) then begin lgth := $len( sem.addl^rec^data.accpt.phone. tag^data ); end; #DELETE 14106o7E SUB^LOG^ERROR #ENDSCN = SW0R194 !#CMP2.28 06/12/23 BNETLIBS6352 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6352 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6352 * ******************************************************************************** #SCN = SW0R199 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6352 #NEWVERSION = 6353 #ADD 11002z0F ! 12JUN2023 wielerk ! Symptom: Interface abends when processing DE-48.SE-55 and ! DE-48.SE-57 from a 0110. ! Problem: The Fraud Data token ( SG ) is not defined correctly ! when processing a response from Mastercard. ! Fraud Data token is defined as an int but the first ! usage is in a call to tkn^main^convert and the ! address is not set causing SKEL corruption. ! Fix: Modified code to define the Fraud Data token as a ! struct. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3545653. #REPLACE 27611 SEM^FRMT^XRESP^TO^PSTM^0210 struct .fraud^data^tkn( fraud^data^tkn^def ); #DELETE 27662 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0R199 !#CMP2.28 06/15/23 BNETLIBS6353 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6353 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6353 * ******************************************************************************** #SCN = SW0R203 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6353 #NEWVERSION = 6354 #ADD 11002#0G ! 15JUN2023 wielerk ! Symptom: Interface abends when processing DE-122.SE-001.SF-003 ! from a 0420. ! Problem: The content of this data element increased by 5 bytes ! in the 0420, causing the contents of the next token ! to be corrupted and abending with a token error 22. ! Fix: Modified code to not update the Website token if ! present. ! Proc Modified: util^add^pos^accpt^data^tkns ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3545862. #REPLACE 39647o4Z/39647o4Z OFFSET 0 SUB^LOG^ERROR if tag^lgth > 0 and website^tkn.lgth = " " then #ENDSCN = SW0R203 !#CMP2.28 06/15/23 BNETS 6171 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6171 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6171 * ******************************************************************************** #SCN = SW0R205 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6171 #NEWVERSION = 6172 #ADD 03821~0D ! 15JUN2023 wielerk ! Symptom: Interface abends with Trap #3 processing an external ! response. ! Problem: Increases in the size of the SEM causes the process ! to abend when updating the ILF trace record. ! Fix: Modified code to move 2 structs and the code to perform ! the ack for a response to a separate proc to free up ! stack space. ! Proc Added : sem^response^ack ! Proc Modified: sem^response ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3543476. #DELETE 21790 /21791 SEM^RESPONSE #REPLACE 21793 SEM^RESPONSE struct .susp( susp^bnet^def ); #DELETE 21817 SEM^RESPONSE #REPLACE 21818 SEM^RESPONSE call sem^response^ack( sem, sta^x ); #DELETE 21819 /21821 SEM^RESPONSE #ADD 21848 SEM^RESPONSE ?section sem^response^ack ?page "sem^response^ack" !#####################################################################! !# #! !# sem^response^ack #! !# #! !# This procedure performs the formatting and sending of a positive #! !# acknowledgement to Mastercard. #! !# #! !# INPUT PARAMETERS: #! !# sem - authorization response #! !# sta^x - station on which this message was received #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc sem^response^ack( sem, sta^x ) extensible; int .sem( sem^def ); int sta^x; begin struct .ack( sem^def ), .csem( sem^def ); int extlgth := 0; call sem^frmt^xresp^to^sem^xack( sem, ack ); if util^^collapse( ack, csem, extlgth ) then begin call util^send^sem( csem, extlgth, pct.station[ sta^x ].nam ); end; end; #ENDSCN = SW0R205 !#CMP2.28 06/22/23 BNETLIBS6354 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6354 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6354 * ******************************************************************************** #SCN = SW0R206 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6354 #NEWVERSION = 6355 #ADD 11002$0E ! 22JUN2023 wielerk ! Symptom: Interface assigns PSTM response code "096". ! Problem: When a 0110 contains DE-39 = "83" and DE-48.SE-84 tag ! data = "01", the interface was setting PSTM response ! code to "096". This was an expectation that a ! transaction could be approved with authentication. ! Mastercard is using this condition for denials that ! cannot be approved with authentication. ! Fix: Modified code to not set PSTM response code to "064". ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3547266. #REPLACE 28161H09 SEM^FRMT^XRESP^TO^PSTM^0210 movd( pstm.tran.resp^cde, "064" ); #ENDSCN = SW0R206 !#CMP2.28 07/06/23 BNETLIBS6355 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6355 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6355 * ******************************************************************************** #SCN = SW0R211 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6355 #NEWVERSION = 6356 #ADD 11002%0F ! 03JUL2023 KandhaB ! Symptom: Interface fills PSTM field TERM-NAME-LOC with blanks ! Problem: Whenever DE 122 SE 001 Tag 001 is not received inbound ! from Mastercard, the field TERM-NAME-LOC of PSTM gets ! filled incorrectly with blanks. ! Fix: Modified code to move value from DE 43 into the PSTM ! field TERM-NAME-LOC if it is set to blanks after ! attempting to get value from DE 122 SE 001 Tag 001. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3545382 #DELETE 33778 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33798 SEM^FRMT^XRQST^TO^PSTM^0200 if pstm.term^name^loc = [ $len( pstm.term^name^loc ) * [ " " ] ] then begin move ( pstm.term^name^loc, sem.crd^acpt.reg^e^loc ); end; #ENDSCN = SW0R211 !#CMP2.28 07/17/23 BNETLIBS6356 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6356 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6356 * ******************************************************************************** #SCN = SW0R215 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6356 #NEWVERSION = 6357 #ADD 11002&0F ! 17JUL2023 JayaprM ! Symptom: Interface populates DE 48 SE 22 incorrectly when SF 06 ! is echoed back in 0110 outbound response messages. ! Problem: DE 48 SE 22 SF 06 has been sent out in 0110 response ! message to Mastercard which is not correct. DE 48 SE 22 ! SF 06 should not be present in 0110 response messages, ! as per Mastercard specification. ! Fix: Modified code not to echo DE 48 SE 22 SF 06 in 0110 ! outbound response messages. ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3551375 #ADD 15284Y0H PSTM^FRMT^0210^TO^XRESP mov^( sem.addl^data.info.mrch^inds^sub^fld^22. msg^frmt^ver^cde^acq, blanks ); #ENDSCN = SW0R215 !#CMP2.28 07/27/23 BNETLIBS6357 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6357 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6357 * ******************************************************************************** #SCN = SW0R217 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6357 #NEWVERSION = 6358 #ADD 11002*0F ! 27JUL2023 wielerk ! Symptom: Interface adds some tokens for a length that is less ! than the published minimum. ! Problem: When DE-108 ( moneysend data ) contains some tags but ! not all, the interface adds the token for the length of ! the data sent and not the token length without the user ! data. ! Fix: Modified code to accumulate individual tag length in a ! temporary variable and to set the token add length to ! the token length minus user data. ! Subprocs Modified: sub^mov^ext^to^tkn of ! util^add^moneysend^tkns ! sub^process^addl^data of ! util^add^moneysend^tkns ! sub^process^rcv^data of ! util^add^moneysend^tkns ! sub^process^sender^data of ! util^add^moneysend^tkns ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3553801. #DELETE 38337 /38340 SUB^MOV^EXT^TO^TKN #REPLACE 38366 SUB^PROCESS^ADDL^DATA temp^tkn^add^lgth := 0; #REPLACE 38455 SUB^PROCESS^ADDL^DATA if temp^tkn^add^lgth > 0 then #REPLACE 38464 /38464 OFFSET 0 SUB^PROCESS^ADDL^DATA tkn^add^lgth := $offset( p2p^addl^data^tkn.mc.user^fld^mc ); #REPLACE 38798 SUB^PROCESS^RCV^DATA temp^tkn^add^lgth := 0; #REPLACE 39014 SUB^PROCESS^RCV^DATA if temp^tkn^add^lgth > 0 then #REPLACE 39022 SUB^PROCESS^RCV^DATA tkn^add^lgth := $len( p2p^rcv^data^tkn ); #REPLACE 39140 SUB^PROCESS^SENDER^DATA temp^tkn^add^lgth := 0; #REPLACE 39363 SUB^PROCESS^SENDER^DATA if temp^tkn^add^lgth > 0 then #REPLACE 39371 SUB^PROCESS^SENDER^DATA tkn^add^lgth := $len( p2p^sender^data^tkn ); #ENDSCN = SW0R217 !#CMP2.28 08/23/23 BNETDDLS6087 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6087 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6087 * ******************************************************************************** #SCN = SW0R243 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6087 #NEWVERSION = 6088 #ADD B002620W * 23AUG2023 ChristL * Symptom: Banknet Release 23.Q4 Functional Enhancements * Problem: None. * Fix: The interface has been modified in support for the * below requirements: * AN 6791 - Introducing Digital Commerce Solutions * Indicators. * - Added a redefinition for DE 48, SE 48. * AN 7113 - Adding Optional Subelements to Expand Tag * Value Support for Chip Transactions. * - Added new EMV data elements to the structure * for DE 55. * AN 7411 - Adding Acquirer Country Code to * Authorization Messages. * - Added a field for DE 19 to the area of the SEM * logged to the ILF, replacing the existing field * for DE 20. * AN 7422 - Enhancing American Express and Visa Gateways * - Replaced the structure for DE 48, SE 90 with a * user field. * - Replaced the structure for DE 48, SE 85 with a * user field. * - Deleted the structure for DE 48, SE 94. * - Add structures for DE 48, SE 46, DE 48 SE 94, * DE 48, SE 96, DE 48, SE 90. * - Added a structure for DE 48, SE 85 as a * redefinition of the structure for DE 48, SE 12. * - Added a structure for DE 48, SE 05 as a * redefinition of the structure for DE 48, SE 30. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : PSTKNCVS, PSTKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * SW60ABNT: BNETEMVS. * Run MAKE. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * Run Make. * Reference: WO #PDM-004910 #ADD 00913 SEM * * acquiring institution country code * bit map position = 19 * EBCDIC in transmission * Indicates the country where the acquirer is located. * 02 acq-inst-cntry-cde pic x(3). #DELETE 00914 /00919 SEM #ADD 01120 SEM * Reserved by ACI for future use. * 06 user-fld0 pic x(5). #DELETE 01121 /01141 SEM #ADD 01157H0N SEM * * Reserved by ACI for future use. * 06 user-fld1 pic x(5). #DELETE 01157w00/01157H0U SEM #DELETE 0115790F/0115790N SEM #ADD 01157a0t SEM * * Card-Level Result (Visa only) * Subfield tag = 46 * 06 crd-lvl-rslt-sub-fld-46 redefines chip-bit-err-rslts-sub-fld-79. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(7). * * Visa Commercial Card Inquiry Request/Response * Subfield tag = 94 * 06 visa-cmrcl-sub-fld-94 redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 tag pic 99. 08 lgth pic 99. 08 crd-typ-rqst-ind pic x(3). 08 rqst-cmrcl-crd-typ pic x. 08 se-96 pic x(5). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(7). * * Visa Market-Specific Data Identifier * Subfield tag = 96 * 06 visa-mkt-spcfc-data-sub-fld-96 redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(7). * * ps2000 data rqst tag data. * 06 ps2000-rqst-data redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 se-96 pic x(5). * * tag is '90' ! * 08 tag pic 99. * * lgth will be '01' ! * 08 lgth pic 99. 08 ind pic x. 08 se-91 pic x(23). 08 user-fld pic x(7). #ADD 0115790g SEM 08 se-46 pic x(6). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 se-90 pic x(5). #ADD 0115790u SEM 08 user-fld pic x(7). #DELETE 0115790v SEM #DELETE 0115790x/0115791A SEM #ADD 01157e0J SEM * * Visa Account Status * Subfield tag = 85 * 06 visa-acct-stat-sub-fld-85 redefines rte-ind-sub-fld-12. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. #ADD 01157w11 SEM * * Digital Commerce Solutions Indicators * Subfield tag = 48 * Subfield 1 identifies the digital commerce domain identifier. * Subfield 2 identifies the digital commerce program type. * Subfield 3 identifies the digital commerce check-in entity. * Subfield 4 identifies the digital commerce check-in method. * 06 dgtl-cmrc-inds-sub-fld-48 redefines mobile-pgm-inds-sub-fld-48. 08 tag pic 99. 08 lgth pic 99. 08 dom-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. 08 pgm-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x. 08 chk-in-enty-typ-nam. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). 08 chk-in-mthd. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(40). #DELETE 0115791k/0115791w SEM #ADD 01157#0X SEM * * Additional Visa Response Data * Subfield tag = 05 * Contains additional response data when provided by Visa. * 06 adnl-visa-resp-data-sub-fld-05 redefines tkn-txn-id-sub-fld-30. 08 tag pic 99. 08 lgth pic 99. 08 cmrcl-choice-pgm. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). 08 dgtl-authn-pgm. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 auth-resp-src-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 user-fld pic x(25). #DELETE 01411`02/01411`05 SEM #DELETE 01411`0D/01411`0G SEM #DELETE 01411`0P/01411`0S SEM #ADD 01411b86 SEM * * Optional in the 0100 Authorization Request Message 06 kernel-id-term. * tag = 96 08 tag pic x. 08 lgth pic x. 08 tag-data pic x(8). * * Optional in the 0100 Authorization Request Message 06 authn-appl-data. * tag = 9F60 08 tag pic xx. 08 lgth pic x. 08 tag-data pic x(128). #ADD 01411$0E SEM * * primary account number, extended country code * bit map position = 20 * EBCDIC in transmission * 02 pan-cntry-cde pic 9(3). #ENDSCN = SW0R243 !#CMP2.28 08/23/23 BNETG 60138FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60138 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60138 * ******************************************************************************** #SCN = SW0R244 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #000260Q ! 23AUG2023 ChristL ! Symptom: Banknet Release 23.Q4 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support for the ! below requirements: ! AN 7113 - Adding Optional Subelements to Expand Tag ! Value Support for Chip Transactions. ! - Added defines for Tag 9F60 and Tag 96 in DE 55. ! AN 7402 - Enhancing Account Status Inquiry to Enable ! Name Validation ! - Sourced in vrfn^data1^tkn and adnl^vrfn^rslt^tkn. ! from BADDLTAL. ! AN 7411 - Adding Acquirer Country Code to ! Authorization Messages. ! - Sourced in acq^data^tkn from BADDLTAL. ! - Added a bit definition for DE 19. ! - Added an entry for DE 19 to sem^bit^map^tbl^g. ! AN 7422 - Enhancing American Express and Visa Gateways ! - Sourced in gtwy^info^tkn from BADDLTAL. ! - Added a define to identify a Visa transaction in ! the Gateway Info token (ID = "S1"). ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : PSTKNCVS, PSTKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! SW60ABNT: BNETEMVS. ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #PDM-004910 #ADD #000260h ?nolist, source =basrc_baddltal( ? acq^data^tkn ? gtwy^info^tkn ? mc^gtwy^visa^info ? vrfn^data1^tkn ? adnl^vrfn^rslt^tkn ? ) ?list ! acq^data^tkn ! gtwy^info^tkn ! ! mc^gtwy^visa^info ! ! vrfn^data1^tkn ! ! adnl^vrfn^rslt^tkn ! ! ) ! #ADD H0019402 define dataset^id^visa^info^d = "75"#; #ADD 00551 acq^cntry^cde^bit^d = pbit^map[1].<02> #, !bit 19 ! #ADD 00954 19, 0, sem^field( acq^inst^cntry^cde ), #DELETE 00955 #ADD 01366O2D tag^authn^appl^data^d = [ %h9F, %h60 ]#, #ADD 01366O2L tag^kernel^id^term^d = [ %h96 ]#, #ENDSCN = SW0R244 !#CMP2.28 08/23/23 BNETLIBS6358 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6358 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6358 * ******************************************************************************** #SCN = SW0R245 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6358 #NEWVERSION = 6359 #ADD 11002+0N ! 23AUG2023 ChristL ! Symptom: Banknet Release 23.Q4 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support for the ! below requirements: ! AN 6791 - Introducing Digital Commerce Solutions ! Indicators. ! AN 7110 - Introducing New Merchant Advice Codes for ! Consumer Non-Reloadable Prepaid Products and ! Single-Use Virtual Card Numbers. ! AN 7113 - Adding Optional Subelements to Expand Tag ! Value Support for Chip Transactions. ! AN 7402 - Enhancing Account Status Inquiry to Enable ! Name Validation. ! AN 7411 - Adding Acquirer Country Code to ! Authorization Messages. ! AN 7422 - Enhancing American Express and Visa Gateways ! Case #03548437 (H24-517702) - Banknet code - ! some unnecessary definitions ! Case H24-439598 - Incorrect Message Expand Processing ! for DE 112. ! Procs Modified: pstm^frmt^0210^to^xresp ! pstm^frmt^sem^addl^data ! sem^frmt^xadv^to^sem^xack ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^sem^xack ! util^add^moneysend^tkns ! util^collapse^sem ! util^expand^sem ! Subproc Added: sub^process^vrfn^data of ! sem^frmt^xrqst^to^sem^xresp ! sub^process^acct^stat^inq of ! util^add^moneysend^tkns. ! Subprocs Modified: sub^process^rcv^data of ! util^add^moneysend^tkns ! sub^process^sender^data of ! util^add^moneysend^tkns. ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : PSTKNCVS, PSTKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! SW60ABNT: BNETEMVS. ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #PDM-004910 #ADD 14549 PSTM^FRMT^0210^TO^XRESP int done; int .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); int adnl^vrfn^rslt^tkn^lgth := 0; int adnl^vrfn^rslt^tkn^fnd; #ADD 14560 PSTM^FRMT^0210^TO^XRESP int .mobile^pmnts^tkn( mobile^pmnts^tkn^def ); int mob^pmnts^tkn^lgth; #ADD 14572 PSTM^FRMT^0210^TO^XRESP int tag^lgth := 0; int .vrfn^data1^tkn( vrfn^data1^tkn^def ); int vrfn^data1^tkn^lgth := 0; #ADD 14603 PSTM^FRMT^0210^TO^XRESP acq^cntry^cde^bit^d := 0; #ADD 15084r0e PSTM^FRMT^0210^TO^XRESP if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = " " then begin if pos^data3^tkn.adnl^resp^info^cde = "U" then begin set^addl^data^d( mrch^advc^cde^sub^fld^84. tag^data, "40" ); end else if pos^data3^tkn.adnl^resp^info^cde = "V" then begin set^addl^data^d( mrch^advc^cde^sub^fld^84. tag^data, "41" ); end; end; #ADD 15301 PSTM^FRMT^0210^TO^XRESP if base24^rel^g >= 5 then begin se^lgth := 0; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48.tag = [ $len( sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. tag ) * [ " " ] ] then begin tkn^id ':=' mobile^pmnts^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @mobile^pmnts^tkn, mob^pmnts^tkn^lgth ) and mobile^pmnts^tkn.pmnt^typ = "03" then begin movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.tag, "48" ); if mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. dom^id ) * [ " " ] ] then begin movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag, "01" ); movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.lgth, "01" ); move( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id ); se^lgth := se^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.lgth ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag^data ); end; if mobile^pmnts^tkn.mc^dgtl^cmrc.pgm^typ <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. pgm^typ ) * [ " " ] ] then begin movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag, "02" ); movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.lgth, "01" ); move( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc.pgm^typ ); se^lgth := se^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.lgth ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag^data ); end; if mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam <> [ $len( mobile^pmnts^tkn. mc^dgtl^cmrc.chk^in^enty^typ^nam ) * [ " " ] ] then begin movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag, "03" ); idx := $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam. byte[ idx ] <> " " then begin done := true; tag^lgth := idx + 1; end; end; ! of while if tag^lgth > $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam. tag^data ) then begin tag^lgth := $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam. tag^data ); end; call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.lgth, tag^lgth ); movl( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam, tag^lgth ); se^lgth := se^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.lgth ) + tag^lgth; end; if mobile^pmnts^tkn.mc^dgtl^cmrc.chk^in^mthd <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd ) * [ " " ] ] then begin movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag, "04" ); idx := $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd.byte[ idx ] <> " " then begin done := true; tag^lgth := idx + 1; end; end; ! of while if tag^lgth > $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data ) then begin tag^lgth := $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data ); end; call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.lgth, tag^lgth ); movl( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd, tag^lgth ); se^lgth := se^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.lgth ) + tag^lgth; end; if se^lgth > 0 then begin call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.lgth, se^lgth ); lgth := 0; call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + se^lgth + 4; call integer^ascii^( sem.addl^data.lgth, lgth ); addl^data^bit^d := 1; end; ! if se^lgth > 0 then ! end; ! if hiswtkn^get^tkn( pstm, ! end; ! if sem.addl^data.info. ! #ADD 15414 PSTM^FRMT^0210^TO^XRESP if sem^acct^stat^inq^d( sem ) and moneysend^ref^data^bit^d then begin tkn^id ':=' vrfn^data1^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @vrfn^data1^tkn, vrfn^data1^tkn^lgth ) then begin call ascii^integer^( sem.moneysend^ref^data.lgth, lgth ); tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^tkn, adnl^vrfn^rslt^tkn^lgth ) and adnl^vrfn^rslt^tkn.frmt^cde = "02" then begin adnl^vrfn^rslt^tkn^fnd := true; end else begin adnl^vrfn^rslt^tkn^fnd := false; end; movd( sem.moneysend^ref^data.info.byte[ lgth ], "08" ); lgth := lgth + 2; movd( sem.moneysend^ref^data.info.byte[ lgth ], "005" ); lgth := lgth + 3; if vrfn^data1^tkn.vrfn^data^typ = "R" then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "01" ); lgth := lgth + 2; end else if vrfn^data1^tkn.vrfn^data^typ = "S" then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "02" ); lgth := lgth + 2; end; movd( sem.moneysend^ref^data.info.byte[ lgth ], "01" ); lgth := lgth + 2; if adnl^vrfn^rslt^tkn^fnd then begin move( sem.moneysend^ref^data.info.byte[ lgth ], adnl^vrfn^rslt^tkn.mc.nam^vrfn^resp ); end else begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "U" ); end; lgth := lgth + 1; call integer^ascii^( sem.moneysend^ref^data.lgth, lgth ); end; ! of if hiswtkn^get^tkn( pstm, end; ! of if sem^acct^stat^inq^d( sem ) and end; ! if base24^rel^g >= 5 then #DELETE 20521 /20599 PSTM^FRMT^SEM^ADDL^DATA #ADD 21030 PSTM^FRMT^SEM^ADDL^DATA sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^assurance^lvl ); #DELETE 21031 /21036 PSTM^FRMT^SEM^ADDL^DATA #ADD 21051 PSTM^FRMT^SEM^ADDL^DATA sub^lgth := sub^lgth + $len( sem.addl^data.info. paypass^mapping^sub^fld^33. tkn^rq^id ); #DELETE 21052 /21057 PSTM^FRMT^SEM^ADDL^DATA #ADD 21067 PSTM^FRMT^SEM^ADDL^DATA lgth := lgth + sub^lgth + 4; #DELETE 21068 PSTM^FRMT^SEM^ADDL^DATA #ADD 21082 PSTM^FRMT^SEM^ADDL^DATA sub^lgth := 0; tkn^id ':=' mobile^pmnts^tkn^id^d; if hiswtkn^get^tkn ( pstm, tkn^id, @mobile^pmnts^tkn, tkn^lgth ) and mobile^pmnts^tkn.pmnt^typ = "03" then begin if mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. dom^id ) * [" "] ] then begin ! ! Move subtag "01" Dom Id ! movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.dom^id.tag, "01" ); movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.dom^id.lgth, "01" ); move( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc. dom^id ); sub^lgth := sub^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. dom^id.lgth ) + $len( mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id ); end; ! of mc^dgtl^cmrc.dom^id <> spaces if mobile^pmnts^tkn.mc^dgtl^cmrc.pgm^typ <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. pgm^typ ) * [" "] ] then begin ! ! Move subtag "02" PGM-TYP ! movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.pgm^typ.tag, "02" ); movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.pgm^typ.lgth, "01" ); move( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc. pgm^typ ); sub^lgth := sub^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. pgm^typ.lgth ) + $len( mobile^pmnts^tkn.mc^dgtl^cmrc. pgm^typ ); end; ! of mc^dgtl^cmrc.pgm^typ <> spaces ! if mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam ) * [" "] ] then begin ! ! ! Move subtag "03" Check-in entity type ! ! and entity name. ! ! ! movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag, "03" ); rscan mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam while " " -> @ptr; data^lgth := 0; data^lgth := $min( $len( mobile^pmnts^tkn. mc^dgtl^cmrc. chk^in^enty^typ^nam ), $max( 0, ( @ptr '-' @mobile^pmnts^tkn. mc^dgtl^cmrc. chk^in^enty^typ^nam ) + 1 ) ); call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.lgth, data^lgth ); movl( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag^data, mobile^pmnts^tkn. mc^dgtl^cmrc.chk^in^enty^typ^nam, data^lgth ); sub^lgth := sub^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.lgth ) + data^lgth; end; ! of mc^dgtl^cmrc.pgm^typ <> spaces ! if mobile^pmnts^tkn.mc^dgtl^cmrc.chk^in^mthd <> [ $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd ) * [" "] ] then begin ! ! Move subtag "04" Check-In Method ! movd( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag, "04" ); rscan mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd while " " -> @ptr; data^lgth := 0; data^lgth := $min( $len( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd ), $max( 0 ,( @ptr '-' @mobile^pmnts^tkn. mc^dgtl^cmrc. chk^in^mthd ) + 1 ) ); call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.lgth, data^lgth ); movl( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data, mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^mthd, data^lgth ); sub^lgth := sub^lgth + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag ) + $len( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.lgth ) + data^lgth; end; if sub^lgth > 0 then begin call integer^ascii^( sem.addl^data.info. dgtl^cmrc^inds^sub^fld^48.lgth, sub^lgth ); lgth := lgth + sub^lgth + 4; movd( sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. tag, "48" ); end; ! of mc^dgtl^cmrc.pgm^typ <> spaces ! end; #ADD 27448 SEM^FRMT^XADV^TO^SEM^XACK acq^cntry^cde^bit^d := 0; #ADD 27611g00 SEM^FRMT^XRESP^TO^PSTM^0210 struct .gtwy^info^tkn( gtwy^info^tkn^def ); #ADD 27613 SEM^FRMT^XRESP^TO^PSTM^0210 struct .mc^gtwy^visa^info^buf( mc^gtwy^visa^info^def ); struct .mobile^pmnts^tkn( mobile^pmnts^tkn^def ); #ADD 27924h0o SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48.tag #DELETE 27924h0p SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27924h0r SEM^FRMT^XRESP^TO^PSTM^0210 move( sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48, rqst.addl^data.info.dgtl^cmrc^inds^sub^fld^48 ); #DELETE 27924h0s/27924h0t SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27964 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! ! Set visa_tran_g to indicate if this tran was initiated by ! ! a Visa card ! ! ! visa_tran_g := false; if pstm.rte.srv = visa_card_d or ( sem.pan.num = "4" and sem.pan.lgth >= "13" and sem.pan.lgth <= "19" ) then begin visa_tran_g := true; end; #ADD 28511r0N SEM^FRMT^XRESP^TO^PSTM^0210 end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "40" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "U" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "41" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "V" ); #ADD 29362H1Z SEM^FRMT^XRESP^TO^PSTM^0210 if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. tag = "48" and rqst.addl^data.info.dgtl^cmrc^inds^sub^fld^48. tag = " " then begin tkn^id ':=' mobile^pmnts^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, mobile^pmnts^tkn ); if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. dom^id.tag = "01" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. dom^id.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag = "02" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.pgm^typ, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag = "03" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag = "04" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.chk^in^mthd, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data ); end; movd( mobile^pmnts^tkn.pmnt^typ, "03" ); tkn^add^lgth := $offset( mobile^pmnts^tkn.mc^dgtl^cmrc. user^fld^mc^dgtl^cmrc ); if tkn^add^lgth > 0 then begin if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, mobile^pmnts^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1834, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1835, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1835 ); end; end; ! of if tkn^result end; ! of if tkn^add^lgth > 0 then end; ! of if sem.addl^data.info. #ADD 29530 SEM^FRMT^XRESP^TO^PSTM^0210 if visa_tran_g then begin ! ! Initialize the Gateway Visa Info token buffer. ! init( mc^gtwy^visa^info^buf, " ", wlen( mc^gtwy^visa^info^buf ) ); tkn^id ':=' gtwy^info^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, gtwy^info^tkn ); move( mc^gtwy^visa^info^buf.mrch^advc^cde, sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data ); move( mc^gtwy^visa^info^buf.cmrcl^choice^pgm^data, sem.addl^data.info.adnl^visa^resp^data^sub^fld^05. cmrcl^choice^pgm.tag^data ); move( mc^gtwy^visa^info^buf.dgtl^authn^pgm, sem.addl^data.info.adnl^visa^resp^data^sub^fld^05. dgtl^authn^pgm.tag^data ); move( mc^gtwy^visa^info^buf.auth^resp^src^rsn^cde, sem.addl^data.info.adnl^visa^resp^data^sub^fld^05. auth^resp^src^rsn^cde.tag^data ); move( mc^gtwy^visa^info^buf.cavv^rslt^cde, sem.addl^data.info.visa^cavv^rslt^cde^sub^fld^45. tag^data ); move( mc^gtwy^visa^info^buf.crd^lvl^rslt, sem.addl^data.info.crd^lvl^rslt^sub^fld^46. tag^data ); movl( mc^gtwy^visa^info^buf.pmnt^srvc^inds, sem.addl^data.info.visa^pmnt^srvcs^sub^fld^78. spend^qualified^ind, $len( mc^gtwy^visa^info^buf.pmnt^srvc^inds ) ); move( mc^gtwy^visa^info^buf.acct^stat^ind, sem.addl^data.info.visa^acct^stat^sub^fld^85. tag^data ); move( mc^gtwy^visa^info^buf.mkt^spcfc^data^id, sem.addl^data.info.visa^mkt^spcfc^data^sub^fld^96. tag^data ); mc^gtwy^visa^info^buf.cmrcl^crd^inq^resp ':=' sem.addl^data.info.visa^cmrcl^sub^fld^94. crd^typ^rqst^ind for $len( sem.addl^data.info. visa^cmrcl^sub^fld^94. crd^typ^rqst^ind ) & sem.addl^data.info.visa^cmrcl^sub^fld^94. rqst^cmrcl^crd^typ for $len( sem.addl^data.info. visa^cmrcl^sub^fld^94. rqst^cmrcl^crd^typ ); move( mc^gtwy^visa^info^buf.ps2000^resp^cde, sem.addl^data.info.ps2000^rqst^data.ind ); move( mc^gtwy^visa^info^buf.ps2000^resp^data, sem.addl^data.info.ps2000^resp^data.resp^data ); if mc^gtwy^visa^info^buf <> [ $len( mc^gtwy^visa^info^buf ) * [ " " ] ] then begin movd( mc^gtwy^visa^info^buf.dataset^id, dataset^id^visa^info^d ); tkn^add^lgth := $len( mc^gtwy^visa^info^buf ); movl( gtwy^info^tkn.gtwy^info, mc^gtwy^visa^info^buf, $len( mc^gtwy^visa^info^buf ) ); movd( gtwy^info^tkn.ver^id, "06" ); tkn^add^lgth := tkn^add^lgth + $len( gtwy^info^tkn.ver^id ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; ! ! Add the Gateway Info token to the internal message ! tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, gtwy^info^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1836, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l ! else begin call log^message^( 1837, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1837 ); end; ! error on tkn add other than no room ! end; end; end; #ADD 30945 SEM^FRMT^XRQST^TO^PSTM^0200 struct .acq^data^tkn( acq^data^tkn^def ); #DELETE 30958 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 30962 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31043 /31044H02 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31046 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31048 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31050 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31050H02 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31052 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31056 /31057 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31062 SEM^FRMT^XRQST^TO^PSTM^0200 int fnd^acq^data^tkn := false; #DELETE 31064 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31072 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32227 SEM^FRMT^XRQST^TO^PSTM^0200 ! Add the Network Token Service token. ! #DELETE 32228 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32231 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^tkn ); tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); #DELETE 32232 /32251 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 32694 /32714 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33004 SEM^FRMT^XRQST^TO^PSTM^0200 if acq^cntry^cde^bit^d then begin tkn^id ':=' acq^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, acq^data^tkn ); movd( acq^data^tkn.frmt^cde, "02" ); movd( acq^data^tkn.lgth, "003" ); move( acq^data^tkn.mc.cntry^cde, sem.acq^inst^cntry^cde ); tkn^add^lgth := $offset( acq^data^tkn.mc.user^fld^aci ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! ! Token already exists, so update the Acquirer Data token ! ! ! if tkn^result = tkn^exist^l then begin fnd^acq^data^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1838, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! ! If any other token add/update error encountered ! ! log a message and abend. ! ! ! if not fnd^acq^data^tkn then begin call log^message^( 1839, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1839 ); end else begin call log^message^( 1841, ! routing code !, @tkn^err^updt, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1841 ); end; end; ! of if tkn^result ! end; ! of if acq^cntry^cde^bit^d then ! #DELETE 34439 /34517 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35470H00 SEM^FRMT^XRQST^TO^PSTM^0200 if addl^data^bit^d then begin if sem.addl^data.info. e^comm^cert^qual^sub^fld^41.tag = "41" then begin tkn^id ':=' ichg^pgm^tkn^id^d; #DELETE 35470H01/35470H0R SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35490 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^pmnt^authn^tkn ); #DELETE 35491 /35509 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35581 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^remt^pmnt^tkn ); #DELETE 35582 /35599 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35618 SEM^FRMT^XRQST^TO^PSTM^0200 dgtl^pmnt^authn^tkn.frmt^cde = "01" then #DELETE 35619 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35679 SEM^FRMT^XRQST^TO^PSTM^0200 if dgtl^remt^pmnt^tkn.frmt^cde = "01" then #DELETE 35680 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35739 SEM^FRMT^XRQST^TO^PSTM^0200 if addl^data^bit^d and sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. tag = "48" then begin tkn^id ':=' mobile^pmnts^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, mobile^pmnts^tkn ); if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. dom^id.tag = "01" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.dom^id, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. dom^id.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag = "02" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.pgm^typ, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. pgm^typ.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag = "03" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc. chk^in^enty^typ^nam, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^enty^typ^nam.tag^data ); end; if sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag = "04" then begin move( mobile^pmnts^tkn.mc^dgtl^cmrc.chk^in^mthd, sem.addl^data.info.dgtl^cmrc^inds^sub^fld^48. chk^in^mthd.tag^data ); end; movd( mobile^pmnts^tkn.pmnt^typ, "03" ); tkn^add^lgth := $offset( mobile^pmnts^tkn.mc^dgtl^cmrc. user^fld^mc^dgtl^cmrc ); if tkn^add^lgth > 0 then begin if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1 ; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, mobile^pmnts^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1842, ! routing code !, @tkn^no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else begin call log^message^( 1843, ! routing code !, @tkn^err^add, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, tkn^result ); call abend^( 1843 ); end; end; ! of if tkn^result end; ! of if tkn^add^lgth > 0 then end; ! of if sem.addl^data.info. #ADD 36290T17 SEM^FRMT^XRQST^TO^PSTM^0200 if acq^cntry^cde^bit^d then begin move( sca^acq^data^tkn.acq^cntry^cde, sem.acq^inst^cntry^cde ); end; #ADD 36372 SEM^FRMT^XRQST^TO^SEM^XRESP define moneysend^ref^data^d = sem.moneysend^ref^data.info.byte#; #ADD 36375 SEM^FRMT^XRQST^TO^SEM^XRESP int data^idx; #ADD 36376 SEM^FRMT^XRQST^TO^SEM^XRESP int moneysend^ref^data^lgth; int processed^tag^lgth; int subelement^lgth; #ADD 36380 SEM^FRMT^XRQST^TO^SEM^XRESP int tag^lgth := 0; string vrfn^data^typ := " "; #ADD 36381 SEM^FRMT^XRQST^TO^SEM^XRESP ?page "subproc sub^process^vrfn^data of sem^frmt^xrqst^to^sem^xresp" !#################################################################! !# #! !# sub^process^vrfn^data #! !# #! !# This subprocedure will format the local variable #! !# vrfn^data^typ if the associated data is present in DE 108. #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !#################################################################! subproc sub^process^vrfn^data; begin data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! ! Process the tag data within the subelement id ! ! ! if moneysend^ref^data^d[ data^idx ] = "01" then begin if moneysend^ref^data^d[ data^idx + 4 ] = "10" then begin vrfn^data^typ ':=' "R"; end else if moneysend^ref^data^d[ data^idx + 4 ] = "11" then begin vrfn^data^typ ':=' "S"; end; data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end else begin ! ! ! Bypass any unrecognized tags ! ! ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; !of while processed^tag^lgth < subelement^lgth ! end; ?page "sem^frmt^xrqst^to^sem^xresp" !#################################################################! !# #! !# This is the main body of PROC sem^frmt^xrqst^to^sem^xresp #! !# #! !#################################################################! #ADD 36467 SEM^FRMT^XRQST^TO^SEM^XRESP if sem^acct^stat^inq^d( sem ) and moneysend^ref^data^bit^d then begin data^idx := 0; call ascii^integer^( sem.moneysend^ref^data.lgth, moneysend^ref^data^lgth ); while data^idx < moneysend^ref^data^lgth do begin if moneysend^ref^data^d[ data^idx ] = "07" then begin call sub^process^vrfn^data; end ! of subelement = "07" else begin ! ! Bypass any unrecognized subelements ! data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^lgth; end; ! of unrecognized subelement end; ! of while data^idx < moneysend^ref^data^lgth do if vrfn^data^typ <> " " then begin call ascii^integer^( sem.moneysend^ref^data.lgth, lgth ); movd( resp.moneysend^ref^data.info.byte[ lgth ], "08" ); lgth := lgth + 2; movd( resp.moneysend^ref^data.info.byte[ lgth ], "005" ); lgth := lgth + 3; if vrfn^data^typ = "R" then begin movd( resp.moneysend^ref^data.info.byte[ lgth ], "01" ); lgth := lgth + 2; end else if vrfn^data^typ = "S" then begin movd( resp.moneysend^ref^data.info.byte[ lgth ], "02" ); lgth := lgth + 2; end; movd( resp.moneysend^ref^data.info.byte[ lgth ], "01" ); lgth := lgth + 2; movd( resp.moneysend^ref^data.info.byte[ lgth ], "U" ); lgth := lgth + 1; call integer^ascii^( resp.moneysend^ref^data.lgth, lgth ); end; end; #ADD 36471 SEM^FRMT^XRQST^TO^SEM^XRESP acq^cntry^cde^bit^d := 0; #ADD 37594 SEM^FRMT^XRVSL^TO^SEM^XACK acq^cntry^cde^bit^d := 0; #ADD 37617 SEM^FRMT^XRVSL^TO^SEM^XACK acq^cntry^cde^bit^d := 0; #ADD 38263 UTIL^ADD^MONEYSEND^TKNS struct .rcv; begin struct first^nam; begin string byte[ 0:34 ]; end; string middle^nam; struct last^nam; begin string byte[ 0:34 ]; end; end; struct .sender; begin struct first^nam; begin string byte[ 0:34 ]; end; string middle^nam; struct last^nam; begin string byte[ 0:34 ]; end; end; struct .vrfn^data1^tkn( vrfn^data1^tkn^def ); #ADD 39013 SUB^PROCESS^RCV^DATA if sem^acct^stat^inq^d( sem^ ) then begin ! ! Initialize the structure rcv. ! init( rcv, " ", wlen( rcv ) ); move( rcv.first^nam, p2p^rcv^data^tkn.mc.first^nam ); move( rcv.middle^nam, p2p^rcv^data^tkn.mc.middle^nam ); move( rcv.last^nam, p2p^rcv^data^tkn.mc.last^nam ); return; end; #ADD 39362 SUB^PROCESS^SENDER^DATA if sem^acct^stat^inq^d( sem^ ) then begin ! ! Initialize the structure sender. ! init( sender, " ", wlen( sender ) ); move( sender.first^nam, p2p^sender^data^tkn.mc.first^nam ); move( sender.middle^nam, p2p^sender^data^tkn.mc.middle^nam ); move( sender.last^nam, p2p^sender^data^tkn.mc.last^nam ); return; end; #ADD 39471 SUB^PROCESS^SENDER^DATA ?page "subproc sub^process^acct^stat^inq of util^add^moneysend^tkns" !#################################################################! !# #! !# sub^process^acct^stat^inq #! !# #! !# This subprocedure will format and add the Verification #! !# Data1 token (J0) if the associated data is present in #! !# DE 108. #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !#################################################################! subproc sub^process^acct^stat^inq; begin tkn^add^lgth := 0; tkn^id ':=' vrfn^data1^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, vrfn^data1^tkn ); while data^idx < moneysend^ref^data^lgth do begin if moneysend^ref^data^d[ data^idx ] = "01" then begin call sub^process^rcv^data; end ! of subelement = "01" else if moneysend^ref^data^d[ data^idx ] = "02" then begin call sub^process^sender^data; end ! of subelement = "02" else if moneysend^ref^data^d[ data^idx ] = "07" then begin tkn^add^lgth := 0; data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l; processed^tag^lgth := 0; while processed^tag^lgth < subelement^lgth do begin ! ! Process the tag data within the subelement id ! if moneysend^ref^data^d[ data^idx ] = "01" then begin if moneysend^ref^data^d[ data^idx + 4 ] = "10" then begin vrfn^data1^tkn.vrfn^data^typ ':=' "R"; end else if moneysend^ref^data^d[ data^idx + 4 ] = "11" then begin vrfn^data1^tkn.vrfn^data^typ ':=' "S"; end; tkn^add^lgth := tkn^add^lgth + $len( vrfn^data1^tkn.vrfn^data^typ ); data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end else begin ! ! Bypass any unrecognized tags ! data^idx := data^idx + tag^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], tag^lgth^fld^lgth^l, tag^lgth ); data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l; processed^tag^lgth := processed^tag^lgth + tag^id^lgth^l + tag^lgth^fld^lgth^l + tag^lgth; end; end; ! of while processed^tag^lgth < if vrfn^data1^tkn.vrfn^data^typ = "R" then begin movl( vrfn^data1^tkn.first^nam, rcv.first^nam, $len( rcv.first^nam ) ); movl( vrfn^data1^tkn.middle^nam, rcv.middle^nam, $len( rcv.middle^nam ) ); movl( vrfn^data1^tkn.last^nam, rcv.last^nam, $len( rcv.last^nam ) ); end else if vrfn^data1^tkn.vrfn^data^typ = "S" then begin movl( vrfn^data1^tkn.first^nam, sender.first^nam, $len( sender.first^nam ) ); movl( vrfn^data1^tkn.middle^nam, sender.middle^nam, $len( sender.middle^nam ) ); movl( vrfn^data1^tkn.last^nam, sender.last^nam, $len( sender.last^nam ) ); end; tkn^add^lgth := tkn^add^lgth + $len( vrfn^data1^tkn.first^nam ) + $len( vrfn^data1^tkn.middle^nam ) + $len( vrfn^data1^tkn.last^nam ); end ! of while data^idx < else begin ! ! Bypass any unrecognized subelements ! data^idx := data^idx + subelement^id^lgth^l; call ascii^integer( moneysend^ref^data^d[ data^idx ], subelement^lgth^fld^lgth^l, subelement^lgth ); data^idx := data^idx + subelement^lgth^fld^lgth^l + subelement^lgth; end; ! of unrecognized subelement end; ! of while data^idx < moneysend^ref^data^lgth do if tkn^add^lgth > 0 then begin movd( vrfn^data1^tkn.spcf^use^frmt^cde, "00" ); tkn^add^lgth := $offset( vrfn^data1^tkn.spcf^use ); tkn^id ':=' vrfn^data1^tkn^id^d; ! ! ! The token must end on a word boundary ! ! ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, vrfn^data1^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); ! ! ! Token already exists, so update the token ! ! ! if tkn^rslt = tkn^exist^l then begin tkn^found := true; tkn^rslt := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, vrfn^data1^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1844, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num ); end else ! ! ! If any other token add/update error encountered log ! ! a message and abend. ! ! ! if not tkn^found then begin call log^message^( 1845, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1845 ); end else begin call log^message^( 1846, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, tkn^rslt, @pan, evt^pan^lgth, @pstm.seq^num ); call abend^( 1846 ); end; end; ! of if tkn^rslt ! end; end; #ADD 39505 SUB^PROCESS^SENDER^DATA if sem^acct^stat^inq^d( sem^ ) then begin call sub^process^acct^stat^inq; return; end; #ADD 41548 TRACE^SEM ! ! ! Additional Visa Response Data ! ! ! if hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. tag = "05" then begin ! ! ! Move the tag and the tag length ! ! ! movl( ptr, hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! ! Move Subfield 1 - Commercial Choice Program ! ! ! if hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. cmrcl^choice^pgm.tag = "01" then begin call ascii^integer( hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. cmrcl^choice^pgm.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. cmrcl^choice^pgm.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! ! ! Move Subfield 2 - Digital Authn Program ! ! ! if hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. dgtl^authn^pgm.tag = "02" then begin call ascii^integer( hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. dgtl^authn^pgm.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. dgtl^authn^pgm.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! ! ! ! Move Subfield 3 - Auth Resp Src Rsn Cde ! ! ! if hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. auth^resp^src^rsn^cde. tag = "03" then begin call ascii^integer( hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. auth^resp^src^rsn^cde.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^visa^resp^data^sub^fld^05. auth^resp^src^rsn^cde.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 03 ! end; ! of if hdr...tag = "05" ! #ADD 46325 TRACE^SEM ! ! ! Additional Visa Response Data ! ! ! if ptr[ length ] = "05" then begin ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. adnl^visa^resp^data^sub^fld^05. tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! ! Move Subfield1 - Cmrcl Choice Pgm ! ! ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^visa^resp^data^sub^fld^05. cmrcl^choice^pgm.tag ); end ! subfield 01 ! else ! ! ! Move Subfield2 - Digital Authn Pgm ! ! ! if sub^ptr = "02" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^visa^resp^data^sub^fld^05. dgtl^authn^pgm.tag ); end ! subfield 02 ! else ! ! ! Move Subfield3 - Auth Rsp Src Rsncde! ! ! if sub^ptr = "03" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^visa^resp^data^sub^fld^05. auth^resp^src^rsn^cde. tag ); end ! subfield 03 ! else ! ! ! bad data, clear sem de-48.se-05,! ! end loop ! ! ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. adnl^visa^resp^data^sub^fld^05. tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. adnl^visa^resp^data^sub^fld^05, " ", $len( sem^ptr.addl^data.info. adnl^visa^resp^data^sub^fld^05) ); loop^lgth := tag^length; end; end; ! of loop ! length := length + tag^length + 4; end ! of if ptr[ length ] = "05" ! else #REPLACE 47521 OFFSET 1/47521 OFFSET 1 TRACE^SEM movl( sem^ptr.addl^data.info. ps2000^rqst^data.tag, #REPLACE 47529 OFFSET 1/47529 OFFSET 1 TRACE^SEM movl( sem^ptr.addl^data.info. ps2000^resp^data.tag, #ADD 48382 TRACE^SEM processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do #DELETE 48383 TRACE^SEM #ADD 48395 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48396 TRACE^SEM #ADD 48406 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48407 TRACE^SEM #ADD 48416 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48417 TRACE^SEM #ADD 48427 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48428 TRACE^SEM #ADD 48437 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48438 TRACE^SEM #ADD 48446 TRACE^SEM length := length + sub^lgth + 4; #ADD 48482 TRACE^SEM processed^tag^lgth := 0; #ADD 48483 TRACE^SEM while ( processed^tag^lgth < tag^length ) do #DELETE 48484 TRACE^SEM #ADD 48496 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48497 TRACE^SEM #ADD 48506 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48507 TRACE^SEM #ADD 48514 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48515 TRACE^SEM #ADD 48521 TRACE^SEM length := length + sub^lgth + 4; #ADD 48534I0D TRACE^SEM processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do #DELETE 48534I0E TRACE^SEM #ADD 48534o02 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I0S TRACE^SEM #ADD 48534I0c TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I0d TRACE^SEM #ADD 48534I0n TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I0o TRACE^SEM #ADD 48534I0z TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I10 TRACE^SEM #ADD 48534I1B TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I1C TRACE^SEM #ADD 48534I1N TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I1O TRACE^SEM #ADD 48534I1U TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534I1V TRACE^SEM #ADD 48534I1X TRACE^SEM length := length + sub^lgth + 4; #ADD 48534y0D TRACE^SEM processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do #DELETE 48534y0E TRACE^SEM #ADD 48534y0S TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y0T TRACE^SEM #ADD 48534y0e TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y0f TRACE^SEM #ADD 48534y0q TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y0r TRACE^SEM #ADD 48534y11 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y12 TRACE^SEM #ADD 48534y1C TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y1D TRACE^SEM #ADD 48534y1N TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y1O TRACE^SEM #ADD 48534y1Y TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y1Z TRACE^SEM #ADD 48534y1j TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y1k TRACE^SEM #ADD 48534y1v TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y1w TRACE^SEM #ADD 48534y26 TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y27 TRACE^SEM #ADD 48534y2I TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y2J TRACE^SEM #ADD 48534y2T TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y2U TRACE^SEM #ADD 48534y2e TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y2f TRACE^SEM #ADD 48534y2l TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534y2m TRACE^SEM #ADD 48534y2n TRACE^SEM length := length + sub^lgth + 4; #ADD 48534g0B TRACE^SEM processed^tag^lgth := 0; while ( processed^tag^lgth < tag^length ) do #DELETE 48534g0C TRACE^SEM #ADD 48534g0P TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534g0Q TRACE^SEM #ADD 48534g0Z TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534g0a TRACE^SEM #ADD 48534g0k TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534g0l TRACE^SEM #ADD 48534g0r TRACE^SEM processed^tag^lgth := processed^tag^lgth + sub^lgth + 4; #DELETE 48534g0s TRACE^SEM #ADD 48534g0t TRACE^SEM length := length + sub^lgth + 4; #ENDSCN = SW0R245 !#CMP2.28 09/12/23 BNETLIBS6359 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6359 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6359 * ******************************************************************************** #SCN = SW0R278 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6359 #NEWVERSION = 6360 #ADD 11002-0q ! 11SEP2023 KandhaB ! Symptom: Mastercard Data Integrity Monitoring Program threshold ! being reached for external response code '05'. ! Problem: The interface maps PSTM internal response code '058' to ! Mastercard external response code '05' due to which ! Mastercard Data Integrity Monitoring Program threshold ! being reached for external response code '05'. ! Fix: The interface has been modified to map PSTM internal ! response code '058' to external response code '14'. ! Proc Modified: pstm^frmt^resp^cde^to^sem ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3571122 #ADD 18554r00 PSTM^FRMT^RESP^CDE^TO^SEM "058",! Declined Card Status ! "14",! Invalid card number #DELETE 18554r01 PSTM^FRMT^RESP^CDE^TO^SEM #ENDSCN = SW0R278 !#CMP2.28 09/19/23 BNETLIBS6360 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6360 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6360 * ******************************************************************************** #SCN = SW0R279 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6360 #NEWVERSION = 6361 #ADD 11002:0F ! 19SEP2023 ChristL ! Symptom: Interface adds token CZ for a variable length. ! Problem: While adding Token CZ,the length is calculated based on ! the $offset rather than $len. ! Fix: Modified the code to add the token for the length of ! the token definition. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3573432. #ADD 35080 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( pos^data2^tkn ); #DELETE 35081 /35082 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0R279 !#CMP2.28 09/25/23 BNETS 6172 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6172 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6172 * ******************************************************************************** #SCN = SW0R282 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6172 #NEWVERSION = 6173 #ADD 03821(0F ! 25SEP2023 wielerk ! Symptom: Interface abends with Trap #0 processing a type 16 ! timer expiration. ! Problem: If the timer is the last in the timer table, when the ! userbuf is moved to a local variable the length of ! the move exceeds the 64K boundary. ! Fix: Modified code to use the define movl instead of the ! define move. ! Proc Modified: tim^out^16^actvt^intrvl ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3576909. #REPLACE 23899 TIM^OUT^16^ACTVT^INTRVL movl( local^userbuf, userbuf, wlen( userbuf ) ); #ENDSCN = SW0R282 !#CMP2.28 09/30/23 BNETLIBS6361 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6361 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6361 * ******************************************************************************** #SCN = SW0R285 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6361 #NEWVERSION = 6362 #ADD 11002;0C ! 30SEP2023 ChristL ! Symptom: DE48 SE84 Token FN not populated with RESP-CDE-CAT ! when RC is 51. ! Problem: During response 0110, if DE 48 SE 84 is present with ! value 40 or 41 and if the response code is 51, the ! interface does not format the token FN with ! field RESP-CDE-CAT. ! Fix: Modified the code to add the token FN with field ! RESP-CDE-CAT set, if the values 40 or 41 is ! received in DE 48 SE 84 with RC = 51. ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS ! Run Make. ! Reference: Case #3575845. #ADD 28511r00 SEM^FRMT^XRESP^TO^PSTM^0210 end; #DELETE 28511r01/28511r02 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0R285 !#CMP2.28 10/27/23 BNETS 6173 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6173 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6173 * ******************************************************************************** #SCN = SW0R310 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6173 #NEWVERSION = 6174 #ADD 03821)0E ! 27OCT2023 wielerk ! Symptom: Interface abends with Trap #3 processing an umnatched ! reversal. ! Problem: Increases in the size of the SEM causes the process ! to abend when processing an unmatched reversal with ! the internal trace^g toggled on. ! Fix: Modified code to move the collapse of the SEM back ! one level to remove the additional CSEM from the ! memory stack ! Procs Modified: pstm^0220^force^post ! pstm^0420^reversal ! pstm^send^unmatchd^xrvsl^pos ! Dependency: Apply fix to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3582403. #ADD 16339f08 PSTM^0220^FORCE^POST if not util^^collapse( sem, csem, extlgth ) then begin movd( pstm.tran.tran^cde, "21" ); call util^ilf^add( pct.setl.swi^dat, susp.prikey, $len( susp.prikey ), pos^l, msg^sym^source, pstm, sem, ilf^sem^lgth, sub^format^error^l ); return; end; call util^saf^add( csem, extlgth, pos^l, service^typ ); #ADD 16764f06 PSTM^0420^REVERSAL if not util^^collapse( sem, csem, extlgth ) then begin movd( pstm.typ, reversal^d ); call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^system^error^l ); return; end; call util^saf^add( csem, extlgth, pos^l, service ); #ADD 16764f0S PSTM^0420^REVERSAL if not util^^collapse( sem, csem, extlgth ) then begin movd( pstm.typ, reversal^d ); call util^ilf^add( pct.setl.swi^dat, ilf.prikey, $len( ilf.prikey ), pos^l, msg^sym^source, pstm, sem, $len( sem ), sub^system^error^l ); return; end; call util^saf^add( csem, extlgth, pos^l, service ); #DELETE 17066f0T PSTM^SEND^UNMATCHD^XRVSL^POS #DELETE 17066f0Y PSTM^SEND^UNMATCHD^XRVSL^POS #DELETE 17066f1g/17066f1n PSTM^SEND^UNMATCHD^XRVSL^POS #ENDSCN = SW0R310 !#CMP2.28 10/27/23 BNETLIBS6362 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6362 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6362 * ******************************************************************************** #SCN = SW0R311 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6362 #NEWVERSION = 6363 #ADD 11002<0G ! 27OCT2023 wielerk ! Symptom: Additional Trace Id Token ( SW ) is added for incorrect ! length. ! Problem: When formatting an external response, the SW token is ! added using the $len of the Compliance Token ( 20 ). ! Fix: Modified the code to add the token SW with the correct ! $len( adnl^trace^id^tkn ). ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3582403. #REPLACE 28546 SEM^FRMT^XRESP^TO^PSTM^0210 $len( adnl^trace^id^tkn ), #ENDSCN = SW0R311 !#CMP2.28 11/26/23 BNETG 60139FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60139 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60139 * ******************************************************************************** #SCN = SW0R335 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $000260Y ! 27NOV2023 ChristL ! Symptom: Banknet Release 23.Q4 Phase 2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirement: ! AN 6797 - Supporting ISO Format 4 PIN Blocks ! - Introduced a data element usage layout for Data ! Element (DE) 110 to support ISO format 4 PIN blocks. ! - Added a literal for DE 110 under section ! bnet^literals. ! - Deleted the literals nmm^key^change^rqst^l as it ! is not used and nmm^rqst^key^xchng^old^l as it ! will no longer be supported by the interface. ! - Added a global variable to hold the values of the ! new LCONF parameter SW-BNET-SEND-DE-110. ! - Modified variable nmm^bit^map^tbl^g to remove ! support for DE 48. ! - Modified variable sem^bit^map^tbl^g to add ! support for DE 110. ! - Added logic to initialize the new global variable ! bnet^g.send^de^110^g. ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETS and BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETMNWD and BNETUPDT ! Run Make. ! Reference: WO #PDM-005306 #ADD P0024500 literal adnl^data^2^field^l = 110; #DELETE 00282P02/i0028201 #ADD x0043503 int send^de^110^g; #ADD 00683 48, -1, 0, 0, ! Not used ! #DELETE 00684 #ADD 01046 110, 3, sem^field( adnl^data^2 ), #DELETE 01047 #ENDSCN = SW0R335 !#CMP2.28 11/26/23 BNETLIBS6363 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6363 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6363 * ******************************************************************************** #SCN = SW0R336 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6363 #NEWVERSION = 6364 #ADD 11002=0D ! 27NOV2023 ChristL ! Symptom: Banknet Release 23.Q4 Phase 2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirement: ! AN 6797 - Supporting ISO Format 4 PIN Blocks ! - Introduced a data element usage layout for Data ! Element (DE) 110 to support ISO format 4 PIN blocks. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadv ! pstm^frmt^0420^to^acq^xrvsl ! pstm^frmt^pin^chng^to^xrqst ! sem^frmt^nmm^request ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^sem^xrvsl ! util^collapse^nmm ! util^collapse^sem ! util^expand^nmm ! util^expand^sem ! Procs Added: util^collapse^tlv ! util^expand^tlv ! Subprocs Added: collapse^dataset^fld^110^sem of ! util^collapse^tlv ! collapse^dataset^fld^110^nmm of ! util^collapse^tlv ! expand^dataset^fld^110^sem of ! util^expand^tlv ! expand^dataset^fld^110^nmm of ! util^expand^tlv ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETS and BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #PDM-005306 #ADD 12088 PSTM^FRMT^0200^TO^XRQST string hex^val^tag86[ 0:3 ] := [ 4 * [ " " ] ]; #ADD 12710 SUB^LOG^ERROR if bnet^g.send^de^110^g then begin return sub^log^error( merch^typ^field^l, adnl^data^2^field^l ); end else begin return sub^log^error( merch^typ^field^l, pin^data^field^l ); end; #DELETE 12711 /12712 SUB^LOG^ERROR #ADD 13653 SUB^LOG^ERROR if bnet^g.send^de^110^g then begin return sub^log^error( pos^entry^field^l, adnl^data^2^field^l ); end else begin return sub^log^error( pos^entry^field^l, pin^data^field^l ); end; #DELETE 13654 /13655 SUB^LOG^ERROR #ADD 13711 SUB^LOG^ERROR if bnet^g.send^de^110^g then begin return sub^log^error( adnl^data^2^field^l, 0 ); end else begin return sub^log^error( pin^data^field^l, 0 ); end; #DELETE 13712 SUB^LOG^ERROR #ADD 13730 SUB^LOG^ERROR if bnet^g.send^de^110^g then begin adnl^data^2^bit^d := 1; temp^len := 0; sem.adnl^data^2.encrypt^data.tag^80.id ':=' [%h80]; sem.adnl^data^2.encrypt^data.tag^80.lgth ':=' [%h01]; sem.adnl^data^2.encrypt^data.tag^80.cntl ':=' [%h00]; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^80 ); sem.adnl^data^2.encrypt^data.tag^81.id ':=' [%h81]; sem.adnl^data^2.encrypt^data.tag^81.lgth ':=' [%h08]; sem.adnl^data^2.encrypt^data.tag^81.key^set^id ':=' %h00 & %h00 & %h00 & %h00 & %h00 & %h00 & %h00 & %h00; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^81 ); if enhnc^key^mgmt^g then begin sem.adnl^data^2.encrypt^data.tag^83.id ':=' [%h83]; sem.adnl^data^2.encrypt^data.tag^83.lgth ':=' [%h01]; sem.adnl^data^2.encrypt^data.tag^83.algo ':=' [%h03]; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data. tag^83 ); sem.adnl^data^2.encrypt^data.tag^86.id ':=' [%h86]; sem.adnl^data^2.encrypt^data.tag^86.lgth ':=' [%h01]; call integer^ascii( hex^val^tag86, 4, ekm^acq^pek^idx^g ); call hexchar^binary( hex^val^tag86[ 2 ], 2, sem.adnl^data^2.encrypt^data.tag^86. key^idx ); temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^86 ); end; sem.adnl^data^2.encrypt^data.tag^87.id ':=' [%h87]; sem.adnl^data^2.encrypt^data.tag^87.lgth ':=' [%h01]; sem.adnl^data^2.encrypt^data.tag^87.pin^frmt ':=' [%h10]; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^87 ); sem.adnl^data^2.encrypt^data.tag^88.id ':=' [%h88]; sem.adnl^data^2.encrypt^data.tag^88.lgth ':=' [%h08]; call hexchar^binary( pin^buffer, pinlgth, sem.adnl^data^2.encrypt^data.tag^88.pin ); temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^88 ); sem.adnl^data^2.encrypt^data.ds^id ':=' [%h01]; sem.adnl^data^2.encrypt^data.ds^lgth.byte[0] := temp^len.<0:7>; sem.adnl^data^2.encrypt^data.ds^lgth.byte[1] := temp^len.<8:15>; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.ds^id ) + $len( sem.adnl^data^2.encrypt^data.ds^lgth ); call integer^ascii( sem.adnl^data^2.lgth, 3, temp^len ); end else begin pin^bit^d := 1; call hexchar^binary( pin^buffer, pinlgth, sem.pin ); if enhnc^key^mgmt^g then begin sec^control^info^bit^d := 1; mov^( sem.sec^info, zeroes ); movd( sem.sec^info.sec^typ, "97" ); movd( sem.sec^info.encr^typ, "01" ); call integer^ascii^( sem.sec^info.pb^frmt, ekm^pin^blk^frmt^g ); call integer^ascii^( sem.sec^info.pk^idx^num, ekm^acq^pek^idx^g ); end; end; ! of if bnet^g.send^de^110^g then #DELETE 13731 /13747 SUB^LOG^ERROR #ADD 13754 SUB^LOG^ERROR if pin^bit^d or adnl^data^2^bit^d then #DELETE 13755 SUB^LOG^ERROR #ADD 14335 SUB^LOG^ERROR if ( ( not bnet^g.send^de^110^g and pin^bit^d ) or ( bnet^g.send^de^110^g and adnl^data^2^bit^d ) ) and #DELETE 14336 SUB^LOG^ERROR #ADD 14340 SUB^LOG^ERROR if adnl^data^2^bit^d then begin return sub^log^error( adnl^data^2^field^l, 0 ); end else begin return sub^log^error( new^pin^field^l, 0 ); end; #DELETE 14341 SUB^LOG^ERROR #ADD 14350 SUB^LOG^ERROR if bnet^g.send^de^110^g then begin return sub^log^error( adnl^data^2^field^l, emv^data^field^l ); end else begin return sub^log^error( pin^data^field^l, emv^data^field^l ); end; #DELETE 14351 /14352 SUB^LOG^ERROR #ADD 14624y02 PSTM^FRMT^0210^TO^XRESP adnl^data^2^bit^d := 0; #ADD 15918 PSTM^FRMT^0220^TO^XADV adnl^data^2^bit^d := 0; ! S-110 ! #ADD 16179 PSTM^FRMT^0420^TO^ACQ^XRVSL adnl^data^2^bit^d := 0; ! S-110 ! #ADD 18320 PSTM^FRMT^PIN^CHNG^TO^XRQST int temp^len := 0; #ADD 18418 PSTM^FRMT^PIN^CHNG^TO^XRQST if bnet^g.send^de^110^g then begin movl( temp^len, sem.adnl^data^2.encrypt^data.ds^lgth, 2 ); sem.adnl^data^2.encrypt^data.tag^89.id ':=' [ %h89 ]; sem.adnl^data^2.encrypt^data.tag^89.lgth ':=' [ %h08 ]; call hexchar^binary( pin^buffer, new^epin^lgth, sem.adnl^data^2.encrypt^data.tag^89.new^pin ); temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^89 ); sem.adnl^data^2.encrypt^data.ds^lgth ':=' [ $len( sem.adnl^data^2.encrypt^data.ds^lgth ) * [ " " ] ]; sem.adnl^data^2.encrypt^data.ds^lgth.byte[0] := temp^len.<0:7>; sem.adnl^data^2.encrypt^data.ds^lgth.byte[1] := temp^len.<8:15>; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.ds^id ) + $len( sem.adnl^data^2.encrypt^data.ds^lgth ); call integer^ascii^( sem.adnl^data^2.lgth, temp^len ); end else begin new^pin^bit^d := 1; call hexchar^binary( pin^buffer, new^epin^lgth, sem.new^pin^data ); end; #DELETE 18419 /18422 PSTM^FRMT^PIN^CHNG^TO^XRQST #ADD 25869 SEM^FRMT^NMM^REQUEST int temp^len := 0; #ADD 25871 SEM^FRMT^NMM^REQUEST string .hex^val^tag86[ 0:3 ] := [ 4 * [ " " ] ]; #DELETE 25909 SEM^FRMT^NMM^REQUEST #ADD 25961 SEM^FRMT^NMM^REQUEST if bnet^g.send^de^110^g then begin adnl^data^2^bit^d := 1; temp^len := 0; sem.adnl^data^2.encrypt^data.tag^80.id ':=' [%h80]; sem.adnl^data^2.encrypt^data.tag^80.lgth ':=' [%h01]; sem.adnl^data^2.encrypt^data.tag^80.cntl ':=' [%h00]; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^80 ); sem.adnl^data^2.encrypt^data.tag^81.id ':=' [%h81]; sem.adnl^data^2.encrypt^data.tag^81.lgth ':=' [%h08]; sem.adnl^data^2.encrypt^data.tag^81.key^set^id ':=' %h00 & %h00 & %h00 & %h00 & %h00 & %h00 & %h00 & %h00; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^81 ); sem.adnl^data^2.encrypt^data.tag^83.id ':=' [%h83]; sem.adnl^data^2.encrypt^data.tag^83.lgth ':=' [%h01]; sem.adnl^data^2.encrypt^data.tag^83.algo ':=' [%h03]; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^83 ); sem.adnl^data^2.encrypt^data.tag^86.id ':=' [ %h86 ]; sem.adnl^data^2.encrypt^data.tag^86.lgth ':=' [ %h01 ]; call integer^ascii( hex^val^tag86, 4, ekm^acq^pek^idx^g ); call hexchar^binary( hex^val^tag86[ 2 ], 2, sem.adnl^data^2.encrypt^data.tag^86. key^idx ); temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.tag^86 ); sem.adnl^data^2.encrypt^data.ds^id ':=' [ %h04 ]; sem.adnl^data^2.encrypt^data.ds^lgth.byte[0] := temp^len.<0:7>; sem.adnl^data^2.encrypt^data.ds^lgth.byte[1] := temp^len.<8:15>; temp^len := temp^len + $len( sem.adnl^data^2.encrypt^data.ds^id ) + $len( sem.adnl^data^2.encrypt^data.ds^lgth ); call integer^ascii( sem.adnl^data^2.lgth, 3, temp^len ); end else #DELETE 26186 SEM^FRMT^NMM^REQUEST #ADD 26209 SEM^FRMT^NMM^REQUEST if nmm^info^cde = nmm^rqst^key^xchng^l then #DELETE 26210 /26211 SEM^FRMT^NMM^REQUEST #ADD 31210 SEM^FRMT^XRQST^TO^PSTM^0200 not pin^bit^d and not adnl^data^2^bit^d and not ( sem.addl^data.info.pin^svc^cde^sub^fld^80.tag = "80" and sem.addl^data.info.pin^svc^cde^sub^fld^80.cde = "PV" ) then #DELETE 31211 /31213 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33675 SEM^FRMT^XRQST^TO^PSTM^0200 if not pin^bit^d and not adnl^data^2^bit^d then #DELETE 33676 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33689 SEM^FRMT^XRQST^TO^PSTM^0200 if pin^bit^d then begin call binary^hexchar( pin^buffer, 16, sem.pin ); end else if adnl^data^2^bit^d then begin call binary^hexchar( pin^buffer, 16, sem.adnl^data^2.encrypt^data.tag^88.pin ); end; #DELETE 33690 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 33743 SEM^FRMT^XRQST^TO^PSTM^0200 if adnl^data^2^bit^d then begin movd( data^elem^err^g, "110" ); end else begin movd( data^elem^err^g, "052" ); end; #DELETE 33744 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 34062 SEM^FRMT^XRQST^TO^PSTM^0200 adnl^data^2^bit^d or #ADD 36501y02 SUB^PROCESS^VRFN^DATA adnl^data^2^bit^d := 0; #ADD 36636 SEM^FRMT^XRQST^TO^SEM^XRVSL if pin^bit^d or adnl^data^2^bit^d then #DELETE 36637 SEM^FRMT^XRQST^TO^SEM^XRVSL #ADD 36641 SEM^FRMT^XRQST^TO^SEM^XRVSL adnl^data^2^bit^d := 0; #ADD 41204 TRACE^NMM if index = 109 then begin if not util^collapse^tlv( hdr, ptr, length, 110 ) then begin return ( index + 1 ); end; set ( translate^field, false ); end else begin ptr ':=' sem[ offset ] for length; if translate^field then begin call translate( ptr, length, ascii^to^ebcdic^l ); end; end; #DELETE 41205 /41207 TRACE^NMM #ADD 41519 TRACE^SEM index <> 109 and #ADD 44095 TRACE^SEM if index = 109 then ! field 110 ! begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then ! ! ! External message is too long. ! ! ! begin return ( index + 1 ); end; if not util^collapse^tlv( hdr, ptr, length, 110 ) then begin return ( index + 1 ); end; set( translate^field, false ); @ptr := @ptr '+' length; end ! index = 110 ! else #ADD 44645 TRACE^SEM index <> 109 and #ADD 44798 UTIL^COLLAPSE^SETL ?section util^collapse^tlv ?page "util^collapse^tlv" !#####################################################################! !# #! !# util^collapse^tlv #! !# #! !# This procedure collapses fields that are sent in Tag Length #! !# Value (TLV) format. #! !# #! !# INPUT PARAMETERS: #! !# xsem - Internal SEM. #! !# field - external field to be converted. #! !# #! !# OUTPUT PARAMETERS: #! !# ptr - Pointer to external SEM. #! !# Length - Length of collapsed TLV field. #! !# #! !# RETURN: #! !# True - if SEM collapse is successful #! !# False - if SEM collapse is unsuccessful. #! !# #! !#####################################################################! int proc util^collapse^tlv( xsem, ptr, length, field ); string .xsem; string .ptr; int .length; int field; begin int tag^length; string .nmm( nmm^def ) := @xsem; string .sem( sem^def ) := @xsem; ?page "subproc collapse^dataset^fld^110^sem of util^collapse^tlv" !#################################################################!! !# #!! !# collapse^dataset^fld^110^sem #!! !# #!! !# This subprocedure is used to collapse data in a SEM field #!! !# 110 Dataset ID 01 to a collapsed Dataset ID/TLV format. The #!! !# Dataset ID, tags, tag length and tag values fields remain #!! !# in the binary format they are received in. Dataset ID length #!! !# and data element length are converted from ascii to ebcdic. #!! !# #!! !# INPUT PARAMETERS: #!! !# #!! !# OUTPUT PARAMETERS: #!! !# Length - length of the processed data to return #!! !# to the calling procedure. #!! !# #!! !# RETURN: #!! !# True - if SEM collapse is successful #!! !# False - if SEM collapse is unsuccessful. #!! !# #!! !#################################################################!! int subproc collapse^dataset^fld^110^sem( length ); int .length; begin ptr ':=' sem.adnl^data^2.lgth for $len( sem.adnl^data^2.lgth ); call translate( ptr, $len( sem.adnl^data^2.lgth ), ascii^to^ebcdic^l ); length := 3; tag^length := 0; @ptr := @ptr '+' length; if sem.adnl^data^2.encrypt^data.ds^id = %h01 then begin movl( ptr, sem.adnl^data^2.encrypt^data.ds^id, 3 ); @ptr := @ptr '+' 3; length := length + 3; ! ! ! Move Tag-80 ! ! ! if sem.adnl^data^2.encrypt^data.tag^80.id = %h80 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^80.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^80.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-80 ! ! ! ! Move Tag-81 ! ! ! if sem.adnl^data^2.encrypt^data.tag^81.id = %h81 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^81.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^81.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-81 ! ! ! ! Move Tag-83 ! ! ! if sem.adnl^data^2.encrypt^data.tag^83.id = %h83 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^83.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^83.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-83 ! ! ! ! Move Tag-86 ! ! ! if sem.adnl^data^2.encrypt^data.tag^86.id = %h86 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^86.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^86.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-86 ! ! ! ! Move Tag-87 ! ! ! if sem.adnl^data^2.encrypt^data.tag^87.id = %h87 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^87.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^87.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-87 ! ! ! ! Move Tag-88 ! ! ! if sem.adnl^data^2.encrypt^data.tag^88.id = %h88 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^88.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^88.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-88 ! ! ! ! Move Tag-89 ! ! ! if sem.adnl^data^2.encrypt^data.tag^89.id = %h89 then begin tag^length := 0; tag^length := sem.adnl^data^2.encrypt^data.tag^89.lgth; movl( ptr, sem.adnl^data^2.encrypt^data.tag^89.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-89 ! end else begin return false; end; return true; end; ! of subproc collapse^dataset^fld^110^sem ! ?page "subproc collapse^dataset^fld^110^nmm of util^collapse^tlv" !#################################################################!! !# #!! !# collapse^dataset^fld^110^nmm #!! !# #!! !# This subprocedure is used to collapse data in a NMM field #!! !# 110 Dataset ID 04 to a collapsed Dataset ID/TLV format. The #!! !# Dataset ID, tags, tag length and tag values fields remain #!! !# in the binary format they are received in. Dataset ID length #!! !# and data element length are converted from ascii to ebcdic. #!! !# #!! !# INPUT PARAMETERS: #!! !# #!! !# OUTPUT PARAMETERS: #!! !# length - length of the processed data to return #!! !# to the calling procedure. #!! !# #!! !# RETURN: #!! !# True - if NMM collapse is successful #!! !# False - if NMM collapse is unsuccessful. #!! !# #!! !#################################################################!! int subproc collapse^dataset^fld^110^nmm( length ); int .length; begin ptr ':=' nmm.adnl^data^2.lgth for $len( nmm.adnl^data^2.lgth ); call translate( ptr, $len( nmm.adnl^data^2.lgth ), ascii^to^ebcdic^l ); length := 3; tag^length := 0; @ptr := @ptr '+' length; if nmm.adnl^data^2.encrypt^data.ds^id = %h04 then begin movl( ptr, nmm.adnl^data^2.encrypt^data.ds^id, 3 ); @ptr := @ptr '+' 3; length := length + 3; ! ! ! Move Tag-80 ! ! ! if nmm.adnl^data^2.encrypt^data.tag^80.id = %h80 then begin tag^length := 0; tag^length := nmm.adnl^data^2.encrypt^data.tag^80.lgth; movl( ptr, nmm.adnl^data^2.encrypt^data.tag^80.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-80 ! ! ! ! Move Tag-81 ! ! ! if nmm.adnl^data^2.encrypt^data.tag^81.id = %h81 then begin tag^length := 0; tag^length := nmm.adnl^data^2.encrypt^data.tag^81.lgth; movl( ptr, nmm.adnl^data^2.encrypt^data.tag^81.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-81 ! ! ! ! Move Tag-83 ! ! ! if nmm.adnl^data^2.encrypt^data.tag^83.id = %h83 then begin tag^length := 0; tag^length := nmm.adnl^data^2.encrypt^data.tag^83.lgth; movl( ptr, nmm.adnl^data^2.encrypt^data.tag^83.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-83 ! ! ! ! Move Tag-86 ! ! ! if nmm.adnl^data^2.encrypt^data.tag^86.id = %h86 then begin tag^length := 0; tag^length := nmm.adnl^data^2.encrypt^data.tag^86.lgth; movl( ptr, nmm.adnl^data^2.encrypt^data.tag^86.id, ( tag^length + 2 ) ); @ptr := @ptr[ tag^length + 2 ]; length := length + tag^length + 2; tag^length := 0; end; ! Tag-86 ! end else begin return false; end; return true; end; ! of subproc collapse^dataset^fld^110^nmm ! ?page "util^collapse^tlv" !#################################################################! !# #! !# This is the main body of PROC util^collapse^tlv #! !# #! !#################################################################! if field = 110 then begin if sem.typ = "08" then begin if collapse^dataset^fld^110^nmm( length ) then begin return true; end; ! if collapse^dataset^fld^110^nmm end else begin if collapse^dataset^fld^110^sem( length ) then begin return true; end; ! if collapse^dataset^fld^110^sem end; ! if sem.typ = "08" ! end; ! if sem.typ = "08" then ! return false; end; ! procedure util^collapse^tlv ! #ADD 45733 TRACE^NMM if index = 109 and ! field 110 ! bnet^g.send^de^110^g then begin if not util^expand^tlv( sem, ptr, loop^lgth, 110 ) then begin return ( index + 1 ); end; set( translate^field, false ); end ! index = 110 ! else #DELETE 45832 /45868 TRACE^NMM #ADD 46257 TRACE^SEM index <> 109 and #ADD 48200 TRACE^SEM if index = 109 then ! field 110 ! begin if not util^expand^tlv( sem, ptr, length, 110 ) then begin return ( index + 1 ); end; set( translate^field, false ); @ptr := @ptr '+' length; end ! index = 110 ! else #ADD 48582 TRACE^SEM index <> 109 and #ADD 48586y01 TRACE^SEM ! 110, 112 and 122 #DELETE 48586y02 TRACE^SEM #ADD 48660 TRACE^SEM ?section util^expand^tlv ?page "util^expand^tlv" !#####################################################################! !# #! !# util^expand^tlv #! !# #! !# This procedure expands fields that are sent in Tag Length Value #! !# (TLV) format. #! !# #! !# INPUT PARAMETERS: #! !# xsem - Internal SEM. #! !# field - number of external field to be converted. #! !# #! !# OUTPUT PARAMETERS: #! !# ptr - Pointer to external SEM. #! !# length - Length of expanded TLV field. #! !# #! !# RETURN: #! !# true - if SEM expanded successfully #! !# false - if SEM not expanded successfully #! !# #! !#####################################################################! int proc util^expand^tlv( xsem, ptr, length, field ); string .xsem; string .ptr; int .length; int field; begin int bad^lgth; int fld^lgth; int tag^length := 0; string .nmm( nmm^def ) := @xsem; string .sem( sem^def ) := @xsem; ?page "subproc expand^dataset^fld^110^sem of util^expand^tlv" !#################################################################!! !# #!! !# expand^dataset^fld^110^sem #!! !# #!! !# This subprocedure is used to expand data in a SEM field #!! !# 110 Dataset ID 01 to an expanded Dataset ID/TLV format. The #!! !# Dataset ID, tags, tag length and tag values fields remain #!! !# in the binary format they are received in. Dataset ID length #!! !# and data element length are converted from ebcdic to ascii. #!! !# #!! !# INPUT PARAMETERS: #!! !# #!! !# OUTPUT PARAMETERS: #!! !# Length - length of the processed data to return #!! !# to the calling procedure. #!! !# #!! !# RETURN: #!! !# True - if SEM expand is successful #!! !# False - if SEM expand is unsuccessful. #!! !# #!! !#################################################################!! int subproc expand^dataset^fld^110^sem( length ); int .length; begin call translate( ptr, $len( sem.adnl^data^2.lgth ), ebcdic^to^ascii^l ); fld^lgth := 0; if not ascii^integer( ptr, 3, fld^lgth ) then begin return false; end; if fld^lgth < 6 then begin ! ! ! no subfields present ! ! ! length := fld^lgth + 3; end else begin length := 3; end; tag^length := 0; bad^lgth := 0; if ptr[ length ] = %h01 then begin movl( sem.adnl^data^2.encrypt^data.ds^id, ptr[ length ], $len( sem.adnl^data^2.encrypt^data.ds^id ) ); movl( sem.adnl^data^2.encrypt^data.ds^lgth, ptr[ length + 1 ], $len( sem.adnl^data^2.encrypt^data.ds^lgth ) ); length := length + 3; end else begin return false; end; while ( length < ( fld^lgth + 3 ) ) do begin ! ! ! Move Tag-80 ! ! ! if ptr[ length ] = %h80 then begin tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^80.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-80 ! else ! ! ! Move Tag-81 ! ! ! if ptr[ length ] = %h81 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^81.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-81 ! else ! ! ! Move Tag-83 ! ! ! if ptr[ length ] = %h83 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^83.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-83 ! else ! ! ! Move Tag-86 ! ! ! if ptr[ length ] = %h86 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^86.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-86 ! else ! ! ! Move Tag-87 ! ! ! if ptr[ length ] = %h87 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^87.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-87 ! else ! ! ! Move Tag-88 ! ! ! if ptr[ length ] = %h88 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^88.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-88 ! else ! ! ! Move Tag-89 ! ! ! if ptr[ length ] = %h89 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( sem.adnl^data^2.encrypt^data.tag^89.id, ptr[ length ], ( tag^length + 2 ) ); end else if ptr[ length ] <> " " then begin ! ! Unrecognized tag ! bad^lgth := bad^lgth + 3; end else begin return false; end; length := length + tag^length + 2; end; return true; end; ! of subproc expand^dataset^fld^110^sem ! ?page "subproc expand^dataset^fld^110^nmm of util^expand^tlv" !#################################################################!! !# #!! !# expand^dataset^fld^110^nmm #!! !# #!! !# This subprocedure is used to expand data in a SEM field #!! !# 110 Dataset ID 01 to an expanded Dataset ID/TLV format. The #!! !# Dataset ID, tags, tag length and tag values fields remain #!! !# in the binary format they are received in. Dataset ID length #!! !# and data element length are converted from ebcdic to ascii. #!! !# #!! !# INPUT PARAMETERS: #!! !# #!! !# OUTPUT PARAMETERS: #!! !# Length - length of the processed data to return #!! !# to the calling procedure. #!! !# #!! !# RETURN: #!! !# True - if SEM expand is successful #!! !# False - if SEM expand is unsuccessful. #!! !# #!! !#################################################################!! int subproc expand^dataset^fld^110^nmm( length ); int .length; begin call translate( ptr, $len( nmm.adnl^data^2.lgth ), ebcdic^to^ascii^l ); movl( nmm.adnl^data^2.lgth, ptr, $len( nmm.adnl^data^2.lgth ) ); if not ascii^integer( ptr, 3, fld^lgth ) then begin return false; end; if fld^lgth < 6 then begin ! ! ! no subfields present ! ! ! length := fld^lgth + 3; end else begin length := 3; end; tag^length := 0; bad^lgth := 0; if ptr[ length ] = %h04 then begin movl( nmm.adnl^data^2.encrypt^data.ds^id, ptr[ length ], $len( nmm.adnl^data^2.encrypt^data.ds^id ) ); movl( nmm.adnl^data^2.encrypt^data.ds^lgth, ptr[ length + 1 ], $len( nmm.adnl^data^2.encrypt^data.ds^lgth ) ); length := length + 3; end else begin return false; end; while ( length < ( fld^lgth + 3 ) ) do begin ! ! ! Move Tag-80 ! ! ! if ptr[ length ] = %h80 then begin tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^80.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-80 ! else ! ! ! Move Tag-81 ! ! ! if ptr[ length ] = %h81 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^81.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-81 ! else ! ! ! Move Tag-83 ! ! ! if ptr[ length ] = %h83 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^83.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-83 ! else ! ! ! Move Tag-86 ! ! ! if ptr[ length ] = %h86 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^86.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-86 ! else ! ! ! Move Tag-87 ! ! ! if ptr[ length ] = %h87 then begin tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^87.id, ptr[ length ], ( tag^length + 1 ) ); call translate( ptr[ length + 2 ], tag^length, ebcdic^to^ascii^l ); movl( nmm.adnl^data^2.encrypt^data.tag^87. encrypt^key, ptr[length + 2 ], tag^length ); end ! Tag-87 ! else ! ! ! Move Tag-88 ! ! ! if ptr[ length ] = %h88 then begin tag^length := 0; tag^length := ptr[ length + 1 ]; movl( nmm.adnl^data^2.encrypt^data.tag^88.id, ptr[ length ], ( tag^length + 2 ) ); end ! Tag-88 ! else if ptr[ length ] <> " " then begin ! ! ! Unrecognized tag ! ! ! bad^lgth := bad^lgth + tag^length + 2; length := length + tag^length + 2; end else begin return false; end; length := length + tag^length + 2; end; return true; end; ! of subproc expand^dataset^fld^110^nmm ! ?page "util^expand^tlv" !#################################################################! !# #! !# This is the main body of PROC util^expand^tlv #! !# #! !#################################################################! if field = 110 then begin if sem.typ = "08" then begin if expand^dataset^fld^110^nmm( length ) then begin return true; end; ! if expand^dataset^fld^110^nmm end else begin if expand^dataset^fld^110^sem( length ) then begin return true; end; ! if expand^dataset^fld^110^sem end; ! if expand^dataset^fld^110^nmm ! end; ! if field = 110 then return false; end; ! procedure util^expand^tlv ! #ENDSCN = SW0R336 !#CMP2.28 11/27/23 BNETDDLS6088 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6088 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6088 * ******************************************************************************** #SCN = SW0R337 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6088 #NEWVERSION = 6089 #ADD C002620g * 27NOV2023 ChristL * Symptom: Banknet Release 23.Q4 Phase 2 Functional Enhancements * Problem: None. * Fix: The interface has been modified in support of the * below requirement: * AN 6797 - Supporting ISO Format 4 PIN Blocks * - Introduced a data element usage layout for Data * Element (DE) 110 to support ISO format 4 PIN * blocks. * - Deleted the DE 48 definition under the NMM * structure. * - Increased the length of DE 110, and add a * redefinition for the new format. * - In the SEM Structure, added a definition for * DE 110 to the area not logged to the ILF. * Dependency: Apply fixes to: * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETS and BNETLIBS * Run MAKE. * Replace files: * SW60BNET: BNETMNWD, BNETUPDT * Run Make. * Reference: WO #PDM-005306 #DELETE 00368 /00378J0I NMM #ADD 00453)03 NMM * EBCDIC and binary in transmission, variable in length #DELETE 00453)04 NMM #ADD 00453)07 NMM 04 info pic x(175). #DELETE 00453)08 NMM #ADD 00453)0H NMM 06 user-fld pic x(63). 04 encrypt-data redefines info. 06 ds-id pic x(1). 06 ds-lgth pic x(2). 06 tag-80. 08 id pic x(1). 08 lgth pic x(1). 08 cntl pic x(1). 06 tag-81. 08 id pic x(1). 08 lgth pic x(1). 08 key-set-id pic x(8). 06 tag-83. 08 id pic x(1). 08 lgth pic x(1). 08 algo pic x(1). 06 tag-86. 08 id pic x(1). 08 lgth pic x(1). 08 key-idx pic x(1). 06 tag-87. 08 id pic x(1). 08 lgth pic x(1). 08 encrypt-key pic x(96). 06 tag-88. 08 id pic x(1). 08 lgth pic x(1). 08 key-chk-dgt pic x(3). 06 user-fld pic x(50). !00453)0J #DELETE 00453)0I/00453)0J NMM #ADD 01411$0K SEM * ! * additional data 2, private ! * bit map position = 110 ! * EBCDIC and binary in transmission, variable in length ! * Used by acquirers to provide the transaction PIN block and other ! * encryption data in authorization request messages. ! * ! 02 adnl-data-2. 04 lgth pic 999. 04 info pic x(65). 04 encrypt-data redefines info. 06 ds-id pic x(1). 06 ds-lgth pic x(2). 06 tag-80. 08 id pic x(1). 08 lgth pic x(1). 08 cntl pic x(1). 06 tag-81. 08 id pic x(1). 08 lgth pic x(1). 08 key-set-id pic x(8). 06 tag-83. 08 id pic x(1). 08 lgth pic x(1). 08 algo pic x(1). 06 tag-86. 08 id pic x(1). 08 lgth pic x(1). 08 key-idx pic x(1). 06 tag-87. 08 id pic x(1). 08 lgth pic x(1). 08 pin-frmt pic x(1). 06 tag-88. 08 id pic x(1). 08 lgth pic x(1). 08 pin pic x(8). 06 tag-89. 08 id pic x(1). 08 lgth pic x(1). 08 new-pin pic x(8). 06 user-fld pic x(20). #ENDSCN = SW0R337 !#CMP2.28 11/27/23 BNETS 6174 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6174 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6174 * ******************************************************************************** #SCN = SW0R339 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6174 #NEWVERSION = 6175 #ADD 03821{0H ! 27NOV2023 ChristL ! Symptom: Banknet Release 23.Q4 Phase 2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirement: ! AN 6797 - Supporting ISO Format 4 PIN Blocks ! - Introduced a data element usage layout for Data ! Element (DE) 110 to support ISO format 4 PIN blocks. ! Procs modified: init^bnet^g ! init^newkey ! init^paramproc ! sem^key^chng^rqst ! Dependency: Apply fixes to: ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETS and BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETMNWD, BNETUPDT ! Run Make. ! Reference: WO #PDM-005306 #ADD 10428^03 INIT^BNET^G bnet^g.send^de^110^g := false; #DELETE 12469y08/12469y0B INIT^NEWKEY #ADD 12676Y03 INIT^PARAMPROC "P", "SW-BNET-SEND-DE-110 ", #ADD 13501^0i INIT^PARAMPROC ! ! ! SW-BNET-SEND-DE-110 ! ! ! if not ferror then begin bnet^g.send^de^110^g := false; if lconf.param^msg.ptxt = "Y" then begin bnet^g.send^de^110^g := true; end; end; #ADD 20119y0D SEM^KEY^CHNG^RQST if adnl^data^2^bit^d then begin tr31^key^lgth := $len( sem.adnl^data^2.encrypt^data. tag^87.encrypt^key ); encrypt^key ':=' sem.adnl^data^2.encrypt^data.tag^87. encrypt^key for tr31^key^lgth; call binary^hexchar( key^chk^dgt, chk^dgt^lgth^l, sem.adnl^data^2.encrypt^data.tag^88. key^chk^dgt ); #DELETE 20119y0E/20119y0J SEM^KEY^CHNG^RQST #ADD 20234y05 SEM^KEY^CHNG^RQST not adnl^data^2^bit^d ) ) then #DELETE 20234y06 SEM^KEY^CHNG^RQST #ENDSCN = SW0R339 !#CMP2.28 12/05/23 BNETG 60140FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60140 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60140 * ******************************************************************************** #SCN = SW0R346 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %000260U ! 05DEC2023 ChristL ! Symptom: Soft decline is not mapped to BASE24-pos RC 096 for ! frictionless transaction ! Problem: Interface is unable to determine whether the issuer is ! subject to PSD2 where it should map to RC 096 or ! whether the issuer is outside the EEA where it has to ! map to RC 082, while acquiring transactions. ! Fix: Added a define sem^aav^stand^in^non^low^risk^d to ! indicate the attempted transaction is high risk 3DS ! transaction. ! Dependency: Apply fixes to: ! SW60BNET: BNETG and BNETLIBS. ! Run Make. ! Reference: Case #03577120 #ADD r002330K define sem^aav^stand^in^non^low^risk^d( x ) = ( x.addl^data.info.ucaf^sub^fld^43.tag^data = "kE" )#; #ENDSCN = SW0R346 !#CMP2.28 12/05/23 BNETLIBS6364 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6364 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6364 * ******************************************************************************** #SCN = SW0R347 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6364 #NEWVERSION = 6365 #ADD 11002>0e ! 05DEC2023 ChristL ! Symptom: Soft decline is not mapped to BASE24-pos RC 096 for ! frictionless transaction ! Problem: Interface is unable to determine whether the issuer is ! subject to PSD2 where it should map to RC 096 or ! whether the issuer is outside the EEA where it has to ! map to RC 082, while acquiring transactions. ! Fix: Modified the code at both the acquirer and ! issuer processing of the interface to determine ! whether a soft decline needs to be applied or not, ! while performing EMV 3DS Authentications. ! Procs Modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60BNET: BNETG and BNETLIBS. ! Run Make. ! Reference: Case #03577120 #ADD 14999 PSTM^FRMT^0210^TO^XRESP if sem.resp^cde = "65" and sem.addl^data.info. ecom^sec^sub^fld^42.tag = "42" and ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "212" and sem^aav^challenge^d( sem ) ) or ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "211" and not sem^aav^stand^in^non^low^risk^d( sem ) ) or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "216" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "242" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "246" then begin ! ! EEA issuers should not request stronger ! customer authentication under these ! conditions (see AN 4309) movd( sem.resp^cde, "57" ); end; #ADD 28451b03 SEM^FRMT^XRESP^TO^PSTM^0210 movd( pstm.tran.resp^cde, "096" ); if sem.pos^entry^mde = chip^read or sem.addl^data.info. crd^vrfy^mthd^sub^fld^20.tag^data = "P" or ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "212" and sem^aav^challenge^d( rqst ) ) or ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "211" and not sem^aav^stand^in^non^low^risk^d( rqst ) ) or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "216" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "242" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "246" then begin ! ! EEA issuers should not request stronger customer ! authentication under these conditions. ! movd( pstm.tran.resp^cde, "082" ); end; if pstm.tran.resp^cde = "096" then #DELETE 28451b04/28452b02 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 28467 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0R347 !#CMP2.28 12/20/23 RP09BNTS6010 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6010 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.RP09BNTS RP09BNTS 6010 * ******************************************************************************** #SCN = SW0R353 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6010 #NEWVERSION = 6011 #ADD 00008G0A * 18DEC2023 rathors * Symptom: Base24 Account Number Masking Support * Problem: None. * Fix: Added support to mask the account number fields. * Modified Paragraphs: * A100-HOUSEKEEPING * Dependency: Apply fixes to: * SW60BNET: RP09BNTS * Run Make. Refer to BA60UD0R.SCNACCT for * a complete listing of dependencies. * Reference: WO #PDM-004600 #REPLACE 00169I02 DATA DIVISION COPY ACCT-MASK-GLOBALS OF "=SWRPT_RP09SWIS". #ADD 00228I0D PROCEDURE DIVISION IF ACCT-RIGHT-UNMASKED OF ICFBASE = SPACES MOVE "99" TO ACCT-RIGHT-UNMASKED OF ICFBASE END-IF #REPLACE 00228I0L OFFSET 1/00228I0L OFFSET 2 PROCEDURE DIVISION MOVE ACCT-RIGHT-UNMASKED OF ICFBASE TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK ?ENDIF 4 ?IF 5 #ADD 00228I0Z PROCEDURE DIVISION IF ACCT-RIGHT-UNMASKED OF ICFEBASE = SPACES MOVE "99" TO ACCT-RIGHT-UNMASKED OF ICFEBASE END-IF #REPLACE 00228I0h OFFSET 1/00228I0h OFFSET 1 PROCEDURE DIVISION MOVE ACCT-RIGHT-UNMASKED OF ICFEBASE TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK ?ENDIF 5 #REPLACE 00382I05/00382I05 OFFSET 0 C630-ADMIN-TEXT-MESSAGE COPY G200-CALC-ACCT-LGTH OF "=BASRC_BACOUTLS". COPY G210-MASK-ACCT OF "=BASRC_BACOUTLS". COPY G220-JUSTIFY-ACCT-AND-FILL OF "=BASRC_BACOUTLS". #ENDSCN = SW0R353 !#CMP2.28 12/27/23 BNETLIBS6365 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6365 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6365 * ******************************************************************************** #SCN = SW0R373 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6365 #NEWVERSION = 6366 #ADD 11002|0I ! 27DEC2023 ChristL ! Symptom: Soft declines occur on 3D secure transactions at RTAU ! due to incorrect value set in ! Token SCA-ACQ-DATA-TKN (FH). ! Problem: CAV-TYP field in Token SCA-ACQ-DATA-TKN (FH) is set to ! a value other than "0" only when field PGM-PROTO is ! set as "2". Also, transactions with value "V" in token ! PS51^TKN (C0) field cavv^aav^rslt^cde also results in ! soft decline at RTAU. ! Fix: Modified the code to set CAV-TYP field to a value ! irrespective of the value in the field PGM-PROTO ! of token SCA-ACQ-DATA-TKN (FH) and modified the ! code to set DE 48, SE 66, subfield 01 tag^data to ! a space during outbound transactions. ! Also, modified the code to add support for the value ! "V" in the field cavv^aav^rslt^cde in Token C0. ! Procs Modified: pstm^frmt^sem^addl^data ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3599705 #ADD 20395 PSTM^FRMT^SEM^ADDL^DATA pgm^proto.tag^data, " " ); #DELETE 20396 PSTM^FRMT^SEM^ADDL^DATA #ADD 36259T05 SEM^FRMT^XRQST^TO^PSTM^0200 ( ps51^tkn^data.cavv^aav^rslt^cde = "V" or ps51^tkn^data.cavv^aav^rslt^cde = "2" ) then #DELETE 36259T06 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36290T00 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.authn^data^sub^fld^66.tag = "66" and #DELETE 36290T01/36290T02 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0R373 !#CMP2.28 01/03/24 RP09BNTS6011 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.RP09BNTS RP09BNTS 6011 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.RP09BNTS RP09BNTS 6011 * ******************************************************************************** #SCN = SW0S002 , FILEID = RP09BNTS #VOLUME = $ROOK.SW60BNET #FILE = RP09BNTS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6011 #NEWVERSION = 6012 #ADD 00008K07 * BA60SRC: BACOUTLS * SW60RPT: RP09SWIS #ADD 00008K0C * 03JAN2024 WisharJ * Symptom: BASE24 Account Number Masking Support * Problem: Previous fix history did not list the correct * dependencies. * Fix: Corrected dependencies in history for SCN SW0R353. * Dependency: Apply fixes to: * BA60SRC: BACOUTLS * SW60RPT: RP09SWIS * SW60BNET: RP09BNTS * Run Make. * Reference: Case #H24-564122 #ENDSCN = SW0S002 !#CMP2.28 01/18/24 BNETLIBS6366 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6366 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6366 * ******************************************************************************** #SCN = SW0S024 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6366 #NEWVERSION = 6367 #ADD 11002@0N ! 18JAN2024 ChristL ! Symptom: SCA not activated with DE55 9F34 value "1E" or "5E" ! Problem: Contactless EMV transactions with DE55 Tag 9F34 value ! "1E" or "5E" sets Token FH Field SCA-IND to "3" which ! is to be set only for EMV Contact transactions. ! Fix: Modified the code to check for a EMV contact ! transaction when Byte 1 of Tag 9F34 is "1E" or ! "5E" (Signature Paper). ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3603394 #ADD 36262G0D SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = chip^read and ( bnet^array^g.cvm^g = "1E" or bnet^array^g.cvm^g = "5E" ) then #DELETE 36262G0E/36262G0F SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0S024 !#CMP2.28 02/20/24 BNETS 6175 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6175 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6175 * ******************************************************************************** #SCN = SW0S055 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6175 #NEWVERSION = 6176 #ADD 03821}0L ! 20FEB2024 NataraM ! Symptom: Banknet Release 24.Q2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirements: ! AN 7102 - Introducing Mastercard Transaction Link ! Identifier. ! - Added code to support the addition of Transaction ! Link ID Token (ID = "HI"). ! Proc Modified: sem^advice^response^pos ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS and BNETS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0224M, ILB0224R, ILB0224S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0224M. Run the ILF conversion using ILB0224R. ! Reference: WO #PDM-005647 #ADD 19074 SEM^ADVICE^RESPONSE^POS ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; #DELETE 19153 /19158 SEM^ADVICE^RESPONSE^POS #ADD 19201 SEM^ADVICE^RESPONSE^POS call util^add^txn^link^id^tkn( sem, pstm, ofst, pos^userdata ); #ENDSCN = SW0S055 !#CMP2.28 02/20/24 BNETDDLS6089 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6089 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6089 * ******************************************************************************** #SCN = SW0S056 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6089 #NEWVERSION = 6090 #ADD D002620O * 20FEB2024 NataraM * Symptom: Banknet Release 24.Q2 Functional Enhancements * Problem: None. * Fix: The interface has been modified in support of the * below requirements: * AN 7102 - Introducing Mastercard Transaction Link * Identifier. * - Added a structure for DE 105, SE 001 to the area of * the SEM logged to the ILF. * - Moved the SEM structure for DE 44 & DE 121 to the * area of the SEM not logged to the ILF, to allow * the new DE 105 structure to be added without * increasing the overall amount of SEM data logged * to the ILF. * AN 7702 - Enhancing Response Messages with Visa * Authentication Data. * - Replaced the redefinition for DE 48, SE 44 with a * redefinition for DE 48, SE 04. * AN 7706 - Introducing Technical Changes for MoneySend * Payment Transactions Program and Gaming * and Gambling Payments Program. * - Removed USER-FLD0 from the DE 48 definition. * - Removed USER-FLD1 from the DE 48 definition. * - Extended the definition for DE 48, SE 67 by 62 * bytes to include a structure for subfield 02, * and added a redefinition for DE 48, SE 44. * - Reduced the length of the user field at the end * of the DE 48 structure by 47 bytes. * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BATKNCVS, BATKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS and BNETS * Run MAKE. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0224M, ILB0224R, ILB0224S depend on the * BA10SC04 subvolume. Make the ILF conversion using * ILB0224M. Run the ILF conversion using ILB0224R. * Reference: WO #PDM-005647 #DELETE 01055 /01062 SEM #DELETE 01120 /C0112004 SEM #DELETE C0115700/C0115708 SEM #ADD 01157w1K SEM * Subfield 2 contains the sanctions score additional information. #ADD 01157w1T SEM 08 score-adnl-data. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(58). * * Visa Secure Electronic Commerce Transaction Identifier * Subfield tag = 44 * 06 visa-ecom-xid-sub-fld-44 redefines moneysend-info-sub-fld-67. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). 08 user-fld pic x(29). #ADD 01157927 SEM * Visa Acceptance Environment Response Data * Subfield tag = 04 * 06 visa-accpt-envmt-sub-fld-04 redefines #DELETE 01157928/0115792A SEM #ADD 0115792D SEM 08 tag-data pic x(80). 08 user-fld pic x(17). #DELETE 0115792E/0115792F SEM #ADD 0115792s SEM 06 user-fld-aci pic x(16). #DELETE 0115792t SEM #ADD 01323902 SEM * ! * Multi-use transaction ID data ! * bit map position = 105 ! * EBCDIC in transmission, variable in length ! * ! 02 multi-use-data. 04 lgth pic 9(3). 04 txn-link-id. 06 tag pic 9(3). 06 lgth pic 9(3). 06 tag-data pic x(22). #DELETE 01393 /01402901 SEM #ADD 01411$0E SEM * ! * additional response data ! * bit map position = 44 ! * EBCDIC in transmission, variable in length ! * ! 02 addl-resp-data. 04 lgth pic 99. 04 info pic x(25). #ADD 01411004 SEM * ! * authorizing agent identification code ! * bit map position = 121 ! * EBCDIC in transmission, variable in length ! * ! * lgth: number of digits in auth-inst.cde ! * cde : MCI assigned customer identifier ! * ! 02 auth-inst. 04 lgth pic 999. 04 cde pic x(6). #ENDSCN = SW0S056 !#CMP2.28 02/20/24 BNETLIBS6367 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6367 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6367 * ******************************************************************************** #SCN = SW0S057 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6367 #NEWVERSION = 6368 #ADD 11002\0E ! 20FEB2024 NataraM ! Symptom: Banknet Release 24.Q2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirements: ! AN 7102 - Introducing Mastercard Transaction Link ! Identifier. ! AN 7702 - Enhancing Response Messages with Visa ! Authentication Data. ! AN 7705 - Enhancing the Mastercard Identity Check ! Program. ! AN 7706 - Introducing Technical Changes for MoneySend ! Payment Transactions Program and Gaming ! and Gambling Payments Program. ! AN 7118 - Revised Standards for Acquirer Mandate to ! Populate the Merchant Payment Gateway ID. ! AMEX CAPN April 2024 Mandates – Indirect Acceptor ! Requirements. ! Case #03591605 - Token F4 Id Wallet not mapped to HISO ! Migrate. ! Case #03596865 - Review About AN7411 BNET. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadv ! pstm^frmt^sem^addl^data ! sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^collapse^sem ! util^expand^sem ! Proc Added: util^add^txn^link^id^tkn ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS and BNETS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0224M, ILB0224R, ILB0224S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0224M. Run the ILF conversion using ILB0224R. ! Reference: WO #PDM-005647 #ADD 12113 PSTM^FRMT^0200^TO^XRQST int .txn^link^id^tkn( txn^link^id^tkn^def ); int fnd^txn^link^id^tkn := false; #ADD 14106o0L SUB^LOG^ERROR ( pos^term^owner^tkn.retl^typ = "D" or pos^term^owner^tkn.retl^typ = "I" or pos^term^owner^tkn.retl^typ = "P" ) and #DELETE 14106o0M SUB^LOG^ERROR #ADD 14248 SUB^LOG^ERROR if base24^rel^g >= 5 then begin ! ! Populate DE 105 ! tkn^id ':=' txn^link^id^tkn^id^d; fnd^txn^link^id^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^link^id^tkn, tkn^lgth ); if fnd^txn^link^id^tkn then begin movd( sem.multi^use^data.txn^link^id.tag, "001" ); if txn^link^id^tkn.id^lgth <= "22" then begin sem.multi^use^data.txn^link^id.lgth ':=' "0" & txn^link^id^tkn.id^lgth for $len( txn^link^id^tkn.id^lgth ); end else begin movd( sem.multi^use^data.txn^link^id.lgth, "022" ); end; move( sem.multi^use^data.txn^link^id.tag^data, txn^link^id^tkn.link^id ); call ascii^integer^( sem.multi^use^data. txn^link^id.lgth, lgth ); lgth := lgth + $len( sem.multi^use^data.txn^link^id.tag ) + $len( sem.multi^use^data.txn^link^id.lgth ); call integer^ascii^( sem.multi^use^data.lgth, lgth ); set( multi^use^data^bit^d, 1 ); end; end; #ADD 15848 PSTM^FRMT^0220^TO^XADV move( orig^sem.multi^use^data, sem.multi^use^data ); #ADD 19009 PSTM^FRMT^SEM^ADDL^DATA int .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); int suppl^mrch^data^tkn^fnd := false; #ADD 21807H16 PSTM^FRMT^SEM^ADDL^DATA tkn^id ':=' suppl^mrch^data^tkn^id^d; suppl^mrch^data^tkn^fnd := hiswtkn^get^tkn( pstm, tkn^id, @suppl^mrch^data^tkn, tkn^lgth ); if suppl^mrch^data^tkn^fnd and suppl^mrch^data^tkn.mrch^pmnt^gtwy^id <> [ $len( suppl^mrch^data^tkn. mrch^pmnt^gtwy^id ) * [ " " ] ] and suppl^mrch^data^tkn.mrch^pmnt^gtwy^id <> [ $len( suppl^mrch^data^tkn. mrch^pmnt^gtwy^id ) * [ "0" ] ] then begin move( sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data, suppl^mrch^data^tkn.mrch^pmnt^gtwy^id ); end else if pstm.originator = b24^dev^orig^d or pstm.originator = b24^dev^dukpt^orig^d then begin movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data, mpg^id^no^gateway^d ); end else begin movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data, mpg^id^acq^owned^d ); end; if sem.addl^data.info.adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data <> [ $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag^data ) * [ " " ] ] then begin movd( sem.addl^data.info. adnl^mrch^data^sub^fld^37.tag, "37" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.tag, "05" ); movd( sem.addl^data.info.adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id.lgth, "11" ); sub^fld^lgth := sub^fld^lgth + $len( sem.addl^data.info. adnl^mrch^data^sub^fld^37. mrch^pmnt^gtwy^id ); end; ! of if mrch^pmnt^gtwy^id.tag^data <> blanks ! #ADD 27227 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if multi^use^data^bit^d then begin call util^add^txn^link^id^tkn( rvsl, pstm, ofst, pos^userdata ); end; #ADD 28511-00 SEM^FRMT^XRESP^TO^PSTM^0210 end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "04" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "T" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "21" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "C" ); end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "22" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "Q" ); #ADD 28511-0C SEM^FRMT^XRESP^TO^PSTM^0210 end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "42" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "S" ); #ADD 28511r0Q SEM^FRMT^XRESP^TO^PSTM^0210 movl( pstm.tran.ichg^resp.byte[ 3 ], sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data, 2 ); #ADD 28720 SEM^FRMT^XRESP^TO^PSTM^0210 if multi^use^data^bit^d then begin call util^add^txn^link^id^tkn( sem, pstm, ofst, pos^userdata ); end; #ADD 29530-19 SEM^FRMT^XRESP^TO^PSTM^0210 move( mc^gtwy^visa^info^buf.accpt^envmt^resp^data, sem.addl^data.info. visa^accpt^envmt^sub^fld^04.tag^data ); #ADD 31716 SEM^FRMT^XRQST^TO^PSTM^0200 if multi^use^data^bit^d then begin call util^add^txn^link^id^tkn( sem, pstm, ofst, pos^userdata ); end; #ADD 32024 SEM^FRMT^XRQST^TO^PSTM^0200 crdhldr^auth = "2" then #DELETE 32025 /32036 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32045 SEM^FRMT^XRQST^TO^PSTM^0200 end else begin ! ! !Set Wallet Flag = 10 - Generic Wallet ! ! ! movd( dgtl^wallet^tkn.wallet^ind^flg, "10" ); move( dgtl^wallet^tkn.genrc^tkn^wallet.id, sem.addl^data.info.wallet^pgm^sub^fld^26. tag^data.wallet^id ); if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec. crdhldr^auth <> " " then begin movd( dgtl^wallet^tkn.genrc^tkn^wallet.txn^typ, "1" ); end else begin movd( dgtl^wallet^tkn.genrc^tkn^wallet.txn^typ, "0" ); end; #ADD 34652A0B SEM^FRMT^XRQST^TO^PSTM^0200 if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "P" then begin ! ! ! Dynamic linking not performed, but passed ! ! MAC key validation ! ! ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "P" ); end else if sem.addl^data.info.on^behalf^svc^sub^fld^71. tag^data[ idx ].rslt^1 = "F" then begin ! ! ! Dynamic linking not performed, and failed ! ! MAC key validation ! ! ! movd( ps51^tkn^data.cavv^aav^rslt^cde, "F" ); end else #ADD 35470H0Z SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $offset( ichg^pgm^tkn. mc^e^comm^recur^pmnt^data. user^fld^aci ); end else if sem.addl^data.info. moneysend^info^sub^fld^67.tag = "67" then begin tkn^id ':=' ichg^pgm^tkn^id^d; movd( ichg^pgm^tkn.frmt^cde, "15" ); move( ichg^pgm^tkn.mc^moneysend.sanctions^score, sem.addl^data.info. moneysend^info^sub^fld^67. sanction^scrn^score.tag^data ); move( ichg^pgm^tkn.mc^moneysend.score^adnl^data, sem.addl^data.info. moneysend^info^sub^fld^67. score^adnl^data.tag^data ); tkn^add^lgth := $offset( ichg^pgm^tkn.mc^moneysend. user^fld^aci ); end; if ichg^pgm^tkn.frmt^cde = "07" or ichg^pgm^tkn.frmt^cde = "15" then begin if ichg^pgm^tkn.mc^moneysend <> [ $len( ichg^pgm^tkn.mc^moneysend ) * [" "] ] or ichg^pgm^tkn.mc^e^comm^recur^pmnt^data <> #DELETE 35470H0a SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35470H0e/35470H0g SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36743 SEM^FRMT^XRVSL^TO^PSTM^0420 int .acq^data^get^tkn( acq^data^tkn^def ); int acq^data^tkn^lgth; #ADD 36788 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .acq^data^tkn( acq^data^tkn^def ); #ADD 36969 SEM^FRMT^XRVSL^TO^PSTM^0420 if multi^use^data^bit^d then begin call util^add^txn^link^id^tkn( rvsl, pstm, ofst, pos^userdata ); end; #ADD 37134 SEM^FRMT^XRVSL^TO^PSTM^0420 move( rvsl.local^dat, sem.local^dat ); #ADD 37138 SEM^FRMT^XRVSL^TO^PSTM^0420 move( rvsl.crd^seq^num, sem.crd^seq^num ); move( rvsl.fwd^inst, sem.fwd^inst ); #DELETE 37139 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 37140 SEM^FRMT^XRVSL^TO^PSTM^0420 move( rvsl.auth^id^resp, sem.auth^id^resp ); #ADD 37142 SEM^FRMT^XRVSL^TO^PSTM^0420 move( rvsl.crd^acpt, sem.crd^acpt ); #ADD 37153 SEM^FRMT^XRVSL^TO^PSTM^0420 if base24^rel^g >= 5 and acq^cntry^cde^bit^d then begin tkn^id ':=' acq^data^tkn^id^d; if not hiswtkn^get^tkn( pstm, tkn^id, @acq^data^get^tkn, acq^data^tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, acq^data^tkn ); movd( acq^data^tkn.frmt^cde, "02" ); movd( acq^data^tkn.lgth, "003" ); move( acq^data^tkn.mc.cntry^cde, sem.acq^inst^cntry^cde ); tkn^add^lgth := $offset( acq^data^tkn.mc.user^fld^aci ); ! ! ! The token must end on a word boundary ! ! ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, acq^data^tkn, tkn^add^lgth, ! max buffer size !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1878, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end ! tkn^result = over^max^limit^l ! else begin call log^message^( 1879, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, evt^pan^lgth, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^result ); call abend^( 1879 ); end; ! error on tkn add other than no room ! end;! of if tkn^result on token add ! end; ! of "HC" token not present ! end; ! of if DE 19 is present ! #ADD 39954 UTIL^ADD^SWI^CMN^DATA^TKN ?section util^add^txn^link^id^tkn ?page "util^add^txn^link^id^tkn" !#####################################################################! !# #! !# util^add^txn^link^id^tkn #! !# #! !# This proc adds the Transaction Link ID token (HI) to the #! !# internal message (STM/PSTM). #! !# #! !# INPUT PARAMETERS: #! !# sem - External message #! !# sim - Internal message STM/PSTM #! !# ofst - Offset to the token buffer in the SIM #! !# pos^userdata - POS user data flag #! !# #! !# OUTPUT PARAMETERS: #! !# none #! !# #! !#####################################################################! proc util^add^txn^link^id^tkn( sem, sim, ofst, pos^userdata ) extensible; int .sem( sem^def ); int .sim; int ofst; int pos^userdata; begin wlform( noroom^err, "UNABLE TO ADD TRANSACTION LINK ID TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( add^err, "UNABLE TO ADD TRANSACTION LINK ID TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\" ',' " REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) struct .txn^link^id^tkn( txn^link^id^tkn^def ); int .pstm( pstm^def ) := @sim; int .stm ( stm^def ) := @sim; int dspy := false; int txn^link^id^lgth := $len( txn^link^id^tkn^def ); int found^txn^link^id^tkn := true; int pos^userdata^ := false; int .tkn^buf^ptr( txn^link^id^tkn^def ); int tkn^lgth := 0; int tkn^rslt := 0; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; tkn^id ':=' txn^link^id^tkn^id^d; if base24^rel^g < 5 or sem.multi^use^data.txn^link^id.tag <> "001" then begin return; end; if not $param( pos^userdata ) then begin pos^userdata^ := false; end else begin pos^userdata^ := pos^userdata; end; ! ! ! Determine if the token is in the SIM. ! ! ! if not hiswtkn^get^tkn( pstm, tkn^id, @tkn^buf^ptr, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, txn^link^id^tkn ); found^txn^link^id^tkn := false; end else begin found^txn^link^id^tkn := true; @txn^link^id^tkn := @tkn^buf^ptr; end; txn^link^id^tkn.link^id ':=' sem.multi^use^data.txn^link^id. tag^data for $len( sem.multi^use^data.txn^link^id.tag^data ); txn^link^id^tkn.id^lgth ':=' sem.multi^use^data. txn^link^id.lgth.byte[1] for 2; if not found^txn^link^id^tkn and txn^link^id^tkn.link^id <> blanks for $len( txn^link^id^tkn.link^id ) then begin tkn^lgth := 0; tkn^rslt := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, txn^link^id^tkn, txn^link^id^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata^ ); if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1876, ! routing code !, @noroom^err, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else if tkn^rslt <> tkn^exist^l then begin call log^message^( 1877, ! routing code !, @add^err, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^rslt ); call abend^( 1877 ); end; end; ! of tkn error ! end; ! of if found^txn^link^id^tkn = false ! end; #ADD 41518 TRACE^SEM index <> 104 and #ADD 41548 TRACE^SEM if hdr.addl^data.info. visa^accpt^envmt^sub^fld^04.tag = "04" then begin call ascii^integer( hdr.addl^data.info. visa^accpt^envmt^sub^fld^04.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. visa^accpt^envmt^sub^fld^04.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; #ADD 42588 TRACE^SEM ! ! ! Move Subfield 2 - Sanctions Score Addl Info ! ! ! if hdr.addl^data.info. moneysend^info^sub^fld^67. score^adnl^data.tag = "02" then begin call ascii^integer( hdr.addl^data.info. moneysend^info^sub^fld^67. score^adnl^data.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. moneysend^info^sub^fld^67. score^adnl^data.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; ! subfield 02 ! #ADD 43949 TRACE^SEM if index = 104 then ! field 105 ! begin if ( extlgth := extlgth '+' length ) > $len( msg^def ) then ! ! ! External message is too long. ! ! ! begin return ( index + 1 ); end; ptr ':=' sem[ offset ] for $len( hdr.multi^use^data.lgth ); call ascii^integer( ptr, 3, t^length ); call translate( ptr, $len( hdr.multi^use^data.lgth ), ascii^to^ebcdic^l ); length := 3; @ptr := @ptr '+' length; if hdr.multi^use^data.txn^link^id.tag = "001" then begin call ascii^integer( hdr.multi^use^data. txn^link^id.lgth, 3, tag^length ); movl( ptr, hdr.multi^use^data.txn^link^id.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end;! of tag = "001" set( translate^field, false ); end ! index = 104 ! else #ADD 44644 TRACE^SEM index <> 104 and #ADD 46256 TRACE^SEM index <> 104 and #ADD 46325 TRACE^SEM ! ! Visa Acceptance Environment Response Data ! if ptr[ length ] = "04" then begin movl( sem^ptr.addl^data.info. visa^accpt^envmt^sub^fld^04.tag, ptr[ length ], tag^length + 4 ); length := length + tag^length + 4; end else #ADD 47192 TRACE^SEM else ! ! ! Move Subfield 2 - Sanctions Score ! ! Additional Information ! ! ! if sub^ptr = "02" then begin sub^move^subfield( sem^ptr.addl^data.info. moneysend^info^sub^fld^67. score^adnl^data.tag ); end ! subfield 02 ! #ADD 48044 TRACE^SEM if index = 104 then ! field 105 ! begin call translate( ptr, $len( hdr.multi^use^data.lgth ), ebcdic^to^ascii^l ); sem[ offset ] ':=' ptr for $len( hdr.multi^use^data. lgth ); if not ascii^integer( ptr, 3, t^length ) then begin ! ! ! The SEM has invalid data. ! ! ! return ( index + 1 ); end; call translate( ptr[ 3 ], t^length, ebcdic^to^ascii^l ); set ( translate^field, true ); length := 3; if t^length < 6 then begin ! ! ! no subfields present ! ! ! length := t^length + 3; end; tag^length := 0; bad^lgth := 0; while ( length < ( t^length + 3 ) ) do begin if not ascii^integer( ptr[ length + 3 ], 3, tag^length ) then begin ! ! ! DE 105 sub-element has invalid data. ! ! ! return ( index + 1 ); end; if ptr[ length ] = "001" then begin movl( sem^ptr.multi^use^data. txn^link^id.tag, ptr[ length ], tag^length + 6 ); length := length + tag^length + 6; end else if ptr[ length ] <> " " then begin bad^lgth := bad^lgth + tag^length + 6; length := length + tag^length + 6; end else begin return ( index + 1 ); end; end; if length <> t^length + 3 then begin ! ! ! Parsing of DE 105 has gone wrong somewhere. ! ! ! length := t^length + 3; return ( index + 1 ); end; ! ! ! If this field is greater than 0, an unsupported ! ! subfield was hit and the length needs to be ! ! re-set. ! ! ! if bad^lgth > 0 then begin if t^length > bad^lgth then begin t^length := t^length - bad^lgth; call integer^ascii^( sem^ptr.multi^use^data.lgth, t^length ); end; ! of resetting field length ! end; set( translate^field, false ); @ptr := @ptr '+' length; end ! index = 104 ! else #ADD 48581 TRACE^SEM index <> 104 and #ADD 48586y00 TRACE^SEM ! already moved data for fields 48, 104, 105, 106, ! #DELETE 48586y01 TRACE^SEM #ADD 48586>00 TRACE^SEM ! 108, 110, 112 and 122 ! #DELETE 48586>01 TRACE^SEM #ENDSCN = SW0S057 !#CMP2.28 02/20/24 BNETG 60141FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60141 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60141 * ******************************************************************************** #SCN = SW0S060 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &000260F ! 20FEB2024 NataraM ! Symptom: Banknet Release 24.Q2 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirements: ! AN 7102 - Introducing Mastercard Transaction Link ! Identifier. ! - Sourced in txn^link^id^tkn from BADDLTAL. ! - Added code to support DE 105. ! AN 7118 - Revised Standards for Acquirer Mandate to ! Populate the Merchant Payment Gateway ID. ! - Added defines to identify transactions ! originating from directly-connected devices. ! - Added defines to identify the MPG ID used when ! no gateway is involved and when the gateway ! is owned by the acquirer. ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS and BNETS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0224M, ILB0224R, ILB0224S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0224M. Run the ILF conversion using ILB0224R. ! Reference: WO #PDM-005647 #ADD x000260q ?nolist, source =basrc_baddltal( ? txn^link^id^tkn ? ) ?list ! txn^link^id^tkn ! ) #ADD 00191z00 b24^dev^orig^d = "1"#, b24^dev^dukpt^orig^d = "9"#, #ADD x0019302 define mpg^id^no^gateway^d = "00000999997"#; define mpg^id^acq^owned^d = "00000999998"#; #ADD d0061202 multi^use^data^bit^d = sbit^map[2].<08> #, !bit 105 ! #ADD d0104101 105, 3, sem^field( multi^use^data ), #DELETE 01042 #ENDSCN = SW0S060 !#CMP2.28 03/22/24 BNETLIBS6368 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6368 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6368 * ******************************************************************************** #SCN = SW0S091 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6368 #NEWVERSION = 6369 #REPLACE 11002]0H ! AMEX CAPN April 2024 Mandates - Indirect Acceptor ! #ADD 11002]0j ! 22MAR2024 wielerk ! Symptom: The interface abends with various traps. ! Problem: When processing an AFD preauth completion, an INT ! pointer is used to locate the Compliance token from ! the ILF and then used to add the token to the PSTM. ! Fix: Modified the code to define a STRUCT to add the ! Compliance token to the PSTM if it is not present. ! Proc Modified: util^ilf^get^pos^preauth ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3617351. #ADD 53367 UTIL^ILF^GET^POS^PREAUTH struct .compliance^tkn( ichg^compliance^tkn^def ); int compliance^lgth := $len( compliance^tkn ); int fnd^compliance^tkn := false; #ADD 53393 UTIL^ILF^GET^POS^PREAUTH ! ! if the compliance token is in the pstm, do not add it after the ! ilf search ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ); #DELETE 53394 UTIL^ILF^GET^POS^PREAUTH #REPLACE 53419 /53420 UTIL^ILF^GET^POS^PREAUTH if ( not fnd^compliance^tkn ) and hiswtkn^get^tkn( pstm^, #ADD 53426 UTIL^ILF^GET^POS^PREAUTH @compliance^tkn := @compliance^get^tkn; #DELETE 53427 UTIL^ILF^GET^POS^PREAUTH #REPLACE 53432 /53433 UTIL^ILF^GET^POS^PREAUTH compliance^tkn, compliance^lgth, #ENDSCN = SW0S091 !#CMP2.28 03/27/24 BNETLIBS6369 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6369 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6369 * ******************************************************************************** #SCN = SW0S107 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6369 #NEWVERSION = 6370 #ADD 11002^0G ! 28MAR2024 KandhaB ! Symptom: Soft declines of EMV 3DS Authentications ! Problem: The interface supports soft declines for EMV 3DS ! authentications with existing condition that does not ! generically check the values from SE-42 of DE-48. ! Fix: Modified code to cater the checking generically for ! possible values from SE-42 of DE-48 during soft ! declines of EMV 3DS Authentications ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3623440. #ADD 14999|03 PSTM^FRMT^0210^TO^XRESP ( ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "212" and sem^aav^challenge^d( sem ) ) or ( sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "211" and not sem^aav^stand^in^non^low^risk^d( sem ) ) or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "216" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "242" or sem.addl^data.info. ecom^sec^sub^fld^42.lvl^of^sec = "246" ) then #DELETE 14999|04/14999|0F PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0S107 !#CMP2.28 03/28/24 BNETS 6176 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6176 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6176 * ******************************************************************************** #SCN = SW0S110 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6176 #NEWVERSION = 6177 #ADD 0382100O ! 28MAR2024 wielerk ! Symptom: Interface does not pass DE-33 from advice messages into ! Base24. ! Problem: When formatting a PSTM from an external advice, DE-33 ! is not passed. Since it is not logged to the ILF, it ! needs to be explicitly moved to the PSTM from the SEM. ! Fix: Modified code to move DE-33 from the SEM advice to the ! PSTM. ! Procs Modified: sem^advice^response ! sem^advice^response^pos ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3620408. #ADD 18796 SEM^ADVICE^RESPONSE ! DE-33 - forward inst id #DELETE 18796>00 SEM^ADVICE^RESPONSE #REPLACE 18832>00/18832>00 OFFSET 0 SEM^ADVICE^RESPONSE if fwd^inst^bit^d then ! P-33 ! begin move ( advc.fwd^inst, sem.fwd^inst ); end; #ADD 19201A04 SEM^ADVICE^RESPONSE^POS if sem.fwd^inst.cde <> [ $len( sem.fwd^inst.cde ) * [ " " ] ] then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #DELETE 19201A05 SEM^ADVICE^RESPONSE^POS #ENDSCN = SW0S110 !#CMP2.28 03/28/24 BNETLIBS6370 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6370 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6370 * ******************************************************************************** #SCN = SW0S111 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6370 #NEWVERSION = 6371 #ADD 11002`0E ! 28MAR2024 wielerk ! Symptom: Interface does not pass DE-33 from advice messages into ! Base24. ! Problem: When formatting a PSTM from an external advice, DE-33 ! is not passed. Since it is not logged to the ILF, it ! needs to be explicitly moved to the PSTM from the SEM. ! Fix: Modified code to move DE-33 from the SEM advice to the ! PSTM. ! Procs Modified: sem^frmt^unmatchd^xrvsl^to^pstm ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3620408. #REPLACE 27357 /27357 OFFSET 0 SEM^FRMT^UNMATCHD^XRVSL^TO^PSTM if fwd^inst^bit^d then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), rvsl.fwd^inst.cde, $len( rvsl.fwd^inst.cde ), right^justify^l ); end; #REPLACE 37153 /37153 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 if fwd^inst^bit^d then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), rvsl.fwd^inst.cde, $len( rvsl.fwd^inst.cde ), right^justify^l ); end; #ENDSCN = SW0S111 !#CMP2.28 04/10/24 BNETLIBS6371 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6371 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6371 * ******************************************************************************** #SCN = SW0S119 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6371 #NEWVERSION = 6372 #ADD 11002~0F ! 10APR2024 ChristL ! Symptom: The Interface abends due to uninitialized memory ! Problem: When formatting PSTM, token ichg^pgm^tkn FC structure ! is not initialized which results in random values ! being set and the interface tries to add such a token ! resulting in abend. ! Fix: Modified code to initialize token ichg^pgm^tkn FC ! so that no random value may be set in the token ! to proceed for the unnecessary token addition. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3630151. #ADD 31338 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' ichg^pgm^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in addr !, ichg^pgm^tkn ); #ADD 37456H0C SEM^FRMT^XRVSL^TO^PSTM^0420 pi_pos_l, #DELETE 37456H0D SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0S119 !#CMP2.28 05/23/24 BNETG 60142FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60142 * ******************************************************************************** #SCN = SW0S155 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *000260U ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Added the DAR library name ( DAR^LIBRARY^NAME^G ) ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: WO #006191 #ADD 00403 int .dar^library^name^g[ 0:11 ] := ["************************"]; #ADD 01366E0A dar^library^name^g[ 0:11 ], #ENDSCN = SW0S155 !#CMP2.28 05/23/24 BNETLIBS6372 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6372 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6372 * ******************************************************************************** #SCN = SW0S156 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6372 #NEWVERSION = 6373 #ADD 11002(0G ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Procs Modified: util^ilf^reports ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: WO #006191 #ADD 54108 UTIL^ILF^REPORTS string .run^lib^1[0:27] := "RUN \F / OUT \F, LIB \F, &"; string .run^lib^2[0:32] := "PRI #, CPU # / \\\\ \\\\\\ \ \ \ "; #ADD 54204 UTIL^ILF^REPORTS if dar^library^name^g <> invalid^name^d then begin lgth := format( buffer, run^lib^1, 28, @rp09^name^g, @rpt^name^g, @dar^library^name^g ) '-' byteaddr( @buffer ); if ferror := write^file( outfile, buffer, lgth ) then begin call log^message^( 2315,, @fileerror, net.myname, 2, ferror ); return false; end; lgth := format( buffer, run^lib^2, 33, pct.setl.rpt^pri, pct.setl.rpt^cpu, @pct.fiid, @date, @date^display^g, @account^type^g, @blanks ) '-' byteaddr( @buffer ); end else begin lgth := format( buffer, run^, 50, @rp09^name^g, @rpt^name^g, pct.setl.rpt^pri, pct.setl.rpt^cpu, @pct.fiid, @date, @date^display^g, @account^type^g, @blanks ) '-' byteaddr( @buffer ); end; #DELETE 54205 /54209 UTIL^ILF^REPORTS #ENDSCN = SW0S156 !#CMP2.28 05/23/24 BNETS 6177 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6177 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6177 * ******************************************************************************** #SCN = SW0S158 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6177 #NEWVERSION = 6178 #ADD 0382110F ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Procs Modified: cmd^warmboot^store^globals ! cmd^warmboot^retrieve^globals ! init^assignproc ! Dependency: Apply fixes to BNETG, BNETLIBS and BNETS. Run Make. ! Reference: WO #006191 #ADD 09060 CMD^WARMBOOT^STORE^GLOBALS store^file^d( dar^library^name^g ); #ADD 09670 CMD^WARMBOOT^RETRIEVE^GLOBALS retrieve^file^d( dar^library^name^g ); #ADD 10229 INIT^ASSIGNPROC !17! "A", 0, "DAR-LIBRARY ", #ADD 10385 INIT^ASSIGNPROC !17! begin ! !DAR-LIBRARY ! call fnameexpand( lconf.assign^msg.file^name, dar^library^name^g, default^vs ); end; #ENDSCN = SW0S158 !#CMP2.28 06/06/24 BNETDDLS6090 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6090 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6090 * ******************************************************************************** #SCN = SW0S182 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6090 #NEWVERSION = 6091 #ADD E002620g * 06JUN2024 ChristL * Symptom: DE 112 offsets of the sub-elements differ between the * redefinitions * Problem: The code incorrectly finds a match on DE 112 * subelement but the value 007 is in fact the value of * position 11 to 13 of the SIRET data(S0.FR-BNET.CRD- * ACCPT-TAX-ID). * Fix: DE 112 has been re-structured for each redefinition, * so that sub-elements begin at the same offset within * each redefinition. As a result, the overall length of * each redefinition will be 814 bytes which is an * increase of 35 bytes from the existing 779 bytes. * Dependency: Apply fixes to: * SW60BNET: BNETDDLS * Run MAKE. * Reference: Case #3640879 #ADD 01411$0L SEM 04 info pic x(814). #DELETE 01411$0M SEM #ADD 01411@07 SEM 08 user-fld-aci pic x(16). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). 06 user-fld4 pic x(726). #DELETE 01411@08/01411@09 SEM #ADD 01411o0I SEM 08 user-fld-aci pic x(10). #ADD 01411108 SEM 08 user-fld-aci pic x(1). #ADD 01411o0Q SEM 08 user-fld-aci pic x(17). 06 user-fld4 pic x(726). #DELETE 01411v03/01411v05 SEM #ADD B014110v SEM 06 user-fld2 pic x(16). #ADD 01411v0F SEM 08 user-fld-aci pic x(7). 06 user-fld4 pic x(726). #DELETE B014110w/01411#0L SEM #ADD 01411#0M SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD 01411$0Y SEM 06 user-fld-aci pic x(550). #DELETE 01411$0Z SEM #ADD 01411:01 SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). #ADD 01411:0D SEM 10 user-fld-aci pic x(1). 06 user-fld4 pic x(726). #DELETE 01411:0E SEM #ADD 0141180A SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD 0141180P SEM 08 user-fld-aci pic x(645). #DELETE 0141180Q/0141180R SEM #ADD B0141115 SEM 06 sub-fld-97. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 appl-selct-id pic x(1). 08 user-fld-aci pic x(9). #ADD B014111A SEM 08 user-fld-aci pic x(20). #DELETE B014111B/B014111F SEM #ADD B014111K SEM 08 user-fld-aci pic x(718). #DELETE B014111L SEM #ADD 01411$0k SEM 08 user-fld-aci pic x(17). 06 user-fld2 pic x(16). 06 sub-fld-23. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 min-num-instl pic x(2). 10 max-num-instl pic x(2). 10 intrst-rat pic x(5). 10 instl-fee pic x(12). 10 annual-pctg-rat pic x(5). 10 ttl-amt-due pic x(12). 08 user-fld-aci pic x(2). #DELETE 01411$0w/01411$15 SEM #ADD 01411$17 SEM 06 sub-fld-31. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 dmstc-err-cde pic x(3). 08 user-fld-aci pic x(17). 06 user-fld2 pic x(16). 06 sub-fld-32. 08 tag pic x(3). 08 lgth pic x(3). 08 tag-data. 10 pmnt-opt-cde pic x(2). 10 bonuses-per-year pic x(2). 10 frst-bonus-month pic x(2). 10 frst-bonus-amt pic x(12). 10 scnd-bonus-month pic x(2). 10 scnd-bonus-amt pic x(12). 10 ttl-num-instl pic x(2). 10 frst-instl-month pic x(2). 08 user-fld-aci pic x(4). #ADD 01411+0A SEM 08 user-fld-aci pic x(582). #DELETE 01411+0B/01411+0G SEM #ADD 01411;01 SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD 01411;0K SEM 08 user-fld-aci pic x(631). #DELETE 01411;0L/01411=00 SEM #ADD 01411=01 SEM 06 user-fld1 pic x(26). #ADD 01411=05 SEM 08 user-fld-aci pic x(8). #ADD 01411=09 SEM 08 user-fld-aci pic x(28). 06 user-fld4 pic x(726). #DELETE 01411=0A/01411\00 SEM #ADD 01411\01 SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD 01411\0C SEM 08 user-fld-aci pic x(644). #DELETE 01411\0D SEM #ADD 01411{0O SEM 08 user-fld-aci pic x(8). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). 06 user-fld4 pic x(726). #DELETE 01411{0P/01411400 SEM #ADD 01411401 SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD 0141140S SEM 08 user-fld-aci pic x(610). #DELETE 0141140T SEM #ADD B014111O SEM 06 user-fld1 pic x(26). 06 user-fld2 pic x(16). 06 user-fld3 pic x(46). #ADD B014112H SEM 08 user-fld-aci pic x(597). #DELETE B014112I SEM #ENDSCN = SW0S182 !#CMP2.28 06/10/24 BNETS 6178 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6178 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6178 * ******************************************************************************** #SCN = SW0S188 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6178 #NEWVERSION = 6179 #ADD 0382120D ! 10JUN2024 wielerk ! Symptom: Interface can abend with Trap #3. ! Problem: When formatting a PSTM from an external advice, if the ! ILF trace record is updated the process will abend. ! Fix: Modified code to move calls to util^ilf^add from ! sem^advice^response^compl back to sem^advice^response. ! Modified code to pass only 1 SEM pointer when calling ! util^saf^add to remove the CSEM struct from ! sem^advice^response^compl. ! Modified code to remove SDF processing from ! sem^advice^response. ! Proc Added: sem^advice^response^sdf ! Procs Modified: pstm^0200^route ! pstm^0200^send^compl^advc ! sem^advice^response ! sem^advice^response^pos ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3642314. #REPLACE 15702J02 PSTM^0200^ROUTE int collapse := true; #ADD 15717J07 SUB^PSTM^ROUTE if util^^collapse( sem, csem, extlgth ) then begin call util^saf^add( csem, extlgth, pos^l, credit^l ); end; #DELETE 15717J08 SUB^PSTM^ROUTE #REPLACE 15819 PSTM^0200^SEND^COMPL^ADVC int collapse := true; #REPLACE 15853 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, #REPLACE 15855J02 PSTM^0200^SEND^COMPL^ADVC collapse ); #ADD 15863 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, !15864 #DELETE 15864 PSTM^0200^SEND^COMPL^ADVC #REPLACE 15866J02 PSTM^0200^SEND^COMPL^ADVC collapse ); #REPLACE 15877 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, #REPLACE 15879J02 PSTM^0200^SEND^COMPL^ADVC collapse ); #DELETE 18740 SEM^ADVICE^RESPONSE #ADD 18767 SEM^ADVICE^RESPONSE if sem^advice^response^sdf( sem, susp ) then begin call util^ilf^add( dat, susp.prikey, $len( susp.prikey ), susp.rec^typ, msg^sym^source, ! base24^msg !, sem, $len( sem ), sub^ok^l ); #DELETE 18768 /18777 SEM^ADVICE^RESPONSE #REPLACE 18781J0C/18781J0C OFFSET 0 SEM^ADVICE^RESPONSE if sem^advice^response^compl( susp, sem ) then begin call util^ilf^add( dat, susp.prikey, $len(susp.prikey), susp.rec^typ, msg^sym^source, susp.intrn^msg, sem, $len(sem^def), sub^ok^l ); end; #REPLACE 18899 SEM^ADVICE^RESPONSE^COMPL int proc sem^advice^response^compl( susp, sem ); #REPLACE 18905J00 SEM^ADVICE^RESPONSE^COMPL int collapse := true; #DELETE 18910 SEM^ADVICE^RESPONSE^COMPL #REPLACE 18945 SUB^APPRV^BLIND return false; #REPLACE 18950 SUB^APPRV^BLIND return false; #REPLACE 18960J02/18964 SUB^APPRV^BLIND collapse := true; call util^saf^add( xadvc, #REPLACE 18966J02 SUB^APPRV^BLIND collapse ); #DELETE 18998 /19006 SUB^APPRV^BLIND #REPLACE 19006J01 SUB^APPRV^BLIND return true; #DELETE 19007P04/19007P0C SUB^APPRV^BLIND #REPLACE 19007P0D SUB^APPRV^BLIND return true; #DELETE 19012 /19020 SUB^APPRV^BLIND #REPLACE 19021 SUB^APPRV^BLIND return true; #ADD 19218 SEM^ADVICE^RESPONSE^POS ?section sem^advice^response^sdf ?page "sem^advice^response^sdf" !##################################################################### !# # !# sem^advice^response^sdf # !# # !# # !# This proc performs a search of suspended memory for an SDF # !# record. If found, an ILF record will be logged and the SDF # !# record will be deleted from the SDF. # !# # !# INPUT PARAMETERS: # !# sem - advice response message # !# susp - suspense message pointer # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### int proc sem^advice^response^sdf( sem, susp ) extensible; int .sem( sem^def ); int .susp( susp^bnet^def ); begin struct .sdf( sdf^def ); int .pbit^map := wordaddr( @sem.pbit^map ); string .dat[ 0:5 ] := [ 6 * [ "0" ] ]; if setl^dat^bit^d then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); call util^ilf^dat( dat ); end; call sem^frmt^sdf^prikey( sem, susp.prikey ); if util^suspend^tran^delete( susp, $len(susp^bnet^def), type^sdf^l ) then begin call util^sdf^delete( sdf, $len(sdf^def) ); return true; end; ! of susp record found return false; end; ! of sem^advice^response^sdf #ENDSCN = SW0S188 !#CMP2.28 06/10/24 BNETLIBS6373 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6373 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6373 * ******************************************************************************** #SCN = SW0S189 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6373 #NEWVERSION = 6374 #ADD 11002)0B ! 10JUN2024 wielerk ! Symptom: Interface can abend with Trap #3. ! Problem: When formatting a PSTM from an external advice, if the ! ILF trace record is updated the process will abend. ! Fix: Modified code to accomodate 1 SEM pointer when calling ! util^saf^add to remove the CSEM struct from ! sem^advice^response^compl. ! Proc Modified: util^saf^add ! Dependency: Apply fixes to: ! SW60BNET: BNETS, BNETLIBS. ! Run Make. ! Reference: Case #3642314. #REPLACE 55899 UTIL^POS^STANDIN^RCS !# collapse - flag indicating record must be collapsed ( opt.) #! #REPLACE 55905 UTIL^SAF^ADD collapse ) extensible; #REPLACE 55910 UTIL^SAF^ADD int collapse; #ADD 55914 UTIL^SAF^ADD struct .csem( sem^def ); #REPLACE 55915 UTIL^SAF^ADD int .sem( sem^def ) := ( @rec^data ); #ADD 55916 UTIL^SAF^ADD string .ssem^data( sem^def ) := byteaddr( @csem ); #REPLACE 55918 /55918 OFFSET 0 UTIL^SAF^ADD if $param( collapse ) and collapse then #REPLACE 55927 /55929 UTIL^SAF^ADD call util^^collapse( sem, csem, rec^lgth ); srec^data ':=' ssem^data for rec^lgth; end else begin srec^data ':=' rec^data for rec^lgth; end; #ENDSCN = SW0S189 !#CMP2.28 06/10/24 BNETS 6179 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6179 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6179 * ******************************************************************************** #SCN = SW0S190 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6179 #NEWVERSION = 6180 #ADD 0382130L ! 10JUN2024 wielerk ! Symptom: Interface failed MAKE. ! Problem: A sequence number was misaligned in pstm^0200^send^ ! compl^advc. ! Fix: Modified code to remove extraneous blank lines caused ! by the isaligned sequence number. ! Procs Modified: pstm^0200^send^compl^advc ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3642314. #ADD 15852 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, extlgth, pos^l, service, collapse ); #DELETE 15853300/15856J01 PSTM^0200^SEND^COMPL^ADVC #ADD 15863 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, extlgth, pos^l, service, collapse ); #DELETE 15863300/15867J01 PSTM^0200^SEND^COMPL^ADVC #ADD 15876 PSTM^0200^SEND^COMPL^ADVC call util^saf^add( sem, extlgth, pos^l, service, collapse ); #DELETE 15877300/15880J01 PSTM^0200^SEND^COMPL^ADVC #ENDSCN = SW0S190 !#CMP2.28 06/14/24 BNETS 6180 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETS BNETS 6180 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETS BNETS 6180 * ******************************************************************************** #SCN = SW0S191 , FILEID = BNETS #VOLUME = $ROOK.SW60BNET #FILE = BNETS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6180 #NEWVERSION = 6181 #ADD 0382140C ! 14JUN2024 wielerk ! Symptom: Interface can fail ILF search for AFD reversal if ! enhanced pre auth processing is configured. ! Problem: The logic to allow for enhanced pre auth processing ! for a pre auth reversal is not complete. This causes ! the search to fail as the search key is incorrect. ! Fix: Modified code to add the processing for the POS Mrch ! token to use approval code in the sequence number ! field of the ILF key. ! Procs Modified: pstm^0420^reversal ! Dependency: Apply fix to: ! SW60BNET: BNETS. ! Run Make. ! Reference: Case #3642969. #ADD 16687 PSTM^0420^REVERSAL int pos^mrch^tkn^lgth := 0; int .pos^mrch^tkn^ptr( pos^mrch^tkn^def ); #ADD 16755 PSTM^0420^REVERSAL movd( tkn^id, pos^mrch^tkn^id^d ); if ( hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn^ptr, pos^mrch^tkn^lgth ) and pos^mrch^tkn^ptr.enhanced^pre^auth = "Y" ) then begin init( prikey.seq^num, " ", $len( prikey.seq^num ) ); move( prikey.seq^num, pstm.tran.apprv^cde ); end else begin move( prikey.seq^num, pstm.pre^auth^seq^num ); end; #DELETE 16756 PSTM^0420^REVERSAL #ENDSCN = SW0S191 !#CMP2.28 06/14/24 BNETLIBS6374 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6374 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6374 * ******************************************************************************** #SCN = SW0S192 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6374 #NEWVERSION = 6375 #ADD 11002{0D ! 14JUN2024 wielerk ! Symptom: Interface maps external response code "65" ( exceeds ! limits ) to internal code "096" ( PIN required ) ! incorrectly based on SCA configuration. ! Problem: Mastercard uses response code "65" for dual purposes. ! When formatting the internal response code if the ! SCA Support Lconf param is set to "Y", the external ! response code of "65" results in the internal response ! being set to "096". ! Fix: Modified code to make the SCA support param edit apply ! to Single Tap & PIN separately within the response code ! "65" mapping. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3638008. #REPLACE 28451b01 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = "65" then #DELETE 28451b02 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 28451|01 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 28451|0O/28451|0O OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 end else if bnet^g.sppt^sca^g or sem.addl^data.info.mrch^inds^sub^fld^22. single^tap^pin^rqst^from^iss.tag = "04" then begin movd( pstm.tran.resp^cde, "096" ); end; #ENDSCN = SW0S192 !#CMP2.28 08/22/24 BNETDDLS6091 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETDDLS BNETDDLS 6091 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETDDLS BNETDDLS 6091 * ******************************************************************************** #SCN = SW0S242 , FILEID = BNETDDLS #VOLUME = $ROOK.SW60BNET #FILE = BNETDDLS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6091 #NEWVERSION = 6092 #ADD F002620H * 22AUG2024 ChristL * Symptom: Banknet Release 24.Q4 Functional Enhancements * Problem: None. * Fix: The interface has been modified in support of the * below requirements: * GLB 8405: Repurposing a Data Element * - Added a structure for DE 119 to the area of the * SEM not logged to the ILF * GLB 8409: Enhancing Network for Visa Installment * Solutions * - Added a structure for DE 48, SE 03, in * conjunction with the re-organization of the * DE 48 structure. * GLB 8431: Introducing Geographic Coordinates Data * Fields * - Added a new structure for SF 013 and SF 014 to * the DE 122 definition. * Case H24-607758: Remove Some DE 48 SEs from the Area * of the SEM Logged to the Banknet ILF * - Deleted the structure for DE 48 * - Added a new structure for DE 48, following the * structure for DE 122 * Dependency: Apply fixes to: * BA60AFT : COBTKN * BA60DDL : DDLBATKN, DDLPSTKN * BA60SRC : BATKNCVS, BATKNID * SW60ABNT: BNETATMS * SW60BNET: BNETDDLS, BNETG, BNETLIBS * Run MAKE. * Replace files: * SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT * New files: ILB0824M, ILB0824R, ILB0824S depend on the * BA10SC04 subvolume. Make the ILF conversion using * ILB0824M. Run the ILF conversion using ILB0824R. * Reference: WO #PDM-006623 #DELETE D004530d OFFSET 1/D004530j NMM #ADD D004530j NMM #ADD D004530j NMM #ADD D004530j NMM #ADD D004530j NMM #ADD D004530j NMM #DELETE E0105501/01158A01 SEM #ADD 0140290x SEM 06 geo-coord. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(20). 06 srvc-loc-geo-coord. 08 tag pic 9(3). 08 lgth pic 9(3). 08 tag-data pic x(20). #ADD 01411b00 SEM * ! * additional data, private ! * bit map position = 48 ! * EBCDIC in transmission, variable in length ! * ! 02 addl-data. 04 lgth pic 999. 04 info. * * Transaction Category Code * 06 tran-cat-cde pic x(1). * * Virtual Card Number (VCN) Data * Subfield tag = 09 * 06 vcn-data-sub-fld-09. 08 tag pic 99. 08 lgth pic 99. 08 vcn-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 vcn-pan. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). 08 vcn-exp-date. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). * * Additional Visa Response Data * Subfield tag = 05, redefine of subfield 09 * 06 adnl-visa-resp-data-sub-fld-05 redefines vcn-data-sub-fld-09. 08 tag pic 99. 08 lgth pic 99. 08 cmrcl-choice-pgm. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). 08 dgtl-authn-pgm. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 auth-resp-src-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 user-fld pic x(17). * * Routing Indicator * Subfield tag = 12 * 06 rte-ind-sub-fld-12. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Visa CAVV Result Code * Subfield tag = 45, redefine of subfield 12 * 06 visa-cavv-rslt-cde-sub-fld-45 redefines rte-ind-sub-fld-12. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Account Type Indicator * Subfield tag = 14 * 06 acct-typ-ind-sub-fld-14. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Authorization System Advice Date and Time * Subfield tag = 15 * 06 auth-sys-adv-sub-fld-15. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 dat pic 9(4). 10 tim pic 9(6). * * Service Parameters * Subfield tag = 18, redefine of subfield 15 * 06 srvc-params-sub-fld-18 redefines auth-sys-adv-sub-fld-15. 08 tag pic 99. 08 lgth pic 99. 08 canada-dmstc-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 user-fld pic x(5). * * Authentication Indicator * Subfield tag = 17 * 06 authn-ind-sub-fld-17. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x. * * Card Verification Method * Subfield tag = 20 * 06 crd-vrfy-mthd-sub-fld-20. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Acceptance Data * Subfield tag = 21 * 06 accpt-data-sub-fld-21. 08 tag pic 99. 08 lgth pic 99. 08 mpos-dev-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). * * Multi-Purpose Merchant Indicator * Subfield tag = 22 * 06 mrch-inds-sub-fld-22. 08 tag pic 99. 08 lgth pic 99. 08 low-risk-mrch-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 single-tap-pin-cap-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 single-tap-pin-rqst-from-acq. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 single-tap-pin-rqst-from-iss. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 cit-mit-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(4). 08 msg-frmt-ver-cde-acq. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). * * Payment Initiation Channel * Subfield tag = 23 * 06 pmnt-init-chan-sub-fld-23. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). * * Wallet Program Data * Subfield tag = 26 * 06 wallet-pgm-sub-fld-26. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 wallet-id pic x(3). * * Additional Transaction Analysis * Subfield tag = 27 * 06 txn-analysis-sub-fld-27. 08 tag pic 99. 08 lgth pic 99. 08 txn-disp. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 test-rslts. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3) occurs 29 times. * * Visa Acceptance Environment Response Data * Subfield tag = 04 * 06 visa-accpt-envmt-sub-fld-04 redefines txn-analysis-sub-fld-27. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(80). 08 user-fld pic x(17). * * Token Transaction Id * Subfield tag = 30 * 06 tkn-txn-id-sub-fld-30. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(44). * * Visa Secure Electronic Commerce Transaction Identifier * Subfield tag = 44, redefine of subfield 30 * 06 visa-ecom-xid-sub-fld-44 redefines tkn-txn-id-sub-fld-30. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). 08 user-fld pic x(4). * * Mastercard Assigned ID * Subfield tag = 32 * 06 mc-asgn-id-sub-fld-32. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(6). * * PAN Mapping Information * Subfield tag = 33 * 06 paypass-mapping-sub-fld-33. 08 tag pic 99. 08 lgth pic 99. 08 acct-num-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 acct-num. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). 08 crd-exp-dat. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(4). 08 prod-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 tkn-assurance-lvl. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 tkn-rq-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(11). 08 pan-acct-range. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(19). 08 storage-technology. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). * * Dynamic CVC3 ATC Information * Subfield tag = 34 * 06 dyn-atc-cvc3-info-sub-fld-34. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 atc-val pic 9(5). 10 atc-discrp-val pic 9(5). 10 atc-discrp-ind pic x(1). * * Visa Payment Service Indicators * Subfield tag = 78, redefine of subfield 34 * 06 visa-pmnt-srvcs-sub-fld-78 redefines dyn-atc-cvc3-info-sub-fld-34. 08 tag pic 99. 08 lgth pic 99. 08 spend-qualified-ind pic x(1). 08 dcc-ind pic x(1). 08 def-bill-ind pic x(1). 08 chkout-ind pic x(1). 08 msg-rsn-cde pic x(1). 08 tkn-resp-info pic x(1). 08 user-fld pic x(5). * * PayPass NCFF Request/Response * Subfield tag = 35 * 06 ncff-rqst-resp-sub-fld-35. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Visa Service Development Indicator * Subfield tag = 86, redefine of subfield 35 * 06 visa-svc-dvlpmt-ind-sub-fld-86 redefines ncff-rqst-resp-sub-fld-35. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Additional Merchant Data * Subfield tag = 37 * 06 adnl-mrch-data-sub-fld-37. 08 tag pic 99. 08 lgth pic 99. 08 pmnt-facilitator-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(11). 08 idpnt-sales-org-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic 9(11). 08 sub-mrch-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). 08 cntry-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 mrch-pmnt-gtwy-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(11). * * Account Category * Subfield tag = 38 * 06 acct-cat-sub-fld-38. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Visa Account Status * Subfield tag = 85, redefine of subfield 38 * 06 visa-acct-stat-sub-fld-85 redefines acct-cat-sub-fld-38. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Electronic Commerce Certificate Qualifying Information * Subfield tag = 41 * 06 e-comm-cert-qual-sub-fld-41. 08 tag pic 99. 08 lgth pic 99. 08 recur-pmnt-adnl-info. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(26). 08 citizen-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(20). * * Electronic Commerce Indicators * Subfield tag = 42 * 06 ecom-sec-sub-fld-42. 08 tag pic 99. 08 lgth pic 99. 08 subfld-id pic 99. 08 data-lgth pic 99. 08 lvl-of-sec. 10 sec-proto pic 9. 10 crdhldr-auth pic 9. 10 ucaf-ind pic 9. 08 sf02-tag pic 99. 08 sf02-lgth pic 99. 08 orig-lvl-of-sec pic 9(3). 08 sf03-tag pic 99. 08 sf03-lgth pic 99. 08 downgrade-rsn pic 9. * * Universal Card Authentication Field * Subfield tag = 43 * 06 ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(32). 08 user-fld pic x(9). * * Visa CAVV Field * Subfield tag = 43, redefine of subfield 43 * 06 visa-cavv-sub-fld-43 redefines ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(40). 08 visa-sec-ecom-ind pic x(1). * * Visa Merchant/Cardholder Certificate Serial Numbers * Subfield tag = 40, redefine of subfield 43 * 06 cert redefines ucaf-sub-fld-43. 08 tag pic 99. 08 lgth pic 99. 08 merch. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(16). 08 crd-hldr. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(16). 08 user-fld pic x(1). * * Time Validation Information * Subfield tag = 49 * 06 tim-valid-info-sub-fld-49. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(15). 08 user-fld pic x(4). * * Fleet Card ID Request Data (Visa only) * Subfield tag = 93, redefine of subfield 49 * 06 visa-fltcrd-sub-fld-93 redefines tim-valid-info-sub-fld-49. 08 tag pic 99. 08 lgth pic 99. 08 crd-typ-rqst-ind pic x(1). 08 tag-data pic x(18). * * Transaction Integrity Class * Subfield tag = 52 * 06 txn-intgty-clas-sub-fld-52. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). * * E-ID Request Code * Subfield tag = 53 * 06 e-id-rqst-cde-sub-fld-53. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). * * Security Services Additional Data for Issuers * Subfield tag = 56 * 06 sec-srvc-iss-sub-fld-56. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 16 times. 10 ss-ind pic x(3). 10 ss-data pic x(3). * * Security Services Additional Data for Acquirers * Subfield tag = 57, redefine of subfield 56 * 06 sec-srvc-acq-sub-fld-57 redefines sec-srvc-iss-sub-fld-56. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 16 times. 10 ss-ind pic x(3). 10 ss-data pic x(3). * * POS Data, Extended Condition Codes * Subfield tag = 61 * 06 ext-cond-cdes-sub-fld-61. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 partial-apprv-ind pic 9. 10 purch-amt-only-ind pic 9. 10 iias-ind pic 9. 10 mrch-txn-fraud-score-ind pic 9. 10 final-auth-ind pic 9. * * Trace ID * Subfield tag = 63 * 06 trc-id-sub-fld-63. 08 tag pic 99. 08 lgth pic 99. 08 bnet-ref-num pic x(9). 08 dat-setl pic x(6). * * Transit Program * Subfield tag = 64 * 06 transit-pgm-sub-fld-64. 08 tag pic 99. 08 lgth pic 99. 08 tag-data. 10 txn-typ-ind pic 99. 10 trnsprt-mde-ind pic 99. * * Terminal Compliant Indicator * Subfield tag = 65 * 06 term-cmplnt-ind-sub-fld-65. 08 tag pic 99. 08 lgth pic 99. 08 certified. 10 tle pic x(1). 10 ukpt pic x(1). * * Authentication Data * Subfield tag = 66 * 06 authn-data-sub-fld-66. 08 tag pic 99. 08 lgth pic 99. 08 pgm-proto. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 ds-txn-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(36). * * On-Behalf Services * Subfield tag = 71 * 06 on-behalf-svc-sub-fld-71. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 svc pic x(2). 10 rslt-1 pic x(1). 10 rslt-2 pic x(1). * * Merchant On-Behalf Services * Subfield tag = 51, redefine of subfield 71 * 06 on-behalf-svc-sub-fld-51 redefines on-behalf-svc-sub-fld-71. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 svc pic x(2). 10 rslt-1 pic x(1). 10 rslt-2 pic x(1). * * Issuer Chip Authentication * Subfield tag = 72 * 06 iss-chip-auth-sub-fld-72. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(32). * * Additional Visa Request Data * Subfield tag = 03, redefine of subfield 72 * 06 adnl-visa-rqst-data-sub-fld-03 redefines iss-chip-auth-sub-fld-72. 08 tag pic 99. 08 lgth pic 99. 08 plan-rgstr-sys-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(10). 08 user-fld pic x(18). * * Additional Processing Information * Subfield tag = 74 * 06 adnl-proc-info-sub-fld-74. 08 tag pic 99. 08 lgth pic 99. 08 tag-data occurs 10 times. 10 mchip-pro-ind pic x(2). 10 mchip-proc-info pic x(1). * * Fraud Scoring Data * Subfield tag = 75 * 06 fraud-scoring-data-sub-fld-75. 08 tag pic 99. 08 lgth pic 99. 08 fraud-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 score-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 rule-adj-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 rule-rsn-cde-1. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 rule-rsn-cde-2. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). * * Merchant Fraud Scoring Data * Subfield tag = 55, redefine of subfield 75 * 06 mrch-fraud-scoring-sub-fld-55 redefines fraud-scoring-data-sub-fld-75. 08 tag pic 99. 08 lgth pic 99. 08 fraud-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 score-rsn-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 subfield-3. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 subfield-4. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). 08 subfield-5. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(2). * * MasterCard Electronic Acceptance Indicator * Subfield tag = 76 * 06 mc-elec-accpt-ind-sub-fld-76. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Payment Transaction Type Indicator * Subfield tag = 77 * 06 pmnt-txn-typ-ind-sub-fld-77. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(3). * * Chip CVR/TVR Bit Error Results Listing * Subfield tag = 79 * 06 chip-bit-err-rslts-sub-fld-79. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(50). * * Product ID (Visa only) * Subfield tag = 46, redefine of subfield 79 * 06 crd-lvl-rslt-sub-fld-46 redefines chip-bit-err-rslts-sub-fld-79. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 se-97 pic x(5). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(2). * * Commercial Card Inquiry Request/Response (Visa only) * Subfield tag = 94, redefine of subfield 79 * 06 visa-cmrcl-sub-fld-94 redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 tag pic 99. 08 lgth pic 99. 08 crd-typ-rqst-ind pic x(3). 08 rqst-cmrcl-crd-typ pic x(1). 08 se-96 pic x(5). 08 se-97 pic x(5). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(2). * * Market-Specific Data Identifier (Visa only) * Subfield tag = 96, redefine of subfield 79 * 06 visa-mkt-spcfc-data-sub-fld-96 redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). 08 se-97 pic x(5). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(2). * * Prestigious Properties Indicator (Visa only) * Subfield tag = 97, redefine of subfield 79 * 06 visa-prest-prop-ind-sub-fld-97 redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). 08 se-90 pic x(5). 08 se-91 pic x(23). 08 user-fld pic x(2). * * PS2000 Request Data (Visa only) * Subfield tag = 90, redefine of subfield 79 * 06 ps2000-rqst-data redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 se-97 pic x(5). 08 tag pic 99. 08 lgth pic 99. 08 ind pic x(1). 08 se-91 pic x(23). 08 user-fld pic x(2). * * PS2000 Response Data (Visa only) * Subfield tag = 91, redefine of subfield 79 * 06 ps2000-resp-data redefines chip-bit-err-rslts-sub-fld-79. 08 se-46 pic x(6). 08 se-94 pic x(8). 08 se-96 pic x(5). 08 se-97 pic x(5). 08 se-90 pic x(5). 08 tag pic 99. 08 lgth pic 99. 08 resp-data. 10 tran-id pic x(15). 10 valid-cde pic x(4). 08 reas-code redefines resp-data. 10 reason-cde pic x(4). 10 fillrcde pic x(15). 08 user-fld pic x(2). * * PIN Service Code * Subfield tag = 80 * 06 pin-svc-cde-sub-fld-80. 08 tag pic 99. 08 lgth pic 99. 08 cde pic x(2). * * AVS Request * Subfield tag = 82 * 06 avs-rqst. 08 tag pic 99. 08 lgth pic 99. 08 cde pic x(2). * * AVS Response * Subfield tag = 83 * 06 avs-resp. 08 tag pic 99. 08 lgth pic 99. 08 result pic x(1). * * Merchant Advice Code * Subfield tag = 84 * 06 mrch-advc-cde-sub-fld-84. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(2). * * Card Validation Code Result * Subfield tag = 87 * 06 cvc-sub-fld-87. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Magnetic Stripe Compliance Status Indicator * Subfield tag = 88 * 06 cvc-sub-fld-88. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * Magnetic Stripe Compliance Error Indicator * Subfield tag = 89 * 06 cvc-sub-fld-89. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(1). * * MasterCard Promotion Code * Subfield tag = 95 * 06 mc-prmtn-cde-sub-fld-95. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(6). * * Mastercard Corporate Fleet Card ID/Driver Number * Subfield tag = 98 * 06 cvc-sub-fld-98. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9(6). * * Mastercard Corporate Fleet Card Vehicle Number * Subfield tag = 99 * 06 cvc-sub-fld-99. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9(6). * * Reserved for future use by ACI * 06 user-fld-aci pic x(16). #ADD 01411$07 SEM * * Mobile Phone Top-up Request Data * Subfield tag = 13 * 06 mptu-rqst-sub-fld-13. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(47). * * Account Level Management(ALM) Service Data * Subfield tag = 24 * 06 alm-srvc-data-sub-fld-24. 08 tag pic 99. 08 lgth pic 99. 08 srvc-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(5). 08 prod-cde. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 prod-clas. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 rate-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). * * Account Data Compromise Information * Subfield tag = 39 * 06 acct-data-cmprms-sub-fld-39. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(30). * * MasterCard Payment Gateway Transaction Indicator * Subfield tag = 47 * 06 mc-gtwy-txn-ind-sub-fld-47. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic x(8). * * Digital Commerce Solutions Indicators * Subfield tag = 48 * 06 dgtl-cmrc-inds-sub-fld-48. 08 tag pic 99. 08 lgth pic 99. 08 dom-id. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 pgm-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 chk-in-enty-typ-nam. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). 08 chk-in-mthd. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(40). * * Mobile Program Indicators * Subfield tag = 48, redefine of subfield 48 * 06 mobile-pgm-inds-sub-fld-48 redefines dgtl-cmrc-inds-sub-fld-48. 08 tag pic 99. 08 lgth pic 99. 08 remt-pmnts-pgm-typ-ind. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 remt-pmnt-txn-typ. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 mobile-phn-num. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(15). 08 convenience-fee. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(40). * * Reference Currency Data * Subfield tag = 60 * 06 adnl-srvc-data-sub-fld-60. 08 tag pic 99. 08 lgth pic 99. 08 ref-conv-rate. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(8). 08 ref-conv-rate-diff-sign. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(1). 08 ref-conv-rate-pcnt-diff. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(6). * * MoneySend Information * Subfield tag = 67 * 06 moneysend-info-sub-fld-67. 08 tag pic 99. 08 lgth pic 99. 08 sanction-scrn-score. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(3). 08 score-adnl-data. 10 tag pic 99. 10 lgth pic 99. 10 tag-data pic x(58). * * Mastercard CVC 2 * Subfield tag = 92 * 06 cvc2-sub-fld-92. 08 tag pic 99. 08 lgth pic 99. 08 tag-data pic 9(3). 08 user-fld pic x(3). * * Visa CVV 2 * Subfield tag = 92, redefine of subfield 92 * 06 visa-cvv2-sub-fld-92 redefines cvc2-sub-fld-92. 08 tag pic 99. 08 lgth pic 99. 08 prsn-ind pic x(1). 08 cvv2-resp-typ pic 9. 08 tag-data pic x(4). #ADD 01411b8V SEM 08 tag-data pic x(127). #DELETE 01411b8W SEM #ADD 01411b8e SEM 08 tag-data pic x(127). #DELETE 01411b8f SEM #ADD D0141109 SEM 04 info pic x(45). #DELETE D014110A SEM #DELETE D014110g SEM #ADD F014113B SEM * * additional data, private 2 * bit map position = 119 * EBCDIC in transmission * 02 addl-data-2. 04 lgth pic x(3). 04 info pic x(30). #ENDSCN = SW0S242 !#CMP2.28 08/22/24 BNETG 60143FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETG BNETG 60143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETG BNETG 60143 * ******************************************************************************** #SCN = SW0S243 , FILEID = BNETG #VOLUME = $ROOK.SW60BNET #FILE = BNETG #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +000260B ! 22AUG2024 ChristL ! Symptom: Banknet Release 24.Q4 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirement: ! GLB 8405: Repurposing a Data Element ! - Added a define for DE 119 ! - Added an entry for DE 119 to sem^bit^map^tbl^g ! GLB 9921: Assigning and Repurposing Leading Indicators ! to the Accountholder Authentication Value ! - Added leading indicator kG to the define ! identifying when a cardholder has been ! challenged during the 3D Secure process ! AN 2723: Revised Standards for Europe Region PSD2 ! RTS Compliance for Remote Electronic ! Transactions ! - Deleted the define DFLT^TRACE^ID^D ! AN 7721: Enhancing Account Status Inquiry ! - Added a define for amount type 05 ! Case H24-158792: Switch Token Data ! - Sourced in advc^data^tkn from BADDLTAL ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0824M, ILB0824R, ILB0824S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0824M. Run the ILF conversion using ILB0824R. ! Reference: WO #PDM-006623 #ADD *000260c ?nolist, source =basrc_baddltal( ? advc^data^tkn ? ) ?list ! advc^data^tkn ! ) #ADD 00078i0B define bnet^amt^typ^future^txn^d = "05"#; #ADD 00193 define repower^accpt^nam^text^d = "MC REPOWER"#; define mpg^id^no^gateway^d = "00000999997"#; define mpg^id^acq^owned^d = "00000999998"#; #DELETE 00193z00/*0019303 #ADD r0023307 x.addl^data.info.ucaf^sub^fld^43.tag^data = "kG" or #ADD 00612i02 addl^data^2^bit^d = sbit^map[3].<06> #, !bit 119 #ADD 01055 119, 3, sem^field( addl^data^2 ), #DELETE 01056 #ENDSCN = SW0S243 !#CMP2.28 08/22/24 BNETLIBS6375 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6375 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6375 * ******************************************************************************** #SCN = SW0S244 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6375 #NEWVERSION = 6376 #ADD 11002}0I ! 22AUG2024 ChristL ! Symptom: Banknet Release 24.Q4 Functional Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! below requirements: ! GLB 8409: Enhancing Network for Visa Installment ! Solutions ! GLB 8411: Introducing an Indicator for Multi-Use ! Virtual Cards ! GLB 8429: Introducing On-Behalf Name Match Service ! and Enhancements to Name Validation Service ! GLB 8431: Introducing Geographic Coordinates Data ! Fields ! GLB 9921: Assigning and Repurposing Leading Indicators ! to the Accountholder Authentication Value ! AN 2723: Revised Standards for Europe Region PSD2 RTS ! Compliance for Remote Electronic ! Transactions ! AN 7721: Enhancing Account Status Inquiry ! GLB 9079: Revised Standards for Online Gambling ! Authentication ! Case H24-158792: Switch Token Data ! Case H24-607758: Remove Some DE 48 SEs from the Area ! of the SEM Logged to the Banknet ILF ! Proc Modified: pstm^frmt^amt^to^sem^amt ! pstm^frmt^sem^addl^data ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! util^add^pos^accpt^data^tkns ! util^collapse^sem ! util^expand^sem ! util^frmt^addl^data^to^xrvsl ! util^ilf^add ! Proc Added: util^add^advc^data^tkn ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID ! SW60ABNT: BNETATMS ! SW60BNET: BNETDDLS, BNETG, BNETLIBS ! Run MAKE. ! Replace files: ! SW60BNET: BNETLOGM, BNETMNWD, BNETUPDT ! New files: ILB0824M, ILB0824R, ILB0824S depend on the ! BA10SC04 subvolume. Make the ILF conversion using ! ILB0824M. Run the ILF conversion using ILB0824R. ! Reference: WO #PDM-006623 #ADD 12061 PSTM^FRMT^0200^TO^XRQST int online^gambling^authn := false; #ADD 12068 PSTM^FRMT^0200^TO^XRQST int sem^lgth := 0; #ADD 13156g00 SUB^LOG^ERROR ! Ensure DE 61.4 is set to 4 for CNP transactions setting ! #DELETE 13156g01 SUB^LOG^ERROR #ADD 13159 SUB^LOG^ERROR if ( bnet^g.sppt^sca^g and sem.ntl^pos^data.cond^cde.byte[ 3 ] = "5" ) or ( not bnet^g.sppt^sca^g and sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "0" ) then begin pos^data1^recur^pmnt := true; end; #DELETE 13160 SUB^LOG^ERROR #DELETE 13870 /13904 SUB^LOG^ERROR #ADD 14106o91 SUB^LOG^ERROR lgth ); #DELETE 14106o92/14106o93 SUB^LOG^ERROR #ADD 14106o96 SUB^LOG^ERROR lgth ); #DELETE 14106o97/14106o98 SUB^LOG^ERROR #ADD 14106o9E SUB^LOG^ERROR lgth; #DELETE 14106o9F/14106o9G SUB^LOG^ERROR #ADD 14106o9H SUB^LOG^ERROR ! ! ! Format DE 122 SE 001 SF 013 ! ! ! if adnl^term^owner^data^tkn.mc.geo^coord <> [ $len( adnl^term^owner^data^tkn.mc. geo^coord ) * [" "] ] then begin movd( sem.addl^rec^data.accpt.geo^coord.tag, "013" ); idx := $len( adnl^term^owner^data^tkn. mc.geo^coord ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. geo^coord.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while ! movl( sem.addl^rec^data.accpt. geo^coord.tag^data, adnl^term^owner^data^tkn.mc. geo^coord, lgth ); call integer^ascii^( sem.addl^rec^data.accpt. geo^coord.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. geo^coord.tag ) + $len( sem.addl^rec^data.accpt. geo^coord.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 013 formatting ! #ADD 14106oBP SUB^LOG^ERROR ! ! ! Format DE 122 SE 001 SF 014 ! ! ! if pos^srvc^loc^tkn.geo^coord <> [ $len( pos^srvc^loc^tkn. geo^coord ) * [ " " ] ] then begin movd( sem.addl^rec^data.accpt. srvc^loc^geo^coord.tag, "014" ); idx := $len( pos^srvc^loc^tkn.geo^coord ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn.geo^coord.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while ! movl( sem.addl^rec^data.accpt. srvc^loc^geo^coord.tag^data, pos^srvc^loc^tkn.geo^coord, lgth ); call integer^ascii^( sem.addl^rec^data.accpt. srvc^loc^geo^coord.lgth, lgth ); sub^lgth := sub^lgth + $len( sem.addl^rec^data.accpt. srvc^loc^geo^coord.tag ) + $len( sem.addl^rec^data.accpt. srvc^loc^geo^coord.lgth ) + lgth; end; ! of if DE 122 SE 001 SF 014 formatting ! #ADD 14248]0f SUB^LOG^ERROR if ( sem.merch^typ = "7995" or sem.merch^typ = "9406" or sem.merch^typ = "7800" or sem.merch^typ = "7801" or sem.merch^typ = "7802" ) and sem.ntl^pos^data.cond^cde.byte[ 3 ] <> "0" and sem.proc^cde <> sem^return^d and sem.proc^cde <> sem^pmnt^txn^d then begin if sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "212" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "242" then begin online^gambling^authn := true; end else if sem.addl^data.info.cvc2^sub^fld^92.tag^data <> [ $len( sem.addl^data.info.cvc2^sub^fld^92.tag^data ) * [" "] ] and ( not bnet^g.sppt^sca^g or ( bnet^g.sppt^sca^g and ( sem.ntl^pos^data.cond^cde.byte[ 3 ] = "2" or sem.ntl^pos^data.cond^cde.byte[ 3 ] = "3" ) ) ) then begin online^gambling^authn := true; end else if sem.ntl^pos^data.cond^cde.byte[ 3 ] = "4" and ( sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "214" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "217" or sem.addl^data.info.ecom^sec^sub^fld^42.lvl^of^sec = "247" or sem.addl^data.info.trc^id^sub^fld^63.tag = "63" ) then begin online^gambling^authn := true; end; if not online^gambling^authn then begin return resp^tran^bad^pos^l; end; end; #ADD 14564 PSTM^FRMT^0210^TO^XRESP int sf01^lgth := 0; int sf02^lgth := 0; int sf03^lgth := 0; #ADD 14572 PSTM^FRMT^0210^TO^XRESP #ADD 14572-01 PSTM^FRMT^0210^TO^XRESP int vrfn^data1^tkn^fnd := false; #ADD 15084-0F PSTM^FRMT^0210^TO^XRESP end else if pos^data3^tkn.adnl^resp^info^cde = "X" then begin set^addl^data^d( mrch^advc^cde^sub^fld^84. tag^data, "43" ); #REPLACE 15084-0G PSTM^FRMT^0210^TO^XRESP end; #ADD 15414-0C PSTM^FRMT^0210^TO^XRESP vrfn^data1^tkn^fnd := true; end; ! of if hiswtkn^get^tkn( pstm, #ADD 15414-0D PSTM^FRMT^0210^TO^XRESP if vrfn^data1^tkn^fnd and vrfn^data1^tkn.vrfn^data^typ = "D" then begin tag^lgth := 0; if vrfn^data1^tkn.first^nam <> [ $len( vrfn^data1^tkn.first^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.first^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.first^nam. byte[ idx ] <> " " then begin done := true; sf01^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf01^lgth + 4; end; if vrfn^data1^tkn.middle^nam <> [ $len( vrfn^data1^tkn.middle^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.middle^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.middle^nam. byte[ idx ] <> " " then begin done := true; sf02^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf02^lgth + 4; end; if vrfn^data1^tkn.last^nam <> [ $len( vrfn^data1^tkn.last^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.last^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.last^nam. byte[ idx ] <> " " then begin done := true; sf03^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf03^lgth + 4; end; if vrfn^data1^tkn.seq^num <> [ $len( vrfn^data1^tkn.seq^num ) * [ " " ] ] then begin tag^lgth := tag^lgth + 7; end; if vrfn^data1^tkn.clssf <> [ $len( vrfn^data1^tkn.clssf ) * [ " " ] ] then begin tag^lgth := tag^lgth + 5; end; movd( sem.moneysend^ref^data.info.byte[ lgth ], "09" ); lgth := lgth + 2; call integer^ascii( sem.moneysend^ref^data.info.byte[ lgth ], 3, tag^lgth ); lgth := lgth + 3; if sf01^lgth > 0 then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "01" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf01^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.first^nam, sf01^lgth ); lgth := lgth + sf01^lgth + 4; end; if sf02^lgth > 0 then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "02" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf02^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.middle^nam, sf02^lgth ); lgth := lgth + sf02^lgth + 4; end; if sf03^lgth > 0 then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "03" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf03^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.last^nam, sf03^lgth ); lgth := lgth + sf03^lgth + 4; end; if vrfn^data1^tkn.seq^num <> [ $len( vrfn^data1^tkn.seq^num ) * [ " " ] ] then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "04" ); movd( sem.moneysend^ref^data.info. byte[ lgth + 2 ], "03" ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.seq^num, $len( vrfn^data1^tkn.seq^num ) ); lgth := lgth + 7; end; if vrfn^data1^tkn.clssf <> [ $len( vrfn^data1^tkn.clssf ) * [ " " ] ] then begin movd( sem.moneysend^ref^data.info.byte[ lgth ], "05" ); movd( sem.moneysend^ref^data.info. byte[ lgth + 2 ], "01" ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.clssf, $len( vrfn^data1^tkn.clssf ) ); lgth := lgth + 5; end; if vrfn^data1^tkn.spcf^use^frmt^cde = "01" then begin tag^lgth := 0; sf01^lgth := 0; sf02^lgth := 0; sf03^lgth := 0; if vrfn^data1^tkn.mc^nam^vrfn.first^nam <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. first^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.mc^nam^vrfn. first^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.mc^nam^vrfn.first^nam. byte[ idx ] <> " " then begin done := true; sf01^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf01^lgth + 4; end; if vrfn^data1^tkn.mc^nam^vrfn.middle^nam <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. middle^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.mc^nam^vrfn. middle^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.mc^nam^vrfn. middle^nam.byte[ idx ] <> " " then begin done := true; sf02^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf02^lgth + 4; end; if vrfn^data1^tkn.mc^nam^vrfn.last^nam <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. last^nam ) * [ " " ] ] then begin idx := $len( vrfn^data1^tkn.mc^nam^vrfn. last^nam ); done := false; while( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.mc^nam^vrfn. last^nam.byte[ idx ] <> " " then begin done := true; sf03^lgth := idx + 1; end; end; ! of while tag^lgth := tag^lgth + sf03^lgth + 4; end; if vrfn^data1^tkn.mc^nam^vrfn.seq^num <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. seq^num ) * [ " " ] ] then begin tag^lgth := tag^lgth + 7; end; if vrfn^data1^tkn.mc^nam^vrfn.clssf <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. clssf ) * [ " " ] ] then begin tag^lgth := tag^lgth + 5; end; movd( sem.moneysend^ref^data.info.byte[ lgth ], "10" ); lgth := lgth + 2; call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth ], 3, tag^lgth ); lgth := lgth + 3; if sf01^lgth > 0 then begin movd( sem.moneysend^ref^data.info. byte[ lgth ], "01" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf01^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.mc^nam^vrfn.first^nam, sf01^lgth ); lgth := lgth + sf01^lgth + 4; end; if sf02^lgth > 0 then begin movd( sem.moneysend^ref^data. info.byte[ lgth ], "02" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf02^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.mc^nam^vrfn.middle^nam, sf02^lgth ); lgth := lgth + sf02^lgth + 4; end; if sf03^lgth > 0 then begin movd( sem.moneysend^ref^data. info.byte[ lgth ], "03" ); call integer^ascii( sem.moneysend^ref^data.info. byte[ lgth + 2 ], 2, sf03^lgth ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.mc^nam^vrfn.last^nam, sf03^lgth ); lgth := lgth + sf03^lgth + 4; end; if vrfn^data1^tkn.mc^nam^vrfn.seq^num <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. seq^num ) * [ " " ] ] then begin movd( sem.moneysend^ref^data.info. byte[ lgth ], "04" ); movd( sem.moneysend^ref^data.info. byte[ lgth + 2 ], "03" ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.mc^nam^vrfn.seq^num, $len( vrfn^data1^tkn.mc^nam^vrfn. seq^num ) ); lgth := lgth + 7; end; if vrfn^data1^tkn.mc^nam^vrfn.clssf <> [ $len( vrfn^data1^tkn.mc^nam^vrfn. clssf ) * [ " " ] ] then begin movd( sem.moneysend^ref^data.info. byte[ lgth ], "05" ); movd( sem.moneysend^ref^data.info. byte[ lgth + 2 ], "01" ); movl( sem.moneysend^ref^data.info. byte[ lgth + 4 ], vrfn^data1^tkn.mc^nam^vrfn.clssf, $len( vrfn^data1^tkn.mc^nam^vrfn. clssf ) ); lgth := lgth + 5; end; ! of if vrfn^data1^tkn.clssf <> end; ! of if vrfn^data1^tkn.spcf^use^frmt^cde = call integer^ascii^( sem.moneysend^ref^data.lgth, lgth ); end else begin #ADD 16964 PSTM^FRMT^AMT^TO^SEM^AMT end else if adnl^amts^tkn.info[ i ].amt^typ = "50" then begin movl( sem.addl^amt.info[ amt^num ]. acct^typ, sem.proc^cde.byte[ 2 ], 2 ); movd( sem.addl^amt.info[ amt^num ]. amt^typ, bnet^amt^typ^future^txn^d ); move( sem.addl^amt.info[ amt^num ]. crncy^cde, adnl^amts^tkn.info[ i ].crncy^cde ); move( sem.addl^amt.info[ amt^num ]. typ^amt, adnl^amts^tkn.info[ i ].amt^sign ); move( sem.addl^amt.info[ amt^num ].amt, adnl^amts^tkn.info[ i ].amt ); lgth := lgth + $len( sem.addl^amt.info ); amt^num := amt^num + 1; #ADD 19595 PSTM^FRMT^SEM^ADDL^DATA end; ! of if hiswtkn^get^tkn( pstm, #DELETE 19596 /19626 PSTM^FRMT^SEM^ADDL^DATA #ADD 19695 PSTM^FRMT^SEM^ADDL^DATA movd( tkn^id, ichg^pgm^tkn^id^d ); if hiswtkn^get^tkn ( pstm, tkn^id, @ichg^pgm^tkn, ichg^pgm^tkn^lgth ) then begin ichg^pgm^tkn^fnd := true; end; #ADD 19697 PSTM^FRMT^SEM^ADDL^DATA ! ! ! Process DE 48 SE 03 subfield 01 ! ! ! if ichg^pgm^tkn^fnd = true and ichg^pgm^tkn.frmt^cde = "01" and ichg^pgm^tkn.visa^instl^pmnt^data.plan^rgstr^sys^id <> blanks for $len( ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id ) then begin movd( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag, "01" ); movd( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.lgth, "10" ); movl( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag^data, ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id, $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag^data ) ); if ascii^integer^( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. lgth, sub^lgth ) then begin ! ! If data has already been added to DE 48 SE 03, ! add the length of DE 48 SE 03 subfield 01 ! sub^lgth := sub^lgth + $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id ); end else ! ! If data has not already been added to DE 48 SE 03, ! add the length of DE 48 SE 03 ! begin movd( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03.tag, "03" ); movd( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03.lgth, "14" ); sub^lgth := $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03.tag ) + $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03.lgth ) + $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id ); end; ! ! If data has been added to DE 48 SE 03, ! then adjust the length of DE 48 ! call ascii^integer^( sem.addl^data.lgth, lgth ); lgth := lgth + sub^lgth; call integer^ascii^( sem.addl^data.lgth, lgth ); end; #DELETE 27924h0h/27924h0v SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28511]0R SEM^FRMT^XRESP^TO^PSTM^0210 end else if sem.addl^data.info.mrch^advc^cde^sub^fld^84. tag^data = "43" then begin movd( pos^data3^tkn.adnl^resp^info^cde, "X" ); #ADD 29364 SEM^FRMT^XRESP^TO^PSTM^0210 ( sem.addl^data.info. mrch^fraud^scoring^sub^fld^55.tag = "55" and not sem^acct^stat^inq^d( sem ) ) then #DELETE 29365 /29366 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 30061 SEM^FRMT^XRESP^TO^PSTM^0210 if rqst.addl^data.info.ps2000^rqst^data.tag = "90" then begin move( sem.addl^data.info.ps2000^rqst^data, rqst.addl^data.info.ps2000^rqst^data ); end; if rqst.addl^data.info.ps2000^resp^data.tag = "91" then begin move( sem.addl^data.info.ps2000^resp^data, rqst.addl^data.info.ps2000^resp^data ); end; #ADD 33605 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = sem^auth^advice^d then begin call util^add^advc^data^tkn( sem, pstm, ofst, pos^userdata ); end; ! of if sem.typ = sem^auth^advice^d then #ADD 37456 SEM^FRMT^XRVSL^TO^PSTM^0420 call util^add^advc^data^tkn( rvsl, pstm, ofst, pos^userdata ); #ADD 38040 UTIL^^EXPAND ?section util^add^advc^data^tkn ?page "util^add^advc^data^tkn" !#####################################################################! !# #! !# util^add^advc^data^tkn #! !# #! !# This proc adds the Advice data token (HR) to the internal #! !# message (PSTM). #! !# #! !# INPUT PARAMETERS: #! !# sem - External message #! !# sim - Internal message STM/PSTM #! !# ofst - Offset to the token buffer in the SIM #! !# pos^userdata - POS user data flag #! !# #! !# OUTPUT PARAMETERS: #! !# none #! !# #! !#####################################################################! proc util^add^advc^data^tkn( sem, sim, ofst, pos^userdata ) extensible; int .sem( sem^def ); int .sim; int ofst; int pos^userdata; begin wlform( noroom^err, "UNABLE TO ADD ADVICE DATA TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM : \\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\, SETL DATE: \\\\ " ) wlform( add^err, "UNABLE TO ADD ADVICE DATA TOKEN TO (P)STM: " ',' "PAN: \\\\\\\\\\\\\\\\\\\ SEQ: \\\\\\\\\\\\" ',' " REF: \\\\\\\\\ SETL DATE: \\\\ ERR: #" ) struct .advc^data^tkn( advc^data^tkn^def ); int .advc^data^get^tkn( advc^data^tkn^def ); int advc^data^lgth := $len( advc^data^tkn^def ); int dspy := false; int found^advc^data^tkn := true; int .pstm( pstm^def ) := @sim; int pos^userdata^ := false; int .stm ( stm^def ) := @sim; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^buf^lgth := 0; int .tkn^buf^ptr( dest^crncy^tkn^def ); int tkn^lgth := 0; int tkn^rslt := 0; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; string seq^num[ 0:11 ] := [ 12 * [ " " ] ]; string track2[ 0:39 ] := [ 40 * [ " " ] ]; string pan[ 0:27 ] := [ 28 * [ " " ] ]; if base24^rel^g < 5 or not advice^cde^bit^d then begin return; end; tkn^id ':=' advc^data^tkn^id^d; ! ! ! Determine if the token is in the SIM. ! ! ! if not hiswtkn^get^tkn( sim, tkn^id, @advc^data^get^tkn, tkn^lgth ) then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, advc^data^tkn ); found^advc^data^tkn := false; end else begin found^advc^data^tkn := true; @advc^data^tkn := @advc^data^get^tkn; end; movd( advc^data^tkn.frmt^cde, "02" ); movd( advc^data^tkn.lgth, "60" ); move( advc^data^tkn.bnet.advc^rsn^cde, sem.advice^cde.reason^cde ); move( advc^data^tkn.bnet.advc^detl^cde, sem.advice^cde.detail^cde ); move( advc^data^tkn.bnet.advc^detl^txt, sem.advice^cde.detail^txt ); if not found^advc^data^tkn then begin tkn^lgth := 0; if not $param( pos^userdata ) then begin pos^userdata^ := false; end else begin pos^userdata^ := pos^userdata; end; tkn^rslt := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, advc^data^tkn, advc^data^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata^ ); if tkn^rslt then begin if tkn^rslt = over^max^limit^l then begin call log^message^( 1896, ! routing code !, @noroom^err, net.myname, evt_msg_severity_err_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat ); end else if tkn^rslt <> tkn^exist^l then begin call log^message^( 1897, ! routing code !, @add^err, net.myname, evt_msg_severity_crit_l, @sem.pan.num, @pstm.seq^num, @sem.banknet^data.ref^num, @sem.setl^dat, tkn^rslt ); call abend^( 1897 ); end; end; ! of tkn error ! end; ! of if found^advc^data^tkn = false ! end; #ADD 39647o6F SUB^LOG^ERROR ! ! ! Move values to respective HB token field from ! ! DE 122 SE 001 SF 013 ! ! ! if sem^.addl^rec^data.accpt.geo^coord.tag = "013" then begin call ascii^integer^( sem^.addl^rec^data.accpt.geo^coord.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( adnl^term^owner^tkn.mc.geo^coord, sem^.addl^rec^data.accpt.geo^coord.tag^data, tag^lgth ); add^adnl^term^owner^tkn := true; end; end; ! of if tag 013 ! #ADD 39647o7Z SUB^LOG^ERROR ! ! ! Move values to respective FS token field from ! ! DE 122 SE 001 SF 014 ! ! ! if sem^.addl^rec^data.accpt.srvc^loc^geo^coord.tag = "014" then begin call ascii^integer^ ( sem^.addl^rec^data.accpt. srvc^loc^geo^coord.lgth, tag^lgth ); if tag^lgth > 0 then begin movl( pos^srvc^loc^tkn.geo^coord, sem^.addl^rec^data.accpt. srvc^loc^geo^coord.tag^data, tag^lgth ); add^pos^srv^loc^tkn := true; end; end; ! of if tag 012 ! #ADD 41548 TRACE^SEM ! ! Additional Visa Request Data ! if hdr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. tag = "03" then begin ! ! Move the tag and the tag length ! movl( ptr, hdr.addl^data.info. adnl^visa^rqst^data^sub^fld^03.tag, 4 ); call translate( ptr, 4, ascii^to^ebcdic^l ); @ptr := @ptr '+' 4; ! ! Move Subfield 1 - Plan registration system ! Identifier ! if hdr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag = "01" then begin call ascii^integer( hdr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.lgth, 2, tag^length ); movl( ptr, hdr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag, ( tag^length + 4 ) ); call translate( ptr, tag^length + 4, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 4 ]; end; end; ! of if hdr...tag = "03" ! #ADD 42619 TRACE^SEM ! ! ! Subelement 72 contains issuer chip ! ! authentication data. ! ! The subfield tag and length will be ebcdic ! ! in transmission. The subfield data will be ! ! binary in transmission. ! ! ! #ADD 42625 TRACE^SEM ! ! ! Move the tag and tag length to the ! ! pointer ! ! ! #ADD 42628 TRACE^SEM 4 ); ! ! ! Convert the data moved to the pointer ! ! to ebcdic for transmission ! ! ! call translate( ptr, 4, #DELETE 42629 /42631 TRACE^SEM #ADD 42633 TRACE^SEM ! ! ! Convert the issuer chip authentication data ! ! to binary and move it to the pointer after ! ! the tag and length ! ! ! call hexchar_binary_( hdr.addl^data.info. iss^chip^auth^sub^fld^72. tag^data, ptr[ 4 ] ); #ADD 44636o4b TRACE^SEM ! ! ! Move Subfield 013 - Geographic Coordinates ! ! ! if hdr.addl^rec^data.accpt.geo^coord.tag = "013" then begin call ascii^integer( hdr.addl^rec^data.accpt. geo^coord.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. geo^coord.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 013 ! ! Move Subfield 014 - Service Location ! Geographic Coordinates ! if hdr.addl^rec^data.accpt. srvc^loc^geo^coord.tag = "014" then begin call ascii^integer( hdr.addl^rec^data.accpt. srvc^loc^geo^coord.lgth, 3, tag^length ); movl( ptr, hdr.addl^rec^data.accpt. srvc^loc^geo^coord.tag, ( tag^length + 6 ) ); call translate( ptr, tag^length + 6, ascii^to^ebcdic^l ); @ptr := @ptr[ tag^length + 6 ]; end; ! subfield 014 #ADD 46325 TRACE^SEM ! ! ! Additional Visa Request Data ! ! ! if ptr[ length ] = "03" then begin ! ! ! Move the tag and the tag length ! ! ! movl( sem^ptr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. tag, ptr[ length ], 4 ); @sub^ptr := @ptr[ length '+' 4 ]; loop^lgth := 0; while loop^lgth < ( tag^length ) do begin ! ! ! Move Subfield1 - Plan registration ! ! system identifier ! if sub^ptr = "01" then begin call sub^move^subfield( sem^ptr. addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag ); end ! subfield 01 ! else ! ! ! bad data, clear sem de-48.se-03,! ! end loop ! ! ! begin if field = 0d then begin call ascii^double^( sem^ptr.addl^data.info. adnl^visa^rqst^data^sub^fld^03. tag, field ); field := field + 48000d; end; init( sem^ptr.addl^data.info. adnl^visa^rqst^data^sub^fld^03, " ", $len( sem^ptr.addl^data.info. adnl^visa^rqst^data^sub^fld^03) ); loop^lgth := tag^length; end; end; ! of loop length := length + tag^length + 4; end ! of if ptr[ length ] = "03" else #ADD 47265 TRACE^SEM iss^chip^auth^sub^fld^72.tag, ptr[ length ], 4 ); call binary^hexchar( sem^ptr.addl^data.info. iss^chip^auth^sub^fld^72. tag^data, tag^length * 2, ptr[ length '+' 4 ] ); #DELETE 47266 /47268 TRACE^SEM #ADD 48574o37 TRACE^SEM if ptr[ length ] = "013" then begin movl( sem^ptr.addl^rec^data.accpt. geo^coord.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else if ptr[ length ] = "014" then begin movl( sem^ptr.addl^rec^data.accpt. srvc^loc^geo^coord.tag, ptr[ length ], sub^lgth + 6 ); processed^tag^lgth := processed^tag^lgth + sub^lgth + 6; end else #ADD 49070 UTIL^FRMT^ADDL^DATA^TO^XRVSL ! ! ! Subelement 03-Additional Visa Request Data ! ! ! if sem.addl^data.info.adnl^visa^rqst^data^sub^fld^03.tag = "03" then begin if sem.addl^data.info.adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id.tag = "01" then begin ! ! ! Subfield 01 required ! ! ! move( rvsl.addl^data.info.adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id, sem.addl^data.info.adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id ); tag^lgth := $len( sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03. plan^rgstr^sys^id ); move( rvsl.addl^data.info. adnl^visa^rqst^data^sub^fld^03.tag, sem.addl^data.info. adnl^visa^rqst^data^sub^fld^03.tag ); end; if rvsl.addl^data.info.adnl^visa^rqst^data^sub^fld^03. tag = "03" then begin call integer^ascii^( rvsl.addl^data.info. adnl^visa^rqst^data^sub^fld^03.lgth, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; end; #ADD 49196 UTIL^FRMT^ADDL^DATA^TO^XRVSL ! ! ! Subelement 86-Visa Relationship Participant Indicator ! ! ! if sem.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86 = "86" then begin move( rvsl.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86, sem.addl^data.info.visa^svc^dvlpmt^ind^sub^fld^86 ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. visa^svc^dvlpmt^ind^sub^fld^86 ); end; ! ! ! Subelement 90-Visa Custom Payment Service (CPS) Request ! ! ! if sem.addl^data.info.ps2000^rqst^data.tag = "90" then begin move( rvsl.addl^data.info.ps2000^rqst^data.tag, sem.addl^data.info.ps2000^rqst^data.tag ); move( rvsl.addl^data.info.ps2000^rqst^data.lgth, sem.addl^data.info.ps2000^rqst^data.lgth ); move( rvsl.addl^data.info.ps2000^rqst^data.ind, sem.addl^data.info.ps2000^rqst^data.ind ); de48^lgth := de48^lgth + $len( rvsl.addl^data.info. ps2000^rqst^data.tag ) + $len( rvsl.addl^data.info. ps2000^rqst^data.lgth ) + $len( rvsl.addl^data.info. ps2000^rqst^data.ind ); end; ! ! ! Subelement 91-Visa CPS Request/Transaction ID ! ! ! if sem.addl^data.info.ps2000^resp^data.tag = "91" then begin move( rvsl.addl^data.info.ps2000^resp^data.tag, sem.addl^data.info.ps2000^resp^data.tag ); move( rvsl.addl^data.info.ps2000^resp^data.lgth, sem.addl^data.info.ps2000^resp^data.lgth ); call ascii^integer^( sem.addl^data.info.ps2000^resp^data.lgth, tag^lgth ); movl( rvsl.addl^data.info.ps2000^resp^data.resp^data, sem.addl^data.info.ps2000^resp^data.resp^data, tag^lgth ); de48^lgth := de48^lgth + tag^lgth + 4; end; #ADD 52233 UTIL^ILF^ADD sem^adj^lgth := $offset( sem.addl^data.info.user^fld^aci ); sem^adj^lgth := sem^adj^lgth + $len( sem.addl^data.info.user^fld^aci ); #DELETE 52234 UTIL^ILF^ADD #ENDSCN = SW0S244 !#CMP2.28 09/03/24 BNETLIBS6376 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6376 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6376 * ******************************************************************************** #SCN = SW0S279 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6376 #NEWVERSION = 6377 #ADD 1100200p ! 03SEP2024 wielerk ! Symptom: Interface denies COF request as it appears as Manual ! Entry transaction. ! Problem: The interface was setting DE-22 to "01" based on the ! "M" in Track2. Code was present to reset DE-22 to "10" ! but this occurred after the logic to deny was executed. ! Fix: Modified code to move the setting of DE-22 to "10" ! above the edit for SEM Ecomm. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3663298. #ADD 13125g02 SUB^LOG^ERROR if pstm.pt^srv^entry^mde = pos^unkn or pstm.pt^srv^entry^mde = manual^entry then begin if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" or pos^data1^tkn.pmnt^info = "3" ) then begin movd( sem.pos^entry^mde, credential^on^file^entry^d ); end; end; #DELETE 13131 SUB^LOG^ERROR #DELETE 13543Y01/13543Y02 SUB^LOG^ERROR #DELETE 13545 /13547 SUB^LOG^ERROR #DELETE 13549 /13550 SUB^LOG^ERROR #DELETE 13552 /13555 SUB^LOG^ERROR #ENDSCN = SW0S279 !#CMP2.28 10/03/24 BNETLIBS6377 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6377 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6377 * ******************************************************************************** #SCN = SW0S299 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6377 #NEWVERSION = 6378 #ADD 1100210E ! 03OCT2024 wielerk ! Symptom: Interface sends DE-112.SE-06 with the wrong length. ! Problem: A correction to DDLs caused an additional 10 bytes to ! be sent. ! Fix: Modified code to set the length of DE-112.DE-06 ! without the 10 bytes of filler. ! Proc Modified: pstm^frmt^instl^pmnt^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3668806. #ADD 17847 PSTM^FRMT^INSTL^PMNT^TO^SEM lgth := $len( sem.adnl^data^natl.srvc.sub^fld^6 ) '-' $len( sem.adnl^data^natl.srvc.sub^fld^6. user^fld^aci ); call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); #DELETE 17848 /17851 PSTM^FRMT^INSTL^PMNT^TO^SEM #ENDSCN = SW0S299 !#CMP2.28 10/24/24 BNETLIBS6378 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6378 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6378 * ******************************************************************************** #SCN = SW0S317 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6378 #NEWVERSION = 6379 #ADD 1100220C ! 24OCT2024 jayaprm ! Symptom: Invalid length in DE108 at outbound messages to ! MasterCard ! Problem: The DE108 is formatted incorrectly in the response. ! The DE108 SE08 is populated even if DE108 SE07 is not ! present in the request message. ! Fix: Modified code to populate DE 108 SE 08 in response ! message only if DE 108 SE 07 is present in the request. ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3676120. #ADD 1541406N PSTM^FRMT^0210^TO^XRESP if vrfn^data1^tkn^fnd then #REPLACE 15414-1D PSTM^FRMT^0210^TO^XRESP end; ! of if vrfn^data1^tkn^fnd ! #ENDSCN = SW0S317 !#CMP2.28 10/30/24 BNETLIBS6379 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6379 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6379 * ******************************************************************************** #SCN = SW0S319 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6379 #NEWVERSION = 6380 #ADD 1100230E ! 30OCT2024 wielerk ! Symptom: Interface sends FJ token when it has not been ! initialized. ! Problem: The only condition checked before adding the FJ token ! is against a token that has not been located in the ! PSTM or initialized. ! Fix: Modified code to initialize mrch^id^lgth to 0 and ! add an edit of this field to be greater than 0 ! to determine to add the FJ token. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3677657. #REPLACE 31070 SEM^FRMT^XRQST^TO^PSTM^0200 int mrch^id^lgth := 0; #REPLACE 35679-01/35679-02 SEM^FRMT^XRQST^TO^PSTM^0200 if dgtl^remt^pmnt^tkn.frmt^cde = "01" and mrch^id^lgth > 0 then #ENDSCN = SW0S319 !#CMP2.28 11/07/24 BNETLIBS6380 FIX SW60BNET *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60BNET.BNETLIBS BNETLIBS 6380 * * NEW FILE: \OMA3T06.$CKOUT.SW6DBNET.BNETLIBS BNETLIBS 6380 * ******************************************************************************** #SCN = SW0S323 , FILEID = BNETLIBS #VOLUME = $ROOK.SW60BNET #FILE = BNETLIBS #PRODUCTID = SW60BNET #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6380 #NEWVERSION = 6381 #ADD 1100240F ! 07NOV2024 wielerk ! Symptom: Interface sends DE-112.SE-08 with the wrong length. ! Problem: A correction to DDLs caused an additional 17 bytes to ! be sent. ! Fix: Modified code to set the length of DE-112.DE-08 ! without the 17 bytes of filler. ! Corrected the length to adjust to the sub-field 08 ! length. ! Proc Modified: pstm^frmt^instl^pmnt^to^sem ! Dependency: Apply fix to: ! SW60BNET: BNETLIBS. ! Run Make. ! Reference: Case #3676107. #ADD 15683 PSTM^FRMT^0210^TO^XRESP call ascii^integer^( sem.adnl^data^natl.lgth, lgth ); call ascii^integer^( sem.adnl^data^natl.srvc.sub^fld^8. lgth, de^lgth ); lgth := lgth + de^lgth + 6; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); #DELETE 15684 /15687 PSTM^FRMT^0210^TO^XRESP #ADD 15699 PSTM^FRMT^0210^TO^XRESP call ascii^integer^( sem.adnl^data^natl.lgth, lgth ); call ascii^integer^( sem.adnl^data^natl.srvc.sub^fld^8. lgth, de^lgth ); lgth := lgth + de^lgth + 6; call integer^ascii^( sem.adnl^data^natl.lgth, lgth ); #DELETE 15700 /15705 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0S323